手把手教你实现openGL的功能哦

it2022-05-08  9

原文查看

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

以下是该代码的运行效果

转载于:https://www.cnblogs.com/ibaiyang/archive/2012/12/27/2836488.html


最新回复(0)