2011-01-20 184 views
2

我正在使用三角形条创建四边形。问题是当我尝试使用矩形纹理来绘制它时,我想要在形状上均匀插值。四边形上的OpenGL ES 1.1中的纹理变形问题由三角形条形成

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

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

    Ok   Ok   Not Ok 

我想这将是相当简单的解决这个与ES 2.0自定义着色,但如何实现它在ES 1.1吗?

+0

那么你是如何解决它的? – Trainee4Life 2012-04-22 16:15:10

回答

2

说穿了,硬件只能做纹理坐标的线性插值,如果你不提供透视/深度信息。

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

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

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

+0

太棒了!感谢您的参考。 – Nuoji 2011-01-24 13:54:27

2

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

短版:你插值的方式类似的GPU如何做到这一点的角度来看,正确的渲染穿过院子的UV(正如你可能已经注意到,并产生两个三角形之间的可见接缝) 。为此,需要为四边形的每个顶点计算一个错误的“深度”值,并根据此“深度”使用齐次坐标进行插值。全部细节在上面链接的文章中。

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

+0

FWIW,我更新了我的答案中的断开链接。 – rotoglup 2012-05-26 10:27:53