【问题标题】:Quad Strip Texturing Distortion四条纹理变形
【发布时间】:2012-06-05 16:04:04
【问题描述】:

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

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

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

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

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

以下是不良行为的示例。低分辨率地球纹理,最近过滤,无 mipmap 或各向异性:

【问题讨论】:

    标签: opengl textures texture-mapping


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

      glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);
      

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

      【讨论】:

      • 他不是在谈论透视正确的纹理。当他有一个由于透视失真而被绘制成梯形的正方形时,这将适用。但是他首先有一个梯形,在这种情况下,透视正确的纹理没有任何帮助。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-10
      • 2015-01-28
      • 2019-04-23
      相关资源
      最近更新 更多