一、程序及运行效果
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
def drawFunc():
glClear(GL_COLOR_BUFFER_BIT)
#glRotatef(1, 0, 1, 0)
glutWireTeapot(0.5)
glFlush()
glutInit()
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)
glutInitWindowSize(600, 600)
glutCreateWindow("Teapot")
glutDisplayFunc(drawFunc)
#glutIdleFunc(drawFunc)
glutMainLoop()
这个程序绘制了一个犹他茶壶:
二、使用OpenGL
模块导入
使用OpenGL的函数之前导入需要的所有函数
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
函数命名
OpenGL的函数的一般命名规则为:<前缀><根函数><参数数目><参数类型>
举个例子: glColor3f()
表示该函数属于gl库,含有3个参数,参数类型为float指针
初始化窗口
下面6行代码基本上是固定的
glutInit()
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)
glutInitWindowSize(600, 600)
glutCreateWindow("Teapot")
glutDisplayFunc(drawFunc)
glutMainLoop()
函数名 | 描述 |
---|---|
glutInit() | 初始化OpenGL |
glutInitDisplayMode(Mode) | 其参数GLUT_RGBA使用(r, g, b)格式,GLUT_SINGLE意味着所有的绘图操作都直接在显示的窗口执行 |
glutInitWindowSize(400, 400) | 设置窗口大小 |
glutInitWindowPosition | 设置窗口位置 |
glutCreateWindow(“Teapot”) | 生成一个窗口,命名为Teapot |
glueDisplayFunc(func) | 参数为一个函数名,用来绘制OpenGL窗口,函数里包含很大OpenGL的绘图指令 |
glutMainLoop() | 主循环,调用后OpenGL就一直运行下去 |
其中,glutInitDisplayMode()还有其他可选的参数:
绘制函数
在drawFunc函数定义中,包含了实际绘图的函数:
glClear(GL_COLOR_BUFFER_BIT):吧先前的画面清除,避免重叠,参数知名要清楚的buffer
glutWireTeapot(0.5):一个glut中绘制犹他茶壶的函数,使用的是线模型
glFlush():刷新屏幕上的更新,处理OpenGL的渲染流水线,让所有排队的指令得到执行
旋转的茶壶:将被注释掉的两行语句取消注释,就可以看到一个旋转的茶壶了
三、OpenGL程序框架
from OpenGL.GL import *
from OpenGL.GLU import *
from OpenGL.GLUT import *
def init():
glClearColor(0.0, 0.0, 0.0, 1.0) # 设置背默认景色为黑色
glColor3f(1.0, 1.0, 1.0) # 设置默认绘制颜色为白色
glMatrixMode(GL_PROJECTION) # 是否受后续变换函数影响
glLoadIdentity() # 初始化为单位矩阵
gluOrtho2D(-1.0, 1.0, -1.0, 1.0) # 设置坐标范围
def display():
glClear(GL_COLOR_BUFFER_BIT) # 绘制前清屏,防止重叠
glBegin(GL_MODE)
GL_Vertex(a, b, c)
glEnd()
glFlush() # 时缓冲区指令得到执行,刷新屏幕
def main():
glutInit()
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA)
glutInitWindowSize(500, 500)
glutInitWindowPosition(200, 100)
glutCreateWindow("simple")
glutDisplayFunc(display)
init()
glutMainLoop() # 回调函数
main()
完结 cheers ?
参考:目光博客、从零开始pyOpenGL