我有一个增强现实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); size = 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。我已将这些观点评论出来用于测试目的。 我已经应用了CAT变换来在z方向-500和+500上移动openGLView,并对摄像机视图做了相同的操作。 我也将上面代码中的zFar更改为1.0f,它仍然在-2.0的z位置消失,这没有意义(不应该在z = 1.0时消失?)
我的实验让我比起初时更加困惑(这通常意味着我错过了一个关键部分,但我无法弄清楚是什么)。谢谢你的帮助。
答案 0 :(得分:1)
给zFar值一个非常大的值,比如1000。
顺便提一下,记住视锥体的z值应该是-zNear和-zFar。因此,如果您需要将对象转换为远离您,则z值应足够大以支持场景。因此 - ( - zFar)变得更大的正值。