法线的变换的一些概念

在3D中,我们经常涉及到空间坐标系的变换,从模型坐标系到世界坐标系 世界坐标系到摄像机坐标系之类的转换。

1 _ViewPos = worldPos * ViewMatrix;

同样的我们也想到,模型的上的法线是否也可以(有些情况下是正确的)

_ViewNormal = worldNormal * ViewMatrix;

N是物体表面的法线,T是物体表面的切线,垂直于法线

如果在变换矩阵是含有缩放,比如Y轴放大的2倍。我们可以法线方向错误了。

明确一点 向量只含有 方向和强度信息 不包含位置。

如果在变换中,我们只能保证方向的一致性,不能保证位置一致性。那么我们法线该有什么矩阵变换呢。

我们假设,我们T和N垂直,如果正确变换的话,变换后T‘N’ 也应该垂直。 我们设定法线的变换矩阵G 切线的变换矩阵M

N' . T' = (GN) . (MT) = 0

我们把左边式变成 矩阵相乘

(GN).(MT) = (GN)^T * (MT)(单行矩阵 乘 单列矩阵)

根据矩阵的转置性质

(GN)^T  (MT) = N^TG^TMT

如果

G^TM = I

那么

N'.T' = N.T = 0

我们就可以得到

G^TM = I Longleftrightarrow G = (M^{-1})^T

矩阵性质里面有说道,如果矩阵是正交矩阵那么

M^{-1} = M^T Longrightarrow G = M

所以说有些情况下 可以直接相乘。

参考:http://www.lighthouse3d.com/tutorials/glsl-12-tutorial/the-normal-matrix/

原文地址:https://www.cnblogs.com/wbaoqing/p/5431402.html