圖形學學習筆記二:觀測變換

weixin_42479032發表於2020-12-22


一、旋轉

三維空間中繞座標軸旋轉

R x ( α ) = ( 1 0 0 0 0 cos ⁡ α − sin ⁡ α 0 0 sin ⁡ α cos ⁡ α 0 0 0 0 1 ) R y ( α ) = ( cos ⁡ α 0 sin ⁡ α 0 0 1 0 0 − sin ⁡ α 0 cos ⁡ α 0 0 0 0 1 ) R z ( α ) = ( cos ⁡ α − sin ⁡ α 0 0 sin ⁡ α cos ⁡ α 0 0 0 0 1 0 0 0 0 1 ) \begin{array}{l}\mathbf{R}_{x}(\alpha)=\left(\begin{array}{cccc}1 & 0 & 0 & 0 \\0 & \cos \alpha & -\sin \alpha & 0 \\0 & \sin \alpha & \cos \alpha & 0 \\0 & 0 & 0 & 1\end{array}\right) \\\mathbf{R}_{y}(\alpha)=\left(\begin{array}{cccc}\cos \alpha & 0 & \sin \alpha & 0 \\0 & 1 & 0 & 0 \\-\sin \alpha & 0 & \cos \alpha & 0 \\0 & 0 & 0 & 1\end{array}\right) \\\mathbf{R}_{z}(\alpha)=\left(\begin{array}{cccc}\cos \alpha & -\sin \alpha & 0 & 0 \\\sin \alpha & \cos \alpha & 0 & 0 \\0 & 0 & 1 & 0 \\0 & 0 & 0 & 1\end{array}\right)\end{array} Rx(α)=10000cosαsinα00sinαcosα00001Ry(α)=cosα0sinα00100sinα0cosα00001Rz(α)=cosαsinα00sinαcosα0000100001

其中繞y軸旋轉比較特殊,可以通過向量叉乘去理解,x與y叉乘得到z,y與z叉乘得到x。這兩個都是符合叉乘,通過另外另外兩個軸右手逆時針旋轉得到。而y是z與x叉乘的結果,這兩個軸的右手旋轉方向和轉動方向相反,取負號。

三維空間中繞任意軸旋轉

對於任意一個旋轉 R x y z ( α , β , γ ) R_{xyz}(α,β,γ) Rxyz(α,β,γ),可以由 R_x(α) 、R_y(β) 和 R z ( γ ) R_z( \gamma) Rz(γ) 組成。其中,α 、β 和 γ 稱為尤拉角(Euler Angles)。通過下圖中的操作,可將飛機的頭朝向任意方向。
羅德里格斯公式(Rodrigues’ Rotation Formula)
在三維旋轉理論中,對於給定旋轉軸和旋轉角度,以Olinde Rodrigues命名的羅德里格斯公式是用於在空間旋轉向量的高效演算法。
旋轉軸為 n 軸,旋轉角為 α .預設旋轉軸過原點(若不過原點,可想將其移至原點,然後做線性變換後,在將其平移至原位置)。其中,羅德里格斯公式如下:

在這裡插入圖片描述

二、觀測變換(View/Camera Transformation)

在這裡插入圖片描述
上述三種變換即為MVP變換。
檢視變換View Transformation
    檢視變換是在擺一個照相機。如何才能確定一個相機的擺放

1 定義的三個要素

  • 位置
  • 觀測的方向
  • 向上方向(正立,倒立的像)
    在這裡插入圖片描述

2 進行檢視變換

約定:相機在原點,向上指向 Y,看向 Z 方向。
在這裡插入圖片描述

3 相機轉換步驟

將相機轉換到原點的標準方向
在這裡插入圖片描述
先將其平移至原點。
再求旋轉,先求得其逆變換再求逆,既可以得到變換矩陣(由於旋轉變換矩陣為正交矩陣,其逆就是其轉置)
在這裡插入圖片描述
總結在這裡插入圖片描述

投影變換(Rrojection Transformation)

在這裡插入圖片描述

1 投影變換的分類

在這裡插入圖片描述
其中,人眼成像類似於透視投影(右圖);正交投影(左圖)常用於工程製圖。

透視投影是在一個點投射成四稜錐形成;正交顯示若將相機放於無限遠,遠、近平面將無限接近。

在這裡插入圖片描述

2、正交投影

( 一 )3D化2D方法:

下圖將去除z軸,投影移至 [ − 1 , 1 ] 2 [-1,1]^2 [1,1]2,約定俗成。
在這裡插入圖片描述

( 一 )3D方法:

定義一個空間中的立方體,將其對映成標準立方體 [ − 1 , 1 ] 3 [−1,1]^3 [1,1]3中。“先平移再縮放”。
z軸用遠和近表示
在這裡插入圖片描述
變換矩陣
在這裡插入圖片描述
座標系選擇不同,會導致結果不同。

三 透視投影

  1. 越遠的物件越遠
  2. 平行線不再相交

如何進行透視投影?(難點)

簡單說,就是把這個Frustum的遠平面f擠成同近平面n一樣大的平面,然後進行正交投影。
約定:
3. 近平面不變
4. 遠平面f的中心點不變
5. Z值仍為f
在這裡插入圖片描述
關於遠平面擠壓後坐標的變化,(通過相似三角形算出)等值關係:
在這裡插入圖片描述
在齊次座標中,利用上述相似關係
y ′ = n z y x ′ = n z x  (similar to y’)  y^{\prime}=\frac{n}{z} y \quad x^{\prime}=\frac{n}{z} x \text { (similar to y') } y=znyx=znx (similar to y’) 
( x y z 1 ) ⇒ ( n x / z n y / z  unknown  1 )  mult.   by  z = = ( n x n y  still unknown  z ) \left(\begin{array}{l}x \\y \\z \\1\end{array}\right) \Rightarrow\left(\begin{array}{c}n x / z \\n y / z \\\text { unknown } \\1\end{array}\right)^{\begin{array}{l}\text { mult. } \\\text { by } z \\==\end{array}}\left(\begin{array}{c}n x \\n y \\\text { still unknown } \\z\end{array}\right) xyz1nx/zny/z unknown 1 mult.  by z==nxny still unknown z
上述變換可以用矩陣表示如下,可以確定出變換矩陣的三行
在這裡插入圖片描述
如何去確定剩下的一行呢?通過以下
1. 利用近平面的點不變性 近平面上的點在經過上述變換後坐標不變
計算出第三行的前兩個問號,得出一個等式 A n + B = n 2 An+B=n^2 An+B=n2
在這裡插入圖片描述
2. 利用遠平面的點,Z座標值不變性,得出一個等式 A n + B = f 2 An+B=f^2 An+B=f2
在這裡插入圖片描述
聯立上兩式即可得
在這裡插入圖片描述
Question:對於中間任意一點(x,y,z),在經過擠壓後(將其變為立方體後),變換後的Z值會靠近遠平面還是靠近近平面?
Answer:會更大一些,乘以變換矩陣即可得到結果。

相關文章