OpenGL ES 2.0纹理在大量几何图形上出现变形 GL_REPEAT

7

OpenGL ES 2.0在纹理采样方面存在严重的精度问题 - 我看到过一些与这个类似的问题,但是我还没有看到一个真正解决这个“扭曲的OpenGL ES 2.0纹理”问题的方法。

这不是与纹理的图像格式或OpenGL颜色缓冲区相关的,似乎这是一个精度误差。我不知道具体是什么原因导致了精度失效 - 似乎不仅仅是几何大小引起了这种扭曲,因为简单地缩放传递给顶点着色器的顶点位置并不能解决这个问题。


以下是一些出现纹理扭曲的例子:

纹理问题仅限于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的游戏能够呈现大规模、高度详细的几何体

1个回答

1

这是常见的纹理图集问题。没有设置可以限制中间纹理的线性插值。这就是硬件的工作方式。

您可以通过在片段程序中使用最近过滤器纹理查找来解决此问题,该程序计算纹理查找模除您的纹理平铺大小和位置,并手动进行线性过滤。


我一直在试图解决一个类似于这个错误的问题,并偶然发现了这个问题...你的技巧对于解决这个问题也有效吗? https://dev59.com/meo6XIcBkEYKwwoYOR0q非常感谢任何帮助! - simonthumper

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接