用OpenGL画一个居中的正方形。改变窗口大小时,使用回调函数ChangeSize重新绘制正方形,在glViewport和glOrtho函数帮助下,实现正射投影(即不随窗口的纵横比变化,始终显示为正方形。)
glViewport (x,y,width,height) 设置窗口区域
glOrtho (left,right,top,bottom,near,far)设置或修改修剪空间的范围;
#coding:utf-8
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
def RenderScene():
#清除之前画面
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(1.0,0.0, 0.0) #不透明,填充颜色红色
glRectf(100.0, 150.0, 150.0, 100.0) #画矩形
#刷新显示
glFlush()
#设置渲染状态
def SetupRC():
glClearColor(0.0, 0.0, 1.0, 1.0) #背景蓝色
#改变窗口大小时调用
def ChangeSize(w,h):
if(h == 0): #防止除数为0
h = 1
glViewport(0, 0, w, h)
glMatrixMode(GL_PROJECTION)
glLoadIdentity()
if (w <= h):
glOrtho (0.0, 250.0, 0.0, 250.0*h/w, 1.0, -1.0)
else:
glOrtho (0.0, 250.0*w/h, 0.0, 250.0, 1.0, -1.0)
glMatrixMode(GL_MODELVIEW)
glLoadIdentity()
#使用glut初始化OpenGL
glutInit()
#显示模式:GLUT_SINGLE无缓冲直接显示|GLUT_RGB采用RGB
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB)
glutCreateWindow(b"GLRect")
#调用函数绘制图像
glutDisplayFunc(RenderScene)
glutReshapeFunc(ChangeSize)
SetupRC()
#主循环
glutMainLoop()