圖形學學習筆記二:觀測變換
文章目錄
一、旋轉
三維空間中繞座標軸旋轉
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α00−sinαcosα00001⎠⎟⎟⎞Ry(α)=⎝⎜⎜⎛cosα0−sinα00100sinα0cosα00001⎠⎟⎟⎞Rz(α)=⎝⎜⎜⎛cosαsinα00−sinα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軸用遠和近表示
變換矩陣
座標系選擇不同,會導致結果不同。
三 透視投影
- 越遠的物件越遠
- 平行線不再相交
如何進行透視投影?(難點)
簡單說,就是把這個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)
⎝⎜⎜⎛xyz1⎠⎟⎟⎞⇒⎝⎜⎜⎛nx/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:會更大一些,乘以變換矩陣即可得到結果。
相關文章
- 快速傅立葉變換 學習筆記筆記
- javascript學習筆記,二、變數JavaScript筆記變數
- [go 學習筆記] 二、變數、常量Go筆記變數
- RxJava 學習筆記 -- 變換操作符RxJava筆記
- 快速沃爾什變換 (FWT)學習筆記筆記
- 【演算法學習筆記】快速傅立葉變換演算法筆記
- 高等數學學習筆記(二)筆記
- 學習筆記----圖論學習中筆記圖論
- 計算機圖形學 第四章 圖形變換計算機
- ANFIS學習筆記(二)筆記
- activiti學習筆記二筆記
- Typescript學習筆記(二)TypeScript筆記
- JavaScript學習筆記(二)JavaScript筆記
- React 學習筆記【二】React筆記
- goLang學習筆記(二)Golang筆記
- vue學習筆記二Vue筆記
- vue學習筆記(二)Vue筆記
- 科二學習筆記筆記
- jQuery 學習筆記(二)jQuery筆記
- git學習筆記(二)Git筆記
- Java學習筆記二Java筆記
- TS學習筆記(二)筆記
- Vue學習筆記(二)------axios學習Vue筆記iOS
- 計算機圖形學之矩陣變換計算機矩陣
- 弦圖 學習筆記筆記
- 計算機圖形學(四)_幾何變換_1_基本的二維幾何變換(二)_旋轉計算機
- Django學習筆記《二》圖書管理系統Django筆記
- iOS學習筆記20 地圖(二)MapKit框架iOS筆記地圖APK框架
- Qt 學習筆記 - 第二章 - 新增圖片、佈局、介面切換QT筆記
- Java學習筆記記錄(二)Java筆記
- 計算機圖形學(四)_幾何變換_1_基本的二維幾何變換(一)計算機
- 深度學習 DEEP LEARNING 學習筆記(二)深度學習筆記
- 學習筆記之JAVA圖形設計卷I AWT——第3章 圖 形 (轉)筆記Java
- python學習筆記(二)Python筆記
- TensorFlow學習筆記(二)筆記
- TS學習筆記(二):介面筆記
- github--學習筆記(二)Github筆記
- orientDB學習筆記(二)MATCH筆記