1

    我正在使用 OpenMesh 来处理三角形网格。
    我已经完成了网格参数化来设置顶点 texcoord,我对顶点 texcoord 的全部理解就是从那里得到的。如果我没有弄错,它应该是顶点的可变值。
    但现在我想计算每个顶点的切线空间,所有教程都在谈论“顶点 texcoord”,就像它是顶点的固定属性一样。
    这是我读过的一个教程,上面写着

如果我们正在处理的网格没有 texcoord,我们将跳过 Tangent Space 阶段,因为无法在代码中创建任意 UV 贴图,UV 贴图是设计相关的,并且会随着纹理的制作方式而改变。

    那么,计算切线空间时“texcoord”应该具有什么属性
    谢谢!

4

1 回答 1

1

目前还不清楚你到底在问什么,所以希望这能帮助你理解。

每个顶点的纹理坐标 (texcoord) 在模型设计阶段设置并与网格一起加载。它们包含顶点在纹理中映射到的 UV 坐标。

切线空间由每个点的切线、双切线和法线 (TBN) 向量组成。法线要么与网格一起加载,要么可以通过平均在顶点处相遇的三角形的法线来计算。正切是texcoord的U坐标变化最大的方向,即模型空间位置对U的偏导。同理,双切线是位置对V的偏导。切线和双切线可以一起计算每个面的法线,然后在顶点处平均,就像法线一样。

对于平面,切线和双切线通过构造垂直于法线。然而,由于顶点的平均,它们可能不再垂直。即使对于平面,切线也可能不垂直于双切线(例如,想象一个倾斜的棋盘纹理映射)。但是,为了简化 TBN 矩阵的求逆,有时会用正交矩阵,甚至四元数来近似。即使这种近似对倾斜映射纹理无效,它仍然可能给出合理的结果。当假设正交性时,可以将双切线计算为切线和法线之间的叉积。

于 2016-09-01T14:30:11.120 回答