從0開始的圖形學大師(5~未完)
從0開始的圖形學大師
標籤(空格分隔):圖形學
peter Shirley
<計算機圖形學>
第5章 線性代數
大學知識。
三維行列式為平行六面體體積,體積為零,共面,線性相關。
特徵向量不相等為正交。對稱矩陣特徵值是實數。
第6章 矩陣變換
##6.1 基本二維變換
- 縮放
- 切變
圓在這時候會變換成橢圓
對切變的另一種解釋是,相對垂直軸(水平軸)做旋轉。
- 旋轉(預設逆時針)
旋轉矩陣是正交矩陣
- 反射
- 二維變換組合與分解
組合沒啥好說的,就是矩陣相乘。
分解(旋轉-縮放-旋轉)就是奇異值分解
分解(多個切變)沒說,在光柵旋轉時很有用。
6.2 基本三維變換
###6.2.1 任意三維旋轉
如果想繞任意向量a進行旋轉,可以先構造一個正交基w=a,把這個正交基旋轉到標準基,然後繞z軸進行旋轉,然後再把標準基旋轉回uvw基。
###6.2.2 法向量變換
法向量經過與曲面上的點相同的M變換後,可能不再與變換後的表面垂直。
因此法向量的變換不同於平面的變換。
經過推導p103,我們知道法向量的變換
其實就是矩陣餘子式不轉置。(經常不轉置的我-,-)
##6.3 平移(視窗變換)
我們可以用高維的矩陣實現低維矩陣相同的變換
視窗變換可以用三次矩陣相乘
6.4 變換矩陣的逆
介紹了幾何方法求逆
6.5 座標變換
我們可以把點的變換變為座標系的變換
第7章 觀察
7.1 繪製標準視體
繪製2d標準視體進行的變換(為了適應畫素點而做的視窗變換),我們把畫素擴充套件成為一個1x1x1的立方體。
$$
\begin{bmatrix}
1&0&\frac{n_x-1}{2}\
0&1&\frac{n_y-1}{2}\
0&0&1
\end{bmatrix}
\begin{bmatrix}
\frac{n_x}{2}&0&0\
0&\frac{n_y}{2}&0\
0&0&1
\end{bmatrix}
\begin{bmatrix}
\frac{n_x}{2}&0&\frac{n_x-1}{2}\
0&\frac{n_y}{2}&\frac{n_y-1}{2}\
0&0&1
\end{bmatrix}
\begin{bmatrix}
\frac{n_x}{2}&0&0&\frac{n_x-1}{2}\
0&\frac{n_y}{2}&0&\frac{n_y-1}{2}\
0&0&1&0\
0&0&0&1
\end{bmatrix}
$$
7.2 正射投影
繪製3d標準視體進行的變換(相當於三維視窗變換)
$$
\begin{bmatrix}
\frac{2}{r-l}&0&0&0\
0&\frac{2}{t-b}&0&0\
0&0&\frac{2}{n-f}&0\
0&0&0&1
\end{bmatrix}
\begin{bmatrix}
1&0&0&-\frac{l+r}{2}\
0&1&0&-\frac{b+t}{2}\
0&0&1&-\frac{n+f}{2}\
0&0&0&1
\end{bmatrix}
\begin{bmatrix}
\frac{2}{r-l}&0&0&-\frac{l+r}{2}\
0&\frac{2}{t-b}&0&-\frac{b+t}{2}\
0&0&\frac{2}{n-f}&-\frac{n+f}{2}\
0&0&0&1
\end{bmatrix}
M_0 =
\begin{bmatrix}
\frac{D-d}{A-a}&0&0&\frac{dA-Da}{A-a}\
0&\frac{E-e}{B-b}&0&\frac{eB-Eb}{B-b}\
0&0&\frac{F-f}{C-c}&\frac{fC-Fc}{C-c}\
0&0&0&1
\end{bmatrix}
$$
compute M0
for each line segment(ai,bi) do
p = M0ai
q = M0bi
drawline(xp,yp,xq,yq)
7.3 透視投影
這時我們要用到之前的第4維座標,因為需要x,y中除z。實現的效果是把z=f上的點投影到與z=n一樣大小的平面,而z=n上的點不變。
我們給出結論,變換矩陣為:
我們光看矩陣不知道有啥特點。我們試驗一下效果。
$$
M_p
\begin{bmatrix}
x\y\z\1
\end{bmatrix}
\begin{bmatrix}
x\y\z\frac{n+f}{n}-f\\frac{z}{n}
\end{bmatrix}
\underrightarrow{齊次化}
\begin{bmatrix}
\frac{nx}{z}\ \frac{ny}{z}\n+f-\frac{fn}{z}\1
\end{bmatrix}
$$
我們把[x,y,z,1]換成[x,y,n,1],其次化結果還是[x,y,n,1],說明z=n上的點沒有受到影響;我們把[x,y,z,1]換成[x,y,f,1],其次化結果是[nx/f,ny/f,f,1],說明z=f上的點被縮放了n/f倍;我們自然可以得出n<z<f上的點會縮放n/z倍;
由於齊次化可以消去任意常數,所以
可以乘以n。
最終的