四边形OpenGL ES 1.1中的纹理变形问题是由三angular形带组成的

我正在使用三angular形条创build一个四边形。 问题是,当我尝试使用矩形纹理来绘制它时,我想要在形状上均匀插值。

只要形状是一个矩形或矩形的仿射变换,我就会有两个相同的三angular形来构build形状,一切都很顺利。 但是随意的形状,三angular形有不同的形状,三angular形的公共边缘自然会出现变形。

_____ ______ _____ | | / / \ / |_____| /_____/ \_/ Ok Ok Not Ok 

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

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

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

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

您应该在这张NVidia白皮书中find更多信息: 投影纹理贴图 。

将方形/矩形纹理映射到任意四边形的一种方法是投影插值。 我写了一篇文章展示了如何做到这一点。 这着重于设置插值的math,而在rotoglup的答案中链接的“投影纹理映射”论文着重configurationAPI进行插值。

简短的版本:你可以在四边形上插入UV,类似于GPU如何进行透视正确渲染(正如你可能注意到的,它不会在两个三angular形之间产生明显的接缝)。 为此,需要为四边形的每个顶点计算一个假的“深度”值,并根据这个“深度”使用齐次坐标进行插值。 完整的细节在上面链接的文章。

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