4

这与另一个问题(那里的图像)中描述的问题有关:

Opengl 着色器问题 - 奇怪的光反射伪影

我有一个 .obj 导入器,它创建一个数据结构并计算切线和双切线。这是我的对象中第一个三角形的数据:

数据结构

我对切线空间的理解是法线从顶点向外指向,切线与法线向量垂直(正交?)并指向纹理中正S的方向,而双切线与两者垂直。我不确定你怎么称呼它,但我认为这 3 个向量形成了看起来像旋转或变换的 x、y、z 轴。它们不会是 3 个随机定向的向量,对吧?

还有我的理解:法线贴图中的法线提供了一个新的法线向量。但是在切线空间纹理贴图中,在 rgb 编码法线和每个顶点法线之间没有内置的方向。因此,您使用 TBN 矩阵来弥合差距并将它们放在同一个空间中(或在正确的空间中获得照明)。

但后来我看到了对象数据……我的结构有 270 个顶点,所有顶点的切线 Y 均为 0。切线数据是否正确?这些切线是像顶点法线空间还是什么?或者他们只是看起来完全错误?还是我对它的工作原理和我的数据是否正确感到困惑?

为了更接近解决我在另一个问题中的问题,我需要确保我的数据是正确的以及我对切线空间照明数学如何工作的理解。

4

1 回答 1

9

切线和双切线向量指向纹理坐标的 S 和 T 分量的方向(U 和 V 用于不习惯 OpenGL 术语的人)。所以切线向量沿 S 点,双切线点沿 T。

所以是的,这些不必法线或彼此正交。它们遵循纹理映射的方向。事实上,这就是它们的目的:允许您将法线从模型空间转换到纹理空间。它们定义了从模型空间到纹理空间的映射。

仅当该顶点处的 S 和 T 分量正交时,切线和双切线才会相互正交。也就是说,如果纹理映射没有剪切。虽然大多数纹理映射算法会尽量减少剪切,但它们无法消除它。所以如果你想要一个精确的矩阵,你需要一个非正交切线和双切线。

于 2013-03-15T13:59:24.997 回答