OpenGL ES中的纹理采样精度问题

问题描述 投票:0回答:1

我在Android上的OpenGL ES中采样纹理时遇到问题。我正在采样的对象是一个地形图块,并且基于每个顶点的x-z位置生成纹理坐标。对于典型的图块,纹理坐标的范围是-5至5(这意味着我的纹理应在地形图块上重复10次)。

[当我查看在Android上运行的着色器时,它朝着图块的中心看起来很好,但是朝着纹理坐标较大的边缘,我认为采样中存在精度问题:

Terrain texture precision problem

这正常吗?如果是这样,我应该将纹理坐标限制在什么范围以防止发生这种情况? 0比1?我只是将原始纹理坐标(-5到5)直接作为float2发送到着色器中。纹理为512x512。

还要注意,我不是在着色器中手动设置精度;它们是根据HLSL代码自动生成的。我正在使用MonoGame来做到这一点。

android opengl-es textures precision
1个回答
0
投票

将其夹紧在[0; 1]范围可能有问题,程序内容更容易瞄准[0; 2)范围。

在任何情况下,纹理坐标的值都不应在某个确切范围内,[-5; 5]也应正常工作。重要的是尺寸关系,纹理的0和1坐标在屏幕空间中的距离。如果您拉伸纹理以覆盖屏幕上的几个虚拟“公里”,则确实会存在精度方面的困难。屏幕上的单个多边形在纹理空间内的跨度非常短,需要更多的位来插值纹理坐标。

从减少整个世界的纹理开始。

© www.soinside.com 2019 - 2024. All rights reserved.