欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

切线空间 (TBN) ---- 谈论图形中的矩阵运算

最编程 2024-04-24 14:58:29
...

    本文没有详细讲解切线空间的来源和推导过程,更无法详细讲解矩阵的意义和运算。所以肯定需要一些预备知识。


    先说说矩阵运算:列主矩阵中向量(或者点)乘在右侧。若是用正交的三个坐标轴来构成一个矩阵的旋转部分,姿态矩阵每个坐标轴对应一列,物体空间的变换矩阵则每一个坐标轴对应一行。对于矩阵运算的效果可以从一下几个方面理解:

    如果世界坐标系下一点施加一个物体姿态矩阵运算,该点还是在世界坐标系下,比如一个点沿x轴平移5个单位。也可以理解为物体坐标系下的同一个坐标的点从物体坐标系下变换到了世界坐标系下,此时乘以的是物体的姿态矩阵。当然对应姿态矩阵的逆矩阵就是变换到物体空间下的的矩阵(比如视图矩阵),其效果也就是姿态矩阵效果的你作用,即将世界坐标系下的点变换到物体坐标系下面。


    有了以上的理解我们来看看TBN的矩阵运算。我们研究一个矩阵的时候通常需要了解一个矩阵是从哪一个空间或者说矩阵而来的。如果搜索一下TBN矩阵运算公式可以发现其决定于物体坐标系下的顶点和纹理坐标系下的纹理坐标。想到这里我们需要明确TBN运算的输入和输出是什么。

    先说输入:输入是一张纹理的rgb,分别代表纹理坐标系下的xyz轴上的分量,而TBN是一一对应于xyz的。

    再说输出:输出是物体坐标系下的法线向量。

    然后我们很容易得出了结论,TBN是将一个点从纹理空间变换到物体空间的一个矩阵。这么解释对吗?纹理空间、切线空间、物体空间,如何通过个矩阵找到对应关系。TBN的坐标轴的坐标值是物体空间下的,所以TBN其实就是从切线空间到物体空间的对应关系。而根据公式已经将纹理空间的xyz和TBN建立了对应关系,那么即可通过rgb在TBN空间下找到一条向量。所以纹理坐标对TBN:有求解关系,无对应变换关系。这样即通过公式将纹理空间和切线空间合二为一,剩下的就好理解了。

    TBN构成一个姿态矩阵,即每一个坐标轴是对应矩阵的一列。就可将切线空间下的法线变换到物体空间下的法线。