由三角形条带制成的四边形OpenGL ES 1.1中的纹理变形问题

时间:2011-01-20 15:20:31

标签: iphone ios opengl-es textures

我正在使用三角形条创建四边形。问题是当我尝试使用矩形纹理绘制它时,我希望在形状上均匀插值。

只要形状是矩形或矩形的仿射变换,我就会有两个相同的三角形来构建形状,一切顺利。但是对于任意形状,三角形具有不同的形状,并且沿着三角形的共同边缘自然发生变形。

   _____       ______       _____
  |     |     /     /       \   /
  |_____|    /_____/         \_/

    Ok         Ok           Not Ok

我想在ES 2.0中使用自定义着色器来解决这个问题会相当简单,但我如何在ES 1.1中实现呢?

2 个答案:

答案 0 :(得分:2)

直言不讳地说,如果你没有为它提供透视/深度信息,硬件只能进行纹理坐标的线性插值。

线性插值不允许正确处理导致问题的情况。

要在边缘进行适当的插值,必须在四边形中引入透视信息。

您应该在此NVidia白皮书中找到更多信息:Projective Texture Mapping

答案 1 :(得分:2)

将正方形/矩形纹理映射到任意四边形的一种方法是投影插值。我写了an article来说明如何做到这一点。这侧重于设置插值的数学运算,而在rotoglup的答案中链接的“投影纹理映射”论文则侧重于配置API以进行插值。

简短版本:您在四边形中插入UV,其方式类似于GPU如何进行透视正确渲染(正如您可能已经注意到的那样,之间会产生可见的缝隙两个三角形)。为此,您需要为四边形的每个顶点计算一个错误的“深度”值,并使用基于此“深度”的齐次坐标进行插值。完整的详细信息在上面链接的文章中。

我不确定在OpenGL ES 1.1中是什么和不可能,但如果它通过提供3维或4维UV值来支持投影纹理,那么这应该是适用的。