`
把酒泯恩仇
  • 浏览: 26428 次
  • 性别: Icon_minigender_1
  • 来自: 广州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

一步一步的教你实现opengl的功能

阅读更多

原文查看

 

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

以下是该代码的运行效果
opengl

opengl

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics