对normal进行变换不能直接乘以变换矩阵,必须乘以inverse transpose matrix
给定一个顶点的Normal n,以及过该点的切平面上的一个向量u,且有变换矩阵T。u,n是行向量,T是行矩阵,可知满足如下条件[1]
对于DX,由于使用行矩阵作为变换矩阵,所以直接乘以inverse transpose matrix就可以。对于OpenGL,由于使用列矩阵,所以我们还需要做一下转置。
假设U是列矩阵,且满足
,于是有
所以对于OpenGL,其实需要计算transpose inverse matrix,但是我们注意到,对于可逆矩阵A有,
所以综合上面两个结论,我们可知,对于OpenGL,最后还是可以使用inverse transpose matrix来计算变换后的normal。
Reference:
[1] Geometric Tools for Computer Graphics