原文查看
http://www.ibaiyang.org/2012/12/27/a-opengl-like-implementatio/
学过openGL人知道,openGL状态机的设计着实令人印象深刻。每一种状态都会一直持续影响后面物体的绘制,直到改变此状态。
openGL中维护了二套矩阵,模式视图矩阵,投影矩阵,这二套矩阵完成了所有的从三维到二维的几何变化,包括旋转,缩放,平移和投影。同时openGL还维护了二个栈,一个存储模式视图矩阵,一个存储投影矩阵。
千万不要小看这个栈的设计,我们可以举一个例子。
draw_object(1) rotate(1) translate(1) push_matrix() draw_object(2) rotate(2) translate(2) pop_matrix() draw_object(3)
其中rotate(2), translate(2)是不会影响draw_object(3)函数的,因为前面push_matrix将当前的压入栈中,当draw_object(2)后,pop_matrix()又恢复了之前的状态,故在draw_object(3)时,就恢复到了rotate(1),translate(1)的状态了。
我抽空用python和pyqt基本实现openGL的三维变化功能和二个栈的模拟。
代码放在我的github中。
https://github.com/baiyang/valleygl
以下是该代码的运行效果