我一直在尝试用方形纹理渲染 GL_QUAD(形状为梯形)。我想尝试使用 OpenGL 来解决这个问题。现在纹理变得严重扭曲,真的很烦人。
通常,我会加载纹理计算单应性,但这意味着大量工作和额外的线性编程库/直接线性变换函数。我的印象是 OpenGL 可以为我简化这个过程。
我浏览了网络并看到了“透视校正纹理、Q 坐标和 GLSL”和“OpenGL 中的倾斜/剪切纹理映射”。
这些似乎都假设您将进行某种类型的单应性计算或使用我不知道的 OpenGL 的某些部分......有什么建议吗?
更新:
我一直在阅读“使用图像空间简化和变形导航静态环境” [ PDF ] - 第 9 页附录 A。
看起来他们通过将 (s,t,r,q) 纹理坐标与模型的世界空间 z 分量的顶点相乘来禁用透视校正。
所以对于一个给定的纹理坐标 (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 (s vert.z, r vert.z, t, q*vert.z) 一样简单吗?还是我错过了一些步骤?喜欢搞乱 GL_TEXTURE glMatrixMode?
更新#2:
那成功了!请记住,这个问题遍布网络,没有任何简单的答案。大多数涉及使用原始形状和转换后的形状之间的单应性直接重新计算纹理......也就是大量的线性代数和外部 BLAS lib 依赖项。