2012-05-31 66 views
3

我有一个GL_QUAD_STRIP,我是纹理映射。四边形条带折回自身形成一个紫外球体。实质上,四边形条通常不是由矩形构成的,而是梯形。四带纹理变形

我得到纹理失真的问题。纹理坐标是正确的(例如,它们在他们应该的地方很好地排列)。问题在于梯形面上。

我期望texels朝着一个梯形面的较大的一端来扩大面积,然而这个面似乎分成两个三角形。它看起来类似于仿射纹理映射(但我不认为它是这样;它仍然看起来透视正确,我不希望它被使用)。

我知道图形卡通常会在内部将四边形降低为三角形,但我不希望这会影响纹理。 。 。

所以,我不知道这里发生了什么。有什么想法吗?

下面是一个不良行为的例子。低分辨率的全球纹理,最近的过滤,没有mipmap或各向异性: enter image description here

回答

4

这是纹理化简单四边形时的一个经典问题。这是由于事实(像你猜对的那样),这个四边形被分解成单独的三角形。这些三角形又是独立的纹理。

问题是,三角形内部的纹理坐标是从顶点线性内插的(虽然透视图是正确的,但这在这里没有帮助)。您可以将其作为光栅化器不知道此梯形的第四个顶点的图像,它只能看到各个三角形。因此它假定三角形变换成纹理空间以完全仿射,并且因此三角形成为平行四边形的一部分。

解决此问题的方法是通过使用完整的4维纹理坐标而不是简单的2D texcoords来解决简单的2D仿射纹理空间转换为投影纹理空间,如解释here。基本上,GL已经完成了透视正确插值的工作,但是使用自己的透视投影作为纹理坐标(除了已经为顶点位置完成的透视投影之外)。

+0

正是我所需要的;谢谢! – imallett

-1

每个部分呈现正面呈现(以便完全正方形)时是否正确?

您可能呈现前尝试使用以下命令:

​​

GL_PERSPECTIVE_CORRECTION_HINT表示颜色的质量,质地 协调和雾坐标插补。如果透视校正 参数插值没有得到GL 实现的有效支持,则暗示GL_DONT_CARE或GL_FASTEST可导致 颜色和/或纹理坐标的简单线性插值。

+0

他并不是在说透视正确的纹理。当他有一个由于透视失真而被画成梯形的正方形时,这将适用。但他首先有一个梯形,在这种情况下,透视正确的纹理不会有任何帮助。 –

+0

是的。另外,FWIW,我已经在使用这个。虽然谢谢! – imallett