我想知道一个理论推理为什么这甚至可能:几何的转换如何与纹理映射相关。
GL_CLAMP_TO_EDGE
,GL_NEAREST
,片段着色器为highp
。 我尝试过的事情:
答案 0 :(得分:7)
按子像素数量移动将始终改变纹理采样。您使用最近采样会影响纹理的采样方式,但不会影响采样的坐标。该坐标是tex-coords,在多边形上插值和顶点的函数,它们决定了多边形如何光栅化以屏幕像素。
请记住,为了获得完美的纹理采样,在像素中心进行评估时,插值的tex-coords必须完全位于纹素中心上。
将多边形移动一小部分像素会改变纹理的采样位置,因为像素中心现在位于多边形内略微不同的点。
现在,通过最近的采样,生成的坐标将有效地舍入到最近的纹素,因此如果您的坐标离中心不远,那么它可能会起作用。然而,当你的坐标移动了大约半个纹素时,它们就位于两个纹素几乎等距的点上,那么它只需要在计算精度上的微小误差就可以单向推动一些像素,而另一些像素也是如此。
这是一张图。我选择显示一个三角形,用检查图案映射,但它同样适用于精灵或其他任何东西。
在图的顶部,我只是展示三角形如何映射到纹理。如果你在一个非常高分辨率的屏幕(或者非常大的尺寸)上渲染这个三角形,你可能会看到完全复制的检查模式。
但是,如果您以更接近的比例(例如1:1)进行映射,则采样非常重要。在图的底部,我展示了这种情况。
要注意的关键是屏幕像素中心的位置,因为它决定了绘制哪些像素,以及纹理的采样位置。在这种情况下,我已经显示多边形被精确地映射到正确的大小,但偏移了半个像素。这使得像素中心在相邻纹素之间准确对齐,并且采样将非常抽搐。