OpenGL学习笔记——搭建OpenGL程序框架

一、程序及运行效果

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

猜你喜欢

转载自blog.csdn.net/qq_41140138/article/details/100590519