计算机图形:法向量变换
法向量变换推导
计算机图形:mvp变换(模型、视图、投影变换)描述了对物体的几何图形进行模型、视图、投影变换. 实际应用中,同时需对法向量变换. 切线的变换与图形的几何变换相同,但法向量变换却不同.
法向量变换原则:变换前后,始终与物体表面(切线)垂直.
设物体表面某一点法向量\(\bm{n}\),切向量\(\bm{t}\). 该点经变换M后得到\(\bm{n'}, \bm{t'}\). 有
\[t'=Mt
\]
∵\(\bm{n}⊥\bm{t}\)
∴写成矩阵形式:
\[\tag{1}
\begin{aligned}
n^Tt&=0\\
\implies n^TIt&=n^TM^{-1}Mt=(n^TM^{-1})(Mt)=0
\end{aligned}
\]
设法向量变换矩阵S,则\(n'=Sn\).
\[\tag{2}
\begin{aligned}
&∵\bm{n'}⊥\bm{t'},t'=Mt\\
&∴(n')^Tt'=0\\
&∴(n')^Tt'=(Sn)^T(Mt)=n^TS^T(Mt)=0
\end{aligned}
\]
要使(2)恒成立,可取\(S^T=M^{-1}\),即\(S=(M^{-1})^T\)
当然,\(S=(M^{-1})^T\)并不是(2)的唯一解,e.g. \(S=λ(M^{-1})^T,λ\in R\)也是解.
但在图形学中,通常只关心法向量的方向,而不关心其大小.
∴法向量变换:
\[\tag{3}
\begin{aligned}
\bm{n'} &= S\bm{n}\\
&= (M_{mv}^{-1})^T\bm{n}
\end{aligned}
\]
法向量变换的应用
何时进行法向量变换
下图是物体由原始坐标变换到屏幕空间过程示意:
由于法向量主要应用于光照计算,而投影变换会改变法向量大小、方向,所以我们需要在视图空间(/相机空间)中完成光照计算. i.e. 模型变换、相机变换时,需要对法向量进行变换,而投影变换、视口变换则不需要.
Phong明暗处理与法向量变换
Phong明暗处理(见计算机图形:明暗处理)中,我们用双线性插值求法向量,即用三角形顶点的法向量,对三角形内部的点(投影变换、规范化、视口变换后与扫描线相交)的法向量进行线性插值,并没有在屏幕空间利用顶点求法向量,因此不会改变视图空间中得到的法向量方向.
参考
[1] Shirley P .Fundamentals of Computer Graphics[M]. 2015.
[2] OpenGL Normal Vector Transformation
[4] 法向量变换