pushMatrix()/ popMatrix()能够堆叠吗?

时间:2012-11-05 05:31:56

标签: java opengl

如果你不明白我在问什么,我的意思是 -

glPushMatrix();
glPushMatrix();
glPushMatrix();
glPushMatrix(); // push matrix 4 times
glTranslatef(...);
//do stuff
glPopMatrix(); // pull it up 1, so we can do more stuff
glTranslatef(...);
// do stuff
glPopMatrix(); // and again, and again, etc
glTranslatef(...);
// do stuff
glPopMatrix();
glTranslatef(...);
// do stuff
glPopMatrix();

一切都还能解决吗?

1 个答案:

答案 0 :(得分:1)

是的,glPushMatrix将当前矩阵模式(GL_PROJECTIONGL_MODELVIEW等)的当前矩阵推送到矩阵堆栈,glPopMatrix弹回第一个矩阵堆栈。每个矩阵模式都有单独的堆栈。

看起来没有足够的官方OpenGL手册页来获得有关此方法的文档,但此网站是第一批结果之一,并包含相同的文字:http://www.manpagez.com/man/3/glPushMatrix/

根据该页面,看起来GL_MODELVIEW堆栈保证至少32个矩阵深度,而所有其他堆栈至少2个深度。在现代卡片上,它们可能要高得多。您可以使用适当的堆栈深度参数调用glGet来轮询确切的数字,例如GL_MODELVIEW_STACK_DEPTHGL_PROJECTION_STACK_DEPTH等。

此外,很久以前不推荐使用矩阵堆栈来支持用户管理的矩阵。如果您正在编写一个小程序或只是学习,那么使用已弃用的OpenGL就完全没问题了。我觉得我应该为了OpenGL矩阵的完整性而提及它。