处理非常接近的布料相互作用的顶点(闪烁的孔行为)

时间:2016-06-15 12:27:43

标签: android opengl-es precision

我的场景中有三种不同的OBJ,一种身体,以及在该身体上模拟的衬衫和裤子(按此顺序呈现)。

渲染在我测试的Android设备上以某些“洞”的形式显示了裤子外面的内衬,而它在桌面上工作得很好。

enter image description here

我猜测某些点彼此非常接近,因此尝试了highp以获得精确度,并且它在我的某些设备上开始工作正常(令人惊讶的是它不适用于一岁的Nexus!)

enter image description here

Q值。我是否确定了正确的问题,或者可能是因为任何其他可能的原因。有什么办法可以在所有设备上解决这个问题吗?

Q值。我能以某种方式至少知道哪些GPU会出现这个问题,以便我可以相应地定位我的APK吗?

使用:

Android 5.0

OpenGL ES 3.0

编辑:

如果有任何帮助,旋转场景或放大时间,这些洞会显示出“闪烁的行为”。

2 个答案:

答案 0 :(得分:0)

highp支持不是强制性的,而且AFAICT它也不是一个'扩展程序,因此您无法查询它并且也不会记录它的支持GLES功能数据库,如http://opengles.gpuinfo.org/

您可以使用glGetShaderPrecisionFormathttp://docs.gl/es3/glGetShaderPrecisionFormat

查询着色器的精度

当然,您可以根据应用程序了解实际需要的精确度。这是在运行时,无法提前知道。

答案 1 :(得分:0)

好吧,所以我似乎已经解决了这个问题。

我引用opengl archives

  

12.040深度缓冲似乎有效,但多边形似乎会通过它们前面的多边形渗透。发生了什么?

     

您可能已经以某种方式配置了zNear和zFar剪裁平面   这严重限制了深度缓冲精度。一般来说,这是   由zNear剪裁平面值引起的距离太接近0.0。作为   z近似剪裁平面设置越来越接近0.0,有效   深度缓冲区的精度急剧下降。移动zFar   剪切平面进一步远离眼睛总是有负面影响   关于深度缓冲精度,但它并不像移动它那样引人注目   z近似剪裁平面。

同一页面有很多关于边界框和相关问题的细节。很好读。

我有一个巨大的BB。我减小了尺寸并将相机移近物体,所有设备都解决了这个问题。

相关问题