我一直在尝试使用OpenGL渲染一个GL_QUAD(梯形形状),并使用一个正方形纹理。我想尝试只使用OpenGL来完成这个任务。目前纹理被严重扭曲,非常恼人。
通常情况下,我会加载纹理计算单应性,但这意味着很多工作和额外的线性编程库/直接线性变换函数。我认为OpenGL可以简化这个过程。
我在网上搜索了“透视校正纹理,Q坐标和GLSL”和“OpenGL中的倾斜/剪切纹理映射”。
所有这些都似乎假定您将执行某种类型的单应性计算或使用我不知道的OpenGL部分...有什么建议吗?
更新:
我一直在阅读“使用图像空间简化和变形导航静态环境”[PDF] - 附录A第9页。
似乎他们通过将模型的世界空间z分量与(s,t,r,q)纹理坐标的顶点相乘来禁用透视校正。
因此,对于一个呈梯形形状的四边形的给定纹理坐标(s,r,t,q),其中4个分量为:
这很容易,就像 glTexCoord4f(svert.z, rvert.z, t, q*vert.z) 一样简单?或者我漏掉了什么步骤?比如搞乱了 GL_TEXTURE glMatrixMode?
更新 #2:
这解决了问题!记住这个方法,这个问题在网络上到处都是,没有简单的答案。大多数涉及使用原始形状和变换形状之间的单应性重新计算纹理...即大量线性代数和外部 BLAS 库依赖。
通常情况下,我会加载纹理计算单应性,但这意味着很多工作和额外的线性编程库/直接线性变换函数。我认为OpenGL可以简化这个过程。
我在网上搜索了“透视校正纹理,Q坐标和GLSL”和“OpenGL中的倾斜/剪切纹理映射”。
所有这些都似乎假定您将执行某种类型的单应性计算或使用我不知道的OpenGL部分...有什么建议吗?
更新:
我一直在阅读“使用图像空间简化和变形导航静态环境”[PDF] - 附录A第9页。
似乎他们通过将模型的世界空间z分量与(s,t,r,q)纹理坐标的顶点相乘来禁用透视校正。
因此,对于一个呈梯形形状的四边形的给定纹理坐标(s,r,t,q),其中4个分量为:
(0.0f, 0.0f, 0.0f, 1.0f),
(0.0f, 1.0f, 0.0f, 1.0f),
(1.0f, 1.0f, 0.0f, 1.0f),
(1.0f, 0.0f, 0.0f, 1.0f)
这很容易,就像 glTexCoord4f(svert.z, rvert.z, t, q*vert.z) 一样简单?或者我漏掉了什么步骤?比如搞乱了 GL_TEXTURE glMatrixMode?
更新 #2:
这解决了问题!记住这个方法,这个问题在网络上到处都是,没有简单的答案。大多数涉及使用原始形状和变换形状之间的单应性重新计算纹理...即大量线性代数和外部 BLAS 库依赖。