3

我想知道为什么这甚至可能的理论推理:几何的平移与纹理映射有何关系。

  • 我只能在进行子像素平移时注意到这种效果,如果按整个像素平移,纹理看起来很好。
  • 我正在使用正交投影,,,GL_CLAMP_TO_EDGE片段GL_NEAREST着色器是highp
  • 纹理坐标是图集的一个子区域,但即使映射了整个图集,我也可以看到失真。
  • 使用 OpenGL ES(Android 和 iOS),但请在重新标记之前,任何人都可以解释这在 OpenGL 中不是问题。

我尝试过的事情:

4

1 回答 1

7

移动亚像素量总是会改变纹理采样。您使用最近的采样会影响纹理的采样方式,但不会影响它首先在哪个坐标上采样。该坐标是 tex 坐标(在多边形上插值)和顶点的函数,它决定了如何将多边形光栅化为屏幕像素。

请记住,为了获得完美的纹理采样,当在像素中心进行评估时,插值的 tex 坐标必须准确地位于 texel 中心。

将多边形移动一小部分像素会改变纹理的采样位置,因为像素中心现在位于多边形内略有不同的点。

现在,通过最近的采样,得到的坐标将有效地四舍五入到最近的纹素,所以如果你的坐标离中心不远,它可能会起作用。但是,当您的坐标移动了大约半个纹素时,它们正好位于两个纹素几乎等距的点上,那么计算精度上的微小误差就会以一种方式微移一些像素,而另一种微移一些像素。

这是一个图表。我选择显示一个三角形,用检查图案映射,但它同样适用于精灵或其他任何东西。

在图表的顶部,我只是展示了三角形是如何映射到纹理的。如果您在非常高分辨率的屏幕(或非常大的尺寸)上渲染此三角形,您会期望看到完全复制的检查模式。

但是,如果您以更接近的比例(例如 1:1)进行映射,则采样至关重要。在图表的底部,我展示了这种情况。

要看的关键是屏幕像素中心的位置,因为这决定了绘制哪些像素,以及纹理采样的位置。在这种情况下,我展示了以正确大小映射的多边形,但偏移了半个像素。这将像素中心精确地对齐在相邻的纹素之间,并且采样会非常抽搐。

显示纹理采样的图表

于 2013-01-10T08:25:00.170 回答