附录E:逆转置矩阵
一般使用两种变换矩阵对法向量进行变换
- 模型视图矩阵的 逆转置矩阵
- 模型矩阵
具体使用哪种要视物体变换的类型而定。
变换与法向量
平移
变换问题
平移的物体实际上法向量不会改变,
但是如果模型视图矩阵中包含平移矩阵的话,
原法向量会被当做点平移
解决方法
既然4维模型视图矩阵中与平移相关的只有 第4行 和 第4列,
剩下的 3x3子矩阵 都是与旋转和缩放有关的,
那就只取其左上角的 3x3子矩阵 对法向量进行变化就好了
旋转
较为简单的旋转变换
简单理由1
如果只进行旋转变换,
则直接对法向量使用相同的旋转矩阵就能直接实现法向量变换。
即旋转时时:
顶点变换矩阵 = 法向量变换矩阵
简单理由2
旋转后无需进行 归一化处理
缩放
情况1:缩放因子相同
那么法向量自然不变:
- 顶点缩放矩阵 = 法向量变换矩阵
- 需要进行 归一化处理
情况2:缩放因子不同
- 这种情况必须使用 模型矩阵的逆转置矩阵
- 变换后法向量必须进行 归一化处理
逆转置矩阵的数学推理
假设
- 物体顶点矢量为 s
- 垂直于 s 的法向量为 n
- 对 s 进行变换的模型矩阵为 M
- 对 n 进行变换的矩阵为 M‘
- 变换后的物体顶点矢量为 s’
- 变换后的法向量为 n’
已知条件
由于 n 与 s 垂直, n’ 与 s’ 垂直
所以有:
n · s = 0
n’· s‘= 0
s’ = M × s
n’ = M’ × n
开始推导
∵ n’· s’ = 0
∴ (M’ × n)·(M × s) = 0
∵ A · B = AT × BT
∴ (M’ × n)T ×(M × s)T = 0
∵ (A × B)T = BT × AT
∴ nT × M‘T × MT × sT = 0
∵ nT × sT = n · s = 0
∴ 要满足等式,必须有 M’T × MT = I
∴ M’ = (M^-1)T
总结: 法向量的变换矩阵即是模型矩阵的逆转置矩阵