如果你不明白我在问什么,我的意思是 -
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();
一切都还能解决吗?
答案 0 :(得分:1)
是的,glPushMatrix
将当前矩阵模式(GL_PROJECTION
,GL_MODELVIEW
等)的当前矩阵推送到矩阵堆栈,glPopMatrix
弹回第一个矩阵堆栈。每个矩阵模式都有单独的堆栈。
看起来没有足够的官方OpenGL手册页来获得有关此方法的文档,但此网站是第一批结果之一,并包含相同的文字:http://www.manpagez.com/man/3/glPushMatrix/
根据该页面,看起来GL_MODELVIEW
堆栈保证至少32个矩阵深度,而所有其他堆栈至少2个深度。在现代卡片上,它们可能要高得多。您可以使用适当的堆栈深度参数调用glGet
来轮询确切的数字,例如GL_MODELVIEW_STACK_DEPTH
或GL_PROJECTION_STACK_DEPTH
等。
此外,很久以前不推荐使用矩阵堆栈来支持用户管理的矩阵。如果您正在编写一个小程序或只是学习,那么使用已弃用的OpenGL就完全没问题了。我觉得我应该为了OpenGL矩阵的完整性而提及它。