码迷,mamicode.com
首页 > 其他好文 > 详细

光照计算

时间:2021-02-17 14:21:04      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:旋转   坐标系   错误   导致   mat   证明   计算   strong   一个   

以法向量和光源位置为基础的光强计算有以下两种方法

方法1:在世界坐标系中计算(即在模型经过model变换后进行光照的计算)

方法2:在相机坐标系中计算(即在模型经过model,view变换后计算)

方法1

因为模型为了从模型坐标系变换到世界坐标系可能会做平移、旋转、缩放等变换,而原本在模型坐标系中的法向量不会随着改变,从而会导致模型做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\)

方法2

设模型上一个点为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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!