gpt4 book ai didi

iphone - 为什么在使用 OpenGL ES 2.0 的 gluLookat 后我的对象消失了?

转载 作者:行者123 更新时间:2023-12-03 20:21:29 25 4
gpt4 key购买 nike

我正在为 iPhone 制作一个简单的游戏,并尝试实现在 GLView 周围移动相机的效果。

我正在使用带有顶点和颜色指针的 glDrawArrays 绘制大约一百个对象。之后,我想将相机向右移动 1 个单位。这是我的 drawView 方法中的代码片段。我将矩阵模式更改为投影堆栈,然后在项目操作完成后更改回模型 View 模式(我可能会弄错,我是 OpenGL 的新手)。

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glTranslatef(1.0, 0.0, 0.0);
glMatrixMode(GL_MODELVIEW);

无论如何,结果肯定是出乎意料的。发生的情况是,我非常短暂地看到了我的物体(可能是一帧),然后它们就消失了。如果我去掉上面 block 中的 glTranslatef ,也会发生同样的事情。

我做错了什么?

提前致谢!

之前

alt text

之后

alt text

最佳答案

对于初学者来说,OpenGL 的一个令人困惑的方面是投影矩阵中发生的情况与模型 View 矩阵中发生的情况之间的区别(以及为什么您需要两者?)

投影矩阵负责将顶点坐标转换为 2D 坐标系中的点(它将世界转换到虚拟胶片上 - 视口(viewport))。投影矩阵仅指定相机的行为(例如:它应该是广角镜头、长焦镜头,还是完全正交的镜头,如建筑倾斜图?)。

另一方面,模型 View 矩阵负责指定顶点在 3D 空间中的位置。例如,要指定角色的 ARM 相对于角色 body 的位置,或者该角色相对于世界的位置,您将需要更改模型 View 矩阵。值得注意的是,特别是相机位置和方向的变化属于模型 View 矩阵(它是它的“ View ”部分)

令人困惑的原因是,最终,您提供给 OpenGL 的顶点将乘以模型 View 矩阵,然后乘以投影矩阵。也就是说,给定模型 View 矩阵 M、投影矩阵 P 和顶点 v,顶点的最终坐标由 PMv 给出。这意味着无论您使用哪个矩阵,某些转换似乎都有效。您应该小心这一点 - 当您了解更高级的 OpenGL 技术时,您将遇到使用正确的矩阵会产生影响的情况。

但是,在您达到这一点之前,让我给您一个很好的经验法则。在您习惯这两个矩阵之间的区别之前,仅在投影矩阵上使用 glOrthoglFrustum (gluPerspective 及其 friend 也可以) 。所有其他调用(glTranslateglScaleglRotate 等)都属于您应该对模型 View 矩阵执行的操作类别。

关于iphone - 为什么在使用 OpenGL ES 2.0 的 gluLookat 后我的对象消失了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3172623/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com