3

我有一个 GL_QUAD_STRIP 我是纹理映射。四边形条本身折叠起来形成一个紫外线球体。本质上,四边形通常不是由矩形制成的,而是梯形。

我遇到了纹理失真问题。纹理坐标是正确的(例如,它们在应有的位置很好地排列)。问题在于梯形面本身。

我希望梯形脸较大端的纹素对着更大的区域,但脸似乎分成两个三角形。它看起来类似于仿射纹理映射(但我不认为它是;它看起来仍然是正确的,而且我不希望它会被使用)。

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

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

以下是不良行为的示例。低分辨率地球纹理,最近过滤,无 mipmap 或各向异性: 在此处输入图像描述

4

2 回答 2

4

这是对简单四边形进行纹理处理时的经典问题。这是因为(就像你猜对的那样)四边形被分解成单独的三角形。这些三角形又是独立纹理的。

问题是,三角形内的纹理坐标是从顶点线性插值的(虽然透视正确,但这在这里没有帮助)。你可以把它想象成不知道这个梯形的第四个顶点的光栅化器,它只看到单独的三角形。因此它假设三角形到纹理空间的变换是完全仿射的,因此三角形是平行四边形的一部分。

要解决这个问题,您需要做的是通过使用完整的 4 维纹理坐标而不是简单的 2D texcoords,从简单的 2D 仿射纹理空间转移到投影纹理空间,就像在此处解释的那样。你基本上做了 GL 已经用透视正确插值做的事情,但是使用你自己的透视投影作为纹理坐标(除了已经为顶点位置完成的透视投影)。

于 2012-05-31T14:25:58.313 回答
-1

每个部分在正面渲染时是否正确渲染(以完全正方形)?

您可以在渲染之前尝试以下命令:

glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

GL_PERSPECTIVE_CORRECTION_HINT表示颜色、纹理坐标和雾坐标插值的质量。如果 GL 实现不能有效地支持透视校正参数插值,则提示 GL_DONT_CARE 或 GL_FASTEST 可以导致颜色和/或纹理坐标的简单线性插值。

于 2012-05-31T13:05:10.860 回答