我正在使用三角形条创建四边形。问题是当我尝试使用矩形纹理绘制它时,我希望在形状上均匀插值。
只要形状是矩形或矩形的仿射变换,我就会有两个相同的三角形来构建形状,一切顺利。但是对于任意形状,三角形具有不同的形状,并且沿着三角形的共同边缘自然发生变形。
_____ ______ _____
| | / / \ /
|_____| /_____/ \_/
Ok Ok Not Ok
我想在ES 2.0中使用自定义着色器来解决这个问题会相当简单,但我如何在ES 1.1中实现呢?
答案 0 :(得分:2)
直言不讳地说,如果你没有为它提供透视/深度信息,硬件只能进行纹理坐标的线性插值。
线性插值不允许正确处理导致问题的情况。
要在边缘进行适当的插值,必须在四边形中引入透视信息。
您应该在此NVidia白皮书中找到更多信息:Projective Texture Mapping。
答案 1 :(得分:2)
将正方形/矩形纹理映射到任意四边形的一种方法是投影插值。我写了an article来说明如何做到这一点。这侧重于设置插值的数学运算,而在rotoglup的答案中链接的“投影纹理映射”论文则侧重于配置API以进行插值。
简短版本:您在四边形中插入UV,其方式类似于GPU如何进行透视正确渲染(正如您可能已经注意到的那样,不之间会产生可见的缝隙两个三角形)。为此,您需要为四边形的每个顶点计算一个错误的“深度”值,并使用基于此“深度”的齐次坐标进行插值。完整的详细信息在上面链接的文章中。
我不确定在OpenGL ES 1.1中是什么和不可能,但如果它通过提供3维或4维UV值来支持投影纹理,那么这应该是适用的。