当渲染3D场景并将变换应用于对象时,必须使用模型视图矩阵的转置逆来变换法线。因此,对于法线,modelViewMatrix M,变换后的法线n '为
变换对象时,很明显需要对法线进行相应的变换。但是,为什么从数学上讲这是对应的转换矩阵呢?
当渲染3D场景并将变换应用于对象时,必须使用模型视图矩阵的转置逆来变换法线。因此,对于法线,modelViewMatrix M,变换后的法线n '为
变换对象时,很明显需要对法线进行相应的变换。但是,为什么从数学上讲这是对应的转换矩阵呢?
Answers:
这是需要逆转置的简单证明。假设我们有一个平面,由平面方程定义,其中Ñ是正常的。现在我想用一些矩阵M变换这个平面。换句话说,我想找到一个新的平面方程ñ ' ⋅ 中号X + d ' = 0是满足了完全相同的X满足前面的平面方程值。
为此,将两个平面方程式设置为相等就足够了。(这放弃了任意缩放平面方程的能力,但这对论点并不重要。)然后我们可以设置并将其减去。我们剩下的是:
我将使用矩阵表示法(将向量视为1列矩阵)表示的点积来重写此代码:
现在要满足所有 ,我们必须具有:
现在求解来讲ñ,
快点!如果点由矩阵M变换,则平面法线必须通过M的逆转置变换,以保留平面方程。
这基本上是点积的属性。为了在应用转换时使点积保持不变,必须对两个向量进行点缀,但必须以相应但不同的方式进行转换。
数学上,这可以通过说出法线矢量不是一个普通的向量来描述,但事情称为covector(又名协变矢量,双载体,或直链形式)。协矢量基本上定义为“可以用矢量点缀以产生不变标量的事物”。为了实现这一点,它必须使用在普通矢量上运行的任何矩阵的逆转置进行变换。这适用于任何数量的尺寸。
请注意,特别是在3D模式下,双向量类似于辅助向量。它们并不完全相同,因为它们具有不同的单位:协矢量的长度单位为倒数,而双矢量的长度单位为平方(面积),因此它们在缩放时的行为不同。但是,它们的定向方式确实相同,这对于法线很重要。我们通常不关心法线的大小(无论如何我们总是将其归一化为单位长度),因此我们通常不必担心双矢量和协矢量之间的差异。