2010-04-22 60 views
0

我有一个增强现实iPhone应用程序,正在从核心动画转换为OpenGL ES 1.1。我添加了从Apple OpenGL模板修改的代码。我的3D对象(opengl es)正在消失在iPhone摄像头视图后面

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

我已经决定什么:

使用从杰夫拉马什的博客这里的3D二十面体,该物体在0,0,0开始,然后随Z坐标转换。当z值达到-2.0f时,物体消失。它看起来好像正在照相机视图后面消失。 这是我如何设置我的frustrum &视口(与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。为了测试目的,我评论了这些意见。 我已经应用CATransforms在z方向-500和+500上移动openGLView,并且对相机视图也一样。 我也已将上述代码中的zFar更改为1.0f,并且它在-2.0的z位置仍然消失,这没有意义(它不应该在z = 1.0时消失)

我的实验让我比开始时更困惑(通常意味着我错过了一个关键部分,但我无法弄清楚)。谢谢你的帮助。

+0

你确定你的相机在原点吗?可能你已经在z-xis中将它翻译为-1。 – 2010-04-23 17:29:57

+0

是的,我确定相机在(0,0,0)。我还没有移动它,此外,模型正在从视口移开,并进一步向下沿负Z轴。 – KLC 2010-04-26 01:20:48

回答

1

给这个zFar值相当大的值,如1000

顺便说记得平截面z值应该给出-zNear和-zFar。所以如果你需要将你的对象从你身上转移出来,那么z值应该足够大以支持场景。因此 - ( - zFar)变成较大的正值。