文章目录
- 1 参考资料
- 2 入门指引
- 2.1 本系列教程起点与终点
- 3 利用Pyopengl画一个窗口
- 3.1 先亮出代码
- 3.2 简化版本
本人这段时间正在做opengl和opencv结合的工作,本打算利用python快速实现,却在项目深入的过程中遇到了许多的OpenGL的相关问题。网上多数教程都是几篇教程衍生出来,可以解决我的一部分问题,但是并不全面。自己特此参考一篇c++教程,将其改为python实现。以记录此段过程之艰辛。
1 参考资料
1.C++的opengl教程: link.
2.python的pyopengl入门教程:link.
3.其余资料皆来自于名词概念查于百度
2 入门指引
2.1 本系列教程起点与终点
本教程起始于从OpenGL画一个窗口,终止于为物体加上光照效果。
3 利用Pyopengl画一个窗口
教程中使用GLEW感觉上与GLUT差不多,我一开始看资料的时候用的是GLUT这个教程也就继续使用GLUT了,使用与原教程差距不大。
3.1 先亮出代码
from OpenGL.GL import *
from OpenGL.GLUT import *
def draw():
glClear(GL_COLOR_BUFFER_BIT)
glFlush() # GLUT_SINGLE模式下的刷新函数
glutSwapBuffers() # GLUT_DOUBLE模式下的刷新函数
if __name__ == '__main__':
glutInit() # glut初始化
glutInitDisplayMode(GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH) # 选择glut模式
glutInitWindowSize(700, 700) # 设置glut窗口尺寸
glutCreateWindow('demo') # 为窗口起名字
glClearColor(1, 0, 0, 0) # 设置窗口清理缓存之后的颜色
glutDisplayFunc(draw) # 注册绘制窗口内容的函数
glutMainLoop() # glut程序主循环
其中别的代码没什么好介绍的,重点说一下窗口清理缓存绘制颜色。
glClearColor(1, 0, 0, 0) # 设置窗口清理缓存之后的颜色
我们绘图是快速刷新的,这个函数指定了绘图之后初始刷新颜色,相当于绘图的底色。这个函数结合这两个函数实现窗口的刷新。
glFlush() # GLUT_SINGLE模式下的刷新函数
glutSwapBuffers() # GLUT_DOUBLE模式下的刷新函数
3.2 简化版本
from OpenGL.GL import *
from OpenGL.GLUT import *
def draw():
pass
# glClear(GL_COLOR_BUFFER_BIT)
# glFlush() # GLUT_SINGLE模式下的刷新函数
# glutSwapBuffers() # GLUT_DOUBLE模式下的刷新函数
if __name__ == '__main__':
glutInit() # glut初始化
glutInitDisplayMode(GLUT_DOUBLE | GLUT_ALPHA | GLUT_DEPTH) # 选择glut模式
# glutInitWindowSize(700, 700) # 设置glut窗口尺寸
glutCreateWindow('demo') # 为窗口起名字
# glClearColor(1, 0, 0, 0) # 设置窗口清理缓存之后的颜色
glutDisplayFunc(draw) # 注册绘制窗口内容的函数
glutMainLoop() # glut程序主循环
这是实现一个窗口的最低要求。