在iphone中,当对象远离时,曲面被破坏

在iphone中,当对象远离时,曲面被破坏,iphone,opengl-es,Iphone,Opengl Es,我正在使用opengl es显示对象 当物体靠近相机时,一切都是完美的。 但是,如果将对象移动到远离摄影机的地方,对象的表面就会断裂 断开的对象将类似于: 绘制对象的代码段是: glVertexPointer(3, GL_FLOAT, 32, self.vertices); glNormalPointer(GL_FLOAT, 32, &(self.vertices[3])); glTexCoordPointer(2, GL_FLOAT, 32, &(self.vertices[

我正在使用opengl es显示对象

当物体靠近相机时,一切都是完美的。 但是,如果将对象移动到远离摄影机的地方,对象的表面就会断裂

断开的对象将类似于:

绘制对象的代码段是:

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]));
我想原因可能是浮点数的精度


有人能解决这个问题吗?谢谢

问题在于深度缓冲精度

对深度值进行缩放,使距离较近的对象比距离较远的对象具有更大的可能深度值范围。因此,距离较远的物体更可能出现z形格斗和其他类似问题。见中的问题12.070

近平截头体平面和远平截头体平面应始终设置为尽可能靠近:即:近平面应尽可能远离摄影机,但仍比渲染对象近,远平面应尽可能靠近,但仍比渲染对象远

看起来您只是在渲染一个对象-在该对象上查找最近和最近的点,添加一点填充以确保安全,并将这些值用于近平面和远平面


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

谢谢,根据您的答案修改代码后,问题解决了。