(1)什么是法向量
我们在第一篇的时候简单地提到了什么是法向量。一个表面P点的法向量是一个垂直该P点平面的向量。我们进入到几何基础之后会学习到更多的关于法向量的计算。现在假设我们知道tangent T和bi-tangent B,那么我们可以用下面的公司进行计算P点的法向量。
N = T x B
记住我们所说的叉乘操作,它是反结合率的,也就是说交换两个参数的位置会得到相反的结果。换句话说T x B = N 和B x T = -N。实际上,它意味着我们计算法向量的时候要小心,让它可以指向平面向外(当我们讲到阴影的时候会详细介绍)。
(2)法向量的变换
你可能会问为什么不直接将法向量当做向量来看待。为什么我们需要花费许多时间区别对待它。在之前的章节中,我们已经学习了使用矩阵乘法来进行点和向量的变换。现在的问题是对于法向量,我们倾向于和点和向量一样的变换来对待它们。实际上,这个有时候是对的,比如,当想象进行对角的缩放时,也就是各轴的缩放称比例的。但是现在让我们考虑一种情况,对一个物体进行不正式的缩放,让我们通过点A = (0, 1, 0)和B = (1, 0, 0)画一条线段,如下图所示。
如果你画另外一条从原点到(1, 1, 0)的线段,那么你可以看到这条线垂直于我们的平面。让它变成我们的法向量(从技术上来说,我们应该将这个向量单位化,但是讲这个问题的时候单位化并不对结果有什么影响)。现在我们考虑使用一个非正式的缩放对这个平面。
这个矩阵使得x轴的坐标放大两倍,而其它轴的坐标不会改变。应用到我们的例子中,我们可以得到A' = A * M,它使得A' = (0, 1, 0)和B' = B * M,B点坐标为(2, 0, 0).相似地,如果我们计算法向量 N' = (2, 1, 0).现在我们画出经过变换的两条线。从上图中我们可以看到N'不再垂直于A'B'.实际上,法向量的变换,并不是简单地程序变换点和向量的使用的矩阵。而是乘以矩阵的倒置的转置。
在考虑数学证明之前,我们首先来解释为什么这个答案对这个场景有效。第一,我们知道法向量代表的是方向,因此和向量一样,它们不会因为平移而改变。换句话说,我们可以忽略掉第四列的坐标,和第四行的的坐标。仅仅只是考虑右上[3 x 3]的矩阵,我们知道它们是用来旋转和缩放的。我们也已经解释了一个正交矩阵的转置也是它的倒置。那个旋转的矩阵也是正交的。换句话说,如果Q是正交的矩阵,我们可以写成下面的样式:
正交矩阵Q的倒置后转置还是矩阵Q。换句话说,这没有改变任何东西。
矩阵这章没有翻译好,如果想要学习好的话可以直接看数学工具书,直接翻译感觉摸不着头脑。
只要记住上面那个求法向量的公式就可以了。目前来说。