我有一个GL_QUAD_STRIP,它是纹理贴图。四边形条会自身折回以形成UV球。本质上,四边形条通常不是由矩形组成,而是由梯形组成。
我遇到纹理变形问题。纹理坐标是正确的(例如,它们在应该放置的位置很好地对齐)。问题在于梯形的面孔本身。
我希望朝向梯形面较大端的texel会占据较大的面积,但是该面似乎分成两个三角形。它看起来类似于仿射纹理贴图(但我不认为这是正确的;它似乎仍然是正确的透视图,而且我也不希望被使用)。
我知道图形卡通常会在内部将四边形缩小为三角形,但是我不希望这会影响纹理。 。 。
所以,我不知道这是怎么回事。有什么想法吗?
这是不良行为的示例。低分辨率球体纹理,最近的滤波,无mipmap或各向异性:
最佳答案
在构造简单四边形时,这是一个经典问题。正是由于这样的事实(就像您猜对了一样),四边形被分解为单个三角形。这些三角形又是独立纹理的。
问题在于,三角形内部的纹理坐标是从顶点线性插值的(尽管透视图正确,但这在此无济于事)。您可以将其成像为栅格化器,而无需知道该梯形的第四个顶点,它只能看到各个三角形。因此,它假定三角形到纹理空间的变换是完全仿射的,因此三角形是平行四边形的一部分。
解决此问题的方法是,通过使用完整的4维纹理坐标而不是简单的2D texcoords(如here所述),从简单的2D仿射纹理空间移至投影纹理空间。基本上,您将执行GL已经使用透视校正内插进行的操作,但是将您自己的透视投影用于纹理坐标(除了已经对顶点位置进行的透视投影之外)。
关于opengl - 四边形纹理变形,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10832909/