【问题标题】:Nested glPushMatrix does not work (stack size 1?)嵌套的 glPushMatrix 不起作用(堆栈大小为 1?)
【发布时间】:2013-01-03 06:57:39
【问题描述】:

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

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

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

【问题讨论】:

    标签: android opengl-es projection-matrix


    【解决方案1】:

    您可以使用以下方法读取堆栈的深度:

    glGetIntegerv(GL_MAX_MODELVIEW_STACK_DEPTH, &result);
    

    确实应该至少是 32。

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

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

    【讨论】:

    • 天哪,谢谢你的回答!很抱歉,这真的是我的错误,我使用的是 GL_PROJECTION 和 glOrthof...我切换到 GL_MODELVIEW,它现在工作正常。非常感谢,我在“经典”OpenGL 中工作已经很多年了,似乎我几乎忘记了一切。
    • 关于已弃用的功能 - 是的,我知道,我可能会尽快为这个或下一个项目切换到 ES 2.0。
    猜你喜欢
    • 2015-08-03
    • 1970-01-01
    • 1970-01-01
    • 2018-06-21
    • 1970-01-01
    • 2012-07-26
    • 2023-04-08
    • 2014-02-14
    • 1970-01-01
    相关资源
    最近更新 更多