-1

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

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();

一切还会顺利吗?

4

1 回答 1

1

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

看起来没有足够旧的官方 OpenGL 手册页来提供有关此方法的文档,但该站点是第一个结果之一,并且包含相同的文本: http: //www.manpagez.com/man/ 3/glPushMatrix/

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

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

于 2012-11-05T05:52:10.123 回答