0

我有一个增强现实 iPhone 应用程序,我正在将其从 Core Animation 转换为 OpenGL ES 1.1。我添加了从 Apple OpenGL 模板修改的代码。

我的问题是我的 3D 对象在沿负 Z 轴(远离用户)平移时,似乎消失在相机视图中,直到完全消失。我尝试了几种解决方案,但无济于事。

我已经确定:

使用此处 Jeff Lamarche 博客中的 3D 二十面体,对象从 0,0,0 开始,然后随着 z 坐标的减小平移。当 z 值达到 -2.0f 时,对象就消失了。它似乎消失在相机视图后面。这就是我设置我的视锥体和视口的方式(与 Apple 的代码相同)

glMatrixMode(GL_PROJECTION); 大小 = zNear * tanf(DEGREES_TO_RADIANS(fieldOfView) / 2.0);

//Grab the size of the screen
CGRect rect = self.bounds;
glFrustumf(-size, size,
           -size / (rect.size.width / rect.size.height),
           size / (rect.size.width / rect.size.height),
           zNear, zFar);
glViewport(0, 0, rect.size.width, rect.size.height);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();

我尝试过的:相机视图是主视图,其他几个视图作为子视图添加到其中,包括 openGLView。出于测试目的,我已将这些观点注释掉。我已应用 CATransforms 在 z 方向 -500 和 +500 上移动 openGLView,并对相机视图执行相同操作。我也把上面代码中的zFar改成了1.0f,在-2.0的z位置还是消失了,没有意义(不应该是在z=1.0的时候消失吗?)

我的实验让我比开始时更加困惑(这通常意味着我错过了一个关键部分,但我不知道是什么)。谢谢你的帮助。

4

1 回答 1

1

给 zFar 值一个相当大的值,比如 1000。

顺便记住,平截头体的 z 值应该用 -zNear 和 -zFar 给出。因此,如果您需要将对象从您身边平移出来,则 z 值应该足够大以支持场景。因此 -(-zFar) 变为更大的正值。

于 2011-07-23T14:34:16.577 回答