我有一个GL_QUAD_STRIP,我是纹理贴图。四边形条带自身折叠以形成UV球体。基本上,四边形条通常不是由矩形构成的 - 而是由梯形构成。
我遇到纹理失真问题。纹理坐标是正确的(例如,它们排列得很好)。问题出在梯形面上。
我希望纹素朝向梯形面的较大一端对着更大的区域,但是面部看起来分成两个三角形。它看起来类似于仿射纹理映射(但我不认为它;它看起来仍然是正确的,我不希望它仍然被使用)。
我知道显卡通常会在内部将四边形减少为三角形,但我不希望这会影响纹理。 。
所以,我不知道这里发生了什么。有什么想法吗?
以下是不良行为的示例。低分辨率地球纹理,最近的过滤,没有mipmap或各向异性:
答案 0 :(得分:5)
在纹理化简单四边形时,这是一个经典问题。这是因为(正如你猜对了)将四边形划分为单个三角形。这些三角形又是独立纹理的。
问题是,三角形内部的纹理坐标是从顶点线性插值的(虽然透视正确,但这对此没有帮助)。您可以将其成像为不知道此梯形的第四个顶点的光栅化器,它只能看到各个三角形。因此,它假设三角形转换为纹理空间完全仿射,因此三角形是平行四边形的一部分。
解决这个问题的方法是通过使用完整的4维纹理坐标而不是简单的2D texcoords,从简单的2D仿射纹理空间转移到投影纹理空间,如解释here 。你基本上做了GL已经用透视正确插值做的事情,但是使用你自己的透视投影来表示纹理坐标(除了已经为顶点位置做的透视投影)。
答案 1 :(得分:-1)
每个部分在正面渲染时是否正确渲染(以便完全呈方形)?
您可以在渲染之前尝试以下命令:
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
GL_PERSPECTIVE_CORRECTION_HINT 表示颜色,纹理的质量 坐标和雾坐标插值。如果经过透视校正 GL无法有效支持参数插值 实现,提示GL_DONT_CARE或GL_FASTEST可以导致 简单的颜色和/或纹理坐标的线性插值。