当物体远离iphone时,表面会破裂

时间:2011-03-27 14:43:40

标签: iphone opengl-es

我正在使用opengl来显示对象。

当物体靠近相机时,一切都很完美。 但如果物体远离相机移动,物体表面就会破裂。

破碎的物体将如下:

the broken object at (0,0,-500.0)

绘图对象的代码片段是:

glVertexPointer(3, GL_FLOAT, 32, self.vertices);
glNormalPointer(GL_FLOAT, 32, &(self.vertices[3]));
glTexCoordPointer(2, GL_FLOAT, 32, &(self.vertices[6]));    

glDrawElements(GL_TRIANGLES, self.indexNumber, GL_UNSIGNED_SHORT, &(self.faces[0]));

我猜原因可能是浮点数的精确度。

任何人都有解决方案吗?感谢

1 个答案:

答案 0 :(得分:2)

问题是深度缓冲精度。

缩放深度值,使得较近的物体具有比远离物体更大的可能深度值范围。因此,远距离物体更可能表现出z战斗和其他类似问题。请参阅this FAQ.

中的问题12.070

近平截头体和远平截头体平面应始终设置为尽可能靠近:即:近平面应尽可能远离相机,同时仍然比渲染对象更近,远平面应该是尽可能接近但仍远离渲染对象。

看起来你只是渲染一个对象 - 找到该对象上最近和最近的点,添加一些填充以保证安全,并将这些值用于近距离和远距离平面。

如果必须使用距离和前景中的对象渲染场景,并且遇到类似问题,则可以将渲染分为两个阶段。首先使用适当的near和far值渲染远处的对象,然后清除深度缓冲区并使用自己适当的near和far值渲染前景对象。