1

我有使用旧 OpenGL ES 1 的 Android 项目。我正在使用这种嵌套调用:

...
gl.glPushMatrix();
...
gl.glPushMatrix();
...
gl.glPopMatrix();
...
gl.glPopMatrix();
...

它在模拟器和我的手机上运行良好,但在我的选项卡和我兄弟的选项卡上不起作用(对象的位置错误)。根据我的测试,似乎不支持嵌套的 glPushMatrix ,就像堆栈大小只有 1 一样,所以第一个 POP 不会返回到之前的 PUSH 状态,而是返回到第一个 PUSH 状态。我尝试了不使用嵌套调用的解决方法,它工作正常,但这样的解决方案使我的下一个工作复杂化。那是已知的事情吗?某些设备上的堆栈大小是否只有 1?我认为它应该至少是 32 或类似的东西。它是否以某种方式可检测和/或可配置?我可以以某种方式将矩阵导出到某个数组或不同的结构中以创建自己的堆栈并手动从中加载吗?谢谢。

4

1 回答 1

2

您可以使用以下命令读取堆栈的深度:

glGetIntegerv(GL_MAX_MODELVIEW_STACK_DEPTH, &result);

它确实应该至少是 32。

这是假设您实际上正在使用 GL_MODELVIEW 矩阵堆栈,并且您不会不小心将所有转换推入 GL_PROJECTION 或其他东西。

理想情况下,您应该自己计算矩阵,因为此功能已被弃用。

于 2013-01-19T19:43:47.050 回答