OpenGL ES 2.0在纹理采样方面存在严重的精度问题 - 我看到过一些与这个类似的问题,但是我还没有看到一个真正解决这个“扭曲的OpenGL ES 2.0纹理”问题的方法。
这不是与纹理的图像格式或OpenGL颜色缓冲区相关的,似乎这是一个精度误差。我不知道具体是什么原因导致了精度失效 - 似乎不仅仅是几何大小引起了这种扭曲,因为简单地缩放传递给顶点着色器的顶点位置并不能解决这个问题。
以下是一些出现纹理扭曲的例子:
扭曲的纹理(在OpenGL ES 2.0上):http://i47.tinypic.com/3322h6d.png
纹理正常情况下的外观(也在OpenGL ES 2.0上):http://i49.tinypic.com/b4jc6c.png
纹理问题仅限于OpenGL ES 2.0上的小规模几何,否则纹理采样看起来正常,但是粒状效果随着顶点数据离XYZ(0,0,0)原点越远而逐渐恶化。
这些纹理问题在桌面OpenGL上不会出现(在Windows XP、Windows 7和Mac OS X下工作正常)
我只看到这个问题在Android、iPhone或类似于OpenGL ES 2.0的WebGL上出现过。
所有的纹理都是2的幂次方,但问题仍然存在。
缩放顶点数据 - 一个顶点的X Y Z位置的值范围为: -65536到+65536的浮点数
- 我意识到这很大,所以我尝试将顶点位置除以1024来缩小几何体,希望能够获得更精确的浮点精度,但这并没有解决或减少纹理失真问题
缩放模型视图或缩放投影矩阵都没有帮助
更改纹理过滤选项也没有帮助
- 禁用mipmapping,或使用GL_NEAREST/GL_LINEAR都没有效果
- 启用/禁用各向异性也没有效果
- 即使使用GL_CLAMP,条纹效应仍会发生
将传递给顶点着色器的纹理坐标除以某个值,然后在片段着色器中将它们乘回正确的值,也不起作用
高精度采样器sampler2D、高精度浮点数和高精度整数 - 在片段或顶点着色器中都没有改变任何东西(lowp/mediump也不起作用)
我想这个问题在某个时候一定被解决了 - 见过基于OpenGL ES 2.0的游戏能够呈现大规模、高度详细的几何体