Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone OpenGL ES 1.1中三角形条带四边形上的纹理变形问题_Iphone_Ios_Opengl Es_Textures - Fatal编程技术网

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方面,而我的文章更关注数学方面。