四边形带纹理扭曲

4
我有一个GL_QUAD_STRIP,我正在进行纹理映射。这个四边形带通过折叠自己来形成一个UV球体。基本上,这个四边形带通常不是由矩形组成的——而是梯形。
我遇到了纹理扭曲的问题。纹理坐标是正确的(例如,它们在应该对齐的地方很好地排列)。问题在于梯形面本身上。
我期望梯形面较大端的纹素占据更大的区域,但这个面似乎被分成了两个三角形。它看起来类似于仿射纹理映射(但我认为它不是;它仍然似乎是透视校正的,而且我也不认为会使用)。
我知道通常情况下,图形卡将四边形内部缩减为三角形,但我不认为这会影响到纹理映射。。。
所以,我不知道发生了什么。有什么想法吗?
以下是所述意外行为的示例。低分辨率地球纹理,最近邻过滤,没有mipmaps或各向异性: enter image description here
2个回答

5

当对一个简单的四边形进行纹理处理时,这是一个经典问题。这是因为(正如您猜测的那样),四边形被分解成单独的三角形。这些三角形又被独立地进行纹理处理。

问题在于,三角形内部的纹理坐标是从顶点线性插值得出的(虽然透视校正不起作用,但这并不有助于解决问题)。您可以将其想象为光栅化器不知道这个梯形的第四个顶点,它只看到单独的三角形。因此,它假设将三角形转换为纹理空间是完全仿射的,并且三角形是平行四边形的一部分。

要解决这个问题,您需要从简单的二维仿射纹理空间转移到投影纹理空间,通过使用完整的四维纹理坐标而不是简单的二维纹理坐标来实现,就像这里所解释的那样。您基本上正在执行GL已经使用透视校正插值完成的操作,但是使用自己的透视投影来进行纹理坐标的投影(除了已经对顶点位置进行的透视投影之外)。


-1
每个部分在正面呈现时(完全正方形)是否正确呈现?
在渲染之前,您可以尝试以下命令:
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
GL_PERSPECTIVE_CORRECTION_HINT 表示颜色、纹理坐标和雾坐标插值的质量。如果 GL 实现不支持透视校正参数插值,则提示 GL_DONT_CARE 或 GL_FASTEST 可以导致颜色和/或纹理坐标的简单线性插值。

他并没有谈论透视纠正纹理。这种情况适用于由于透视畸变而绘制为梯形的正方形。但是他一开始就有一个梯形,这种情况下透视纠正纹理无济于事。 - Christian Rau

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