Iphone OpenGL ES 1.1中三角形条带四边形上的纹理变形问题
我正在使用三角形条创建一个四边形。问题是,当我尝试使用矩形纹理绘制它时,我希望在形状上均匀插值 只要形状是一个矩形或一个矩形的仿射变换,我就有两个相同的三角形来构建形状,一切都很顺利。但是对于任意形状,三角形具有不同的形状,并且沿着三角形的公共边自然发生变形Iphone OpenGL ES 1.1中三角形条带四边形上的纹理变形问题,iphone,ios,opengl-es,textures,Iphone,Ios,Opengl Es,Textures,我正在使用三角形条创建一个四边形。问题是,当我尝试使用矩形纹理绘制它时,我希望在形状上均匀插值 只要形状是一个矩形或一个矩形的仿射变换,我就有两个相同的三角形来构建形状,一切都很顺利。但是对于任意形状,三角形具有不同的形状,并且沿着三角形的公共边自然发生变形 _____ ______ _____ | | / / \ / |_____| /_____/ \_/ Ok Ok
_____ ______ _____
| | / / \ /
|_____| /_____/ \_/
Ok Ok Not Ok
我想在ES 2.0中使用自定义着色器解决这一问题相当简单,但在ES 1.1中如何实现呢?坦率地说,如果不提供透视/深度信息,硬件只能对纹理坐标进行线性插值 线性插值不允许正确处理导致问题的情况 要在边上进行适当的插值,必须在四边形中引入透视信息
您应该在NVidia白皮书中找到更多信息:。将方形/矩形纹理映射到任意四边形的一种方法是投影插值。我已经写了演示如何做这件事的文章。这主要关注于设置插值的数学,而rotoglup的答案中链接的“投影纹理映射”论文则关注于配置API来进行插值 简短的版本:以类似于GPU为透视正确渲染(正如您可能已经注意到的,这不会在两个三角形之间产生可见接缝)所做的方式在四边形上插值UV。为此,需要为四边形的每个顶点计算一个假“深度”值,并基于该“深度”使用齐次坐标进行插值。完整的细节在上面链接的文章中
我不确定OpenGL ES 1.1中什么是可能的,什么是不可能的,但如果它通过提供3维或4维UV值来支持投影纹理,那么这应该是适用的。太好了!谢谢你的推荐。那你是怎么解决的呢?@rotoglup太好了,谢谢。看起来那篇文章更关注API方面,而我的文章更关注数学方面。