四维纹理在OpenGL上伸展

时间:2014-11-29 17:18:10

标签: opengl opengl-es textures texture-mapping

因此,当在OpenGL上绘制一个矩形时,如果给出矩形纹理坐标为(0,0),(1,0),(1,1)和(0,1)的角,那么你就可以了。我会得到标准的矩形。

但是,如果你把它变成不是矩形的东西,你会得到一种奇怪的拉伸效果。如下所示:

the weird stretching

我从下面this page看到这可以修复,但给出的解决方案仅适用于梯形值。此外,我必须通过许多矩形来做这件事。

所以,问题是,什么是正确的方法,以及最有效的方法来获得正确的" 4D"绘制拉伸四边形的纹理坐标?

1 个答案:

答案 0 :(得分:0)

允许实现将四边形分解为两个三角形,如果将其可视化为两个三角形,您可以立即看到它为什么以它的方式插入纹理坐标。纹理映射是正确的...... 用于两个独立的三角形。

该对角线缝与两个独立插值三角形的边缘重合。

投影纹理可以帮助您已经知道,但最终这里的真正问题是简单地插入两个三角形而不是单个四边形。您会发现修改Q坐标可能帮助将纹理映射到四边形上,插入其他属性(如颜色)仍会存在严重问题。

如果您可以访问片段着色器和实例化顶点数组(可能排除了OpenGL ES),则可以完全实现四边形顶点属性插值here(您可以修改着色器以在没有“实例化数组”的情况下工作,但它需要在顶点数组或几何着色器中使用4倍的数据)


顺便说一下,OpenGL中的纹理坐标总是“4D”。如果您使用glTexCoord2f (s, t)之类的内容,r已分配 0.0 q已分配 1.0 ,则会发生这种情况。该行为适用于所有顶点属性;无论是否明确定义所有4个坐标,顶点属性都是4D。