标签:旋转 坐标系 错误 导致 mat 证明 计算 strong 一个
以法向量和光源位置为基础的光强计算有以下两种方法
方法1:在世界坐标系中计算(即在模型经过model变换后进行光照的计算)
方法2:在相机坐标系中计算(即在模型经过model,view变换后计算)
因为模型为了从模型坐标系变换到世界坐标系可能会做平移、旋转、缩放等变换,而原本在模型坐标系中的法向量不会随着改变,从而会导致模型做model变换后,原本的法向量会不再垂直于模型表面,用这样的法向量结合光源位置计算出来的光照强度是错误的,所以为了保证正确性,对于模型上的每一个点对应的法向量单独的model变换,即使用法线矩阵对法向量做model变换,使得变换后的法向量仍然垂直于变换后的表面。
法线矩阵G:model矩阵的左上角3x3矩阵的逆的转置
口胡证明:
设模型的某一个表面上一点为P, P点处的法向量为N,切向量为T,进行model变换后(设变换矩阵为M),并对N单独用G变换,有T->T‘, N->N‘, 则满足\(T·N = T‘·N‘ = 0\)
\(T‘= MT,N‘=GN\)
则\(MT·GN = 0\)
则有\((MT)^TGN = 0\)
则\(T^TM^TGN = 0\)
因为\(T^TN = 0\), 所以就认为\(M^TG = E\)(这块是猜的), 所以有\(G = (M^T)^{-1} = (M^{-1})^T\)
设模型上一个点为P,现在要在view坐标系中求P的光照强度,那么就需要知道P处的法向量,现在已知模型坐标系中P处的法向量N,已及切向量T,而因为对模型进行了model和view变换,并且法向量还是原来的,就会出现法向量不垂直于原本的表面,错误,所以也需要对法向量做一个变换。
设变换后的切向量T’,法向量N‘,则有\(T·N = T‘·N‘ = 0\)
\(T‘= MVT,N‘=GN\)
则\(MVT·GN = 0\)
则有\((MVT)^TGN = 0\)
则\(T^TV^TM^TGN = 0\)
因为\(T^TN = 0\), 所以就认为\(V^TM^TG = E\)(这块也是猜的), 所以有\(G = (V^TM^T)^{-1} = ((MV)^{-1})^T\)
标签:旋转 坐标系 错误 导致 mat 证明 计算 strong 一个
原文地址:https://www.cnblogs.com/Setsuna-Ogiso/p/14401672.html