基于PyOpenGL对OpenGL进行学习。本例根据C++代码来构建Python程序。首先实现一个入门程序。
在C++中,一般会引用gl.h和glu.h,或者是glut.h。若使用GLUT处理窗口管理操作,则不需引入前两个头文件。在Python中,进行如下引用:
from OpenGL.GLUT import *
from OpenGL.GLU import *
from OpenGL.GL import *
初始化语句:
gluiInit()
创建窗口标题语句:
glutCreateWindow('标题名')
接下来,需要指定显示窗口中要显示的内容。将用于创建要显示图的函数名传给glutDisplayFunc()。
执行下列语句后,所有已创建的显示窗口连同其中的图形内容将被激活:
glutMainLoop()
该函数必须是程序中的最后一个。它显示初始图形并使程序进入检查鼠标或键盘等设备输入的无穷循环之中。
其他函数:
glutInitWindowPosition() 用于给出窗口左上角的初始位置。
glutInitWindowSize() 用于设定显示窗口的初始宽度和高度的像素数。
glutInitDisplayMode() 用于设定显示窗口的缓存和颜色模型等选项。该函数的变量使用符号化GLUT常量来赋值。例如,下面的命令指出显示窗口使用单个缓存且使用由红绿蓝三元素组成的颜色模型来选择颜色:
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB)
显示窗口的其他设置函数:
glClearColor() 可用于通过设定RGB值设定显示窗口的背景颜色。要使上述赋值的窗口得到显示,必须引用glClear()。具体如下:
glClear(GL_COLOR_BUFFER_BIT)
GL_COLOR_BUFFER_BIT用于指定它是颜色缓存(刷新缓存)中的位值,该缓存将使用glClearColor函数中指定的值来设定。
在第一个程序汇总,要显示一条简单的二维线段。为此,需告诉OpenGL怎样将图形投影到显示窗口中,因为在OpenGL中把生成二维线段看成生成三维线段的特例。使用下面两个函数来设置投影类型和其他观察参数:
glMatrixMode(GL_PROJECTION)
gluOrtho2D(0.0,200.0,0
0,150.0)
表示:使用正投影将世界坐标系二维矩形区域的内容映射到屏幕上,区域的x坐标值从0.0到200.
0,y坐标值从0.0到150.0.只要是在该矩形内定义的对象,都会出现在显示窗口中。
本程序用于绘制一条直线。直线颜色为绿色,起点为(180,15),终点为(10,145),窗口背景为白色。代码如下:
from OpenGL.GLUT import *
from OpenGL.GLU import *
from OpenGL.GL import *
def lineSegment():
glClear(GL_COLOR_BUFFER_BIT)
glColor3f(0.0,0.4,0.2) #线的颜色为绿色
glBegin(GL_LINES)
glVertex2i(180,15)
glVertex2i(10,145)
glEnd()
glFlush()
def init():
glClearColor(1.0,1.0,1.0,0.0)
glMatrixMode(GL_PROJECTION)
gluOrtho2D(0.0,200.0,0.0,150.0)
if __name__=="__main__":
glutInit()
glutInitDisplayMode(GLUT_SINGLE|GLUT_RGB)
glutInitWindowPosition(50,100)
glutInitWindowSize(400,300)
glutCreateWindow(u'First Program')
init()
glutDisplayFunc(lineSegment)
glutMainLoop()
描述图形的函数lineSegment成为一个显示回调函数。该函数由glutDisplayFunc作为在显示窗口需要重新显示时引入的函数来“注册”。