文章目录

  • 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程序主循环

这是实现一个窗口的最低要求。