模型视图变换时,法线向量要乘模型视图矩阵的逆转置矩阵

模型视图变换时,法线向量要乘模型视图矩阵的逆转置矩阵

早前一直被这个问题困惑,但是自己推倒了很多遍也没推出来。
哎,在gameres上搜了3年前的谈话,后来在gamedev搜到了答案。
其实在计算机图形学中,只要是变换,无论平移,旋转,缩放,都是乘一个矩阵。
在模型视图变换时,顶点乘模型视图变换矩阵,而顶点对应的顶点法线向量(或其他的法线向量)则要乘模型视图矩阵的逆转置矩阵。
顶点和法线都是向量,他们的区别是什么?无非顶点是<x, y, z>表示缺省的<x, y, z, 1>,而法线向量是<x, y, z>表示缺省的<x, y, z, 0>。关于为什么是这样,不用我说了吧,2个顶点向量减下看看就知道了。
从这点来看,确实不同,或许就是这个不同,造成了变换的不同吧。
法线向量只能保证方向的一致性,而不能保证位置的一致性,所以,所有线向量必须以面的形式进行变换,如下:

Transforming Planes

If we have a plane vector n = [a, b, c, d] which describes a plane then for any point p = [x, y, z, 1] in that plane the follow equation holds:

nt p = ax + by + cz + d = 0

If for a point p on the plane, we apply an invertible transformation R to get the transformed point p1, then the plane vector n1 of the transformed plane is given by applying a corresponding transformation Q to the original plane vector n where Q is unknown.

p1 = R p 
n1
 = Q n 

We can solve for  Q by using the resulting plane equation: 

n1t p1 = 0 

Begin by substituting for  n1 and  p1

(Q n)t (R p) = 0 
nt Qt R p = 0 

If  Q t  R =  I then  n t  Q t  R p =  n t  I p =  n t  p = 0 which is given.

Qt R = 
Q
t = R-1 
Q = (R-1)t 

Substituting  Q back into our plane vector transformation equation we get: 

n1 = Q n = (R-1)t n


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值