尋找如何做出 Shadow matrix 的過程中,發現 HOTBALL'S HIVE 介紹得很好。但是
有些推導過程,中間的步驟很簡明,對於新手的我來說,還是得拿紙筆來演練,
才能順利接上,在此作個筆記。為了一致性,這裡的圖與符號標示,也是沿用該網頁。
目的:給定光源,在已知平面上 (以 normal vector \( \vec P \) 表示)找出平面以外某一點 \( \vec V \),
在平面上的投影點,然後導出其 Matrix Operation。
如圖,沿著射線,存在ㄧ k 值,使得 \( \vec V \) + k\( \vec L \) 為平面上的交點:
\[
(\vec V + k \vec L) \cdot \vec P = 0
\]
\[
k = -\frac{\vec V \cdot \vec P}{\vec L \cdot \vec P}
\]
所以投影點為:
\[
\begin{align}
\vec V + k \vec L &= \vec V - \frac{\vec V \cdot \vec P}{\vec L \cdot \vec P} \vec L \cr
&= \frac{\vec V (\vec L \cdot \vec P) - (\vec V \cdot \vec P) \vec L}{\vec L \cdot \vec P} &(\ddagger)
\end{align}
\]
令
\[
\begin{align}
\vec L &= \langle L_x,L_y,L_z,0 \rangle \cr
\vec V &= \langle V_x,V_y,V_z,1 \rangle \cr
\vec P &= \langle a,b,c,d \rangle
\end{align}
\]
對於 homogeneous coordinate \( \langle x,y,z,w \rangle \) 而言,w 是分母之意,
亦即對應的 3D coordinate 為 \( \langle x/w, y/w, z/w \rangle \),
也就是 \( \vec L \cdot \vec P \) 在 homogeneous coordinate 表示下恰為 \( w \) 之值。
展開 \((\ddagger)\) 式子的分子為:
\[
\langle V_x,V_y,V_z,1 \rangle (aL_x + bL_y + cL_z) - (aV_x + bV_y + cV_z + d) \langle L_x,L_y,L_z,0 \rangle
\]
其中 \(x\) 分量為:
\[
V_x(bL_y + cL_z) - V_y(bL_x) - V_z(cL_x) - dL_x
\]
同法可得 \(y,z\) 分量,整理得到 shadow matrix:
\[
\begin{bmatrix}
bL_y + cL_z & -bL_x & -cL_x & -dL_x \cr
-aL_y & aL_x + cL_z & -cL_y & -dL_y \cr
-aL_z & -bL_z & aL_x + bL_y & -dL_z \cr
0 & 0 & 0 & aL_x + bL_y + cL_z
\end{bmatrix}
\]
內心獨白: \(\LaTeX\) 打了會上癮!
沒有留言:
張貼留言