【Notes】現代圖形學入門_01

跟着閆令琪老師的課程學習,總結本身學習到的知識點html

課程網址GAMES101
B站課程地址GAMES101
課程資料百度網盤【提取碼:0000】算法

計算機圖形學概述

計算機圖形學是一門將模型轉化到屏幕上圖像的一門基礎學科,主要分爲:Rasterization(光柵化)、Curves and Meshes(幾何表示)、Ray Trancing(光線追蹤)、Animation/Simulation(動畫和模擬)
圖形學與計算機視覺的簡單界限:
(1) 計算機視覺是將屏幕上的圖片轉化爲模型的過程;
(2) 計算機圖形學是一門將模型轉化到屏幕上圖像的一門基礎學科。
每一個類別的知識框架以下圖:
知識框架框架

Rasterization(光柵化)

點乘和叉乘

Dot Multiplication

點乘在圖形學的應用
(1) 求兩個向量之間的夾角:
$$\cos(\theta) = \frac{(\vec{a} \cdot \vec{b})}{\lVert a \lVert \lVert b \lVert}$$
能夠判斷兩個向量的距離、分向量與判斷向量先後
Dot Multiplication
(2) 投影
一個向量在另外一個向量上的投影
Projectionide

Cross Product

[1] 右手座標系
在這裏插入圖片描述
右手座標系
叉乘在圖形學中的應用
(1) 判斷一個向量在另外一個向量的左右,叉乘爲正(與右手方向一致),則爲目標在本身右方,反之亦然;
(2) 在性質(1)的基礎上,若是一個點在包圍他的全部線的同一側,那麼能夠說明該點在這個圖形內,反之亦然。
Cross Product學習

矩陣

矩陣轉置與逆

(1) 矩陣A、B乘積的轉置等於B的轉置矩陣乘A的轉置矩陣動畫

\[(AB)^T=B^TA^T \]

(2) 矩陣AB的逆等於B的逆乘A的逆spa

\[(AB)^{-1} = B^{-1}A^{-1} \]

基礎變換(二維)

三維變化與二維變換矩陣相似3d

齊次座標下的基礎變換

Scale:code

\[S(s_x,s_y) =\begin{pmatrix} s_x &0 &0\\ 0 & s_y & 0 \\ 0&0&1 \end{pmatrix}\]

Rotation:orm

\[R(\alpha) = \begin{pmatrix} \cos\alpha& - \sin\alpha & 0 \\ \sin\alpha & \cos \alpha &0 \\ 0&0&1 \end{pmatrix}\]

Translation:

\[T(t_x,t_y)=\begin{pmatrix} 1 & 0 & t_x \\ 0 &1& t_y\\ 0 &0& 1 \end{pmatrix}\]

組合變換(Compositon Transform)

矩陣變換把先變化的矩陣放到右邊:矩陣運算是從右向左
Compositon Transform

四元數與旋轉公式

四元數

留個坑,下週再填

羅德里格斯旋轉公式

Rodrigue's Rotation Formula: Raotation by angle \(\alpha\) around axis \(\vec{n}\)

\[R(\vec{n},\alpha)=cos(\alpha)I+(1-cos(\alpha))nn^{T}+\sin(\alpha) \begin{matrix} \underbrace{ \begin{pmatrix} 0 & -n_z & n_y \\ n_z & 0 & -n_x \\ -n_y & n_x & 0 \end{pmatrix} } \\ N\end{matrix}\]

In the formula
I :Identity matrix
最後乘積的結果是一個3*3的矩陣

MVP變換

Model Transformation

引用博客:MVP變換

對模型進行模型變換時,須要注意座標系是在世界座標系原點。當繞模型中心進行變換時,首先要將模型的中心點移動到世界座標系的原點,以後在進行模型變換,以後移回到原來的位置。
矩陣描述爲:$$M=M_t^{-1} M_r M_s M_t$$

View/Camera Transformation

這個過程是將肯定相機的位置:將相機的位置經過下面的過程移動到固定的點和方向。
(1) 相機的位置固定在世界座標系的原點: \(\vec{e}\)
(2) 相機的朝向 \(-\vec{Z}\)\(\hat{g}\)
(3) 相機的向上方向\(\vec Y\)\(\hat t\)
View

基於上述過程,要求視圖變換矩陣\(M_{view}\)分別求相機的平移矩陣\(T_{view}\)、旋轉矩陣\(R_{view}\)

\[T_{view} = \begin{bmatrix} 1 & 0 & 0 & -x_{\vec{e}} \\ 0 & 1 & 0 & -y_{\vec{e}} \\ 0 & 0 & 1 & -z_{\vec{e}} \\ 0 & 0 & 0 & 1 \end{bmatrix}\]

求旋轉矩陣時,直接求相機旋轉到原點的矩陣不容易求解,但求原點到相機位置的旋轉矩陣容易求。
因此先求原點到相機的旋轉矩陣:Z To \(-\hat{g}\)、Y To \(\hat{t}\)、最後保證\(\vec{X}\) To \((\hat g \times \hat t)\) 朝向的方向,緣由是保證符合右手座標系。

\[R_{view}^{-1}=\begin{bmatrix} x_{\hat{g} \times \hat{t}}&x_{t}&x_{-g}&0\\ y_{\hat{g} \times \hat{t}}&x_{t}&y_{-g}&0\\ z_{\hat{g} \times \hat{t}}&x_{t}&z_{-g}&0\\ 0&0&0&1 \end{bmatrix}\]

由於\(R_{view}^{-1}\)是正交矩陣,因此逆矩陣和旋轉矩陣相同。

\[R_{view} =\begin{bmatrix} x_{\hat{g} \times \hat{t}}&y_{\hat{g} \times \hat{t}}&z_{\hat{g} \times \hat{t}}&0\\ x_{t}&y_{t}&z_{t}&0\\ x_{-g}&y_{-g}&z_{-g}&0\\ 0&0&0&1 \end{bmatrix}\]

因此

\[M_{view} = R_{view} T_{view}= \begin{bmatrix} x_{\hat{g} \times \hat{t}}&y_{\hat{g} \times \hat{t}}&z_{\hat{g} \times \hat{t}}&0\\ x_{t}&y_{t}&z_{t}&0\\ x_{-g}&y_{-g}&z_{-g}&0\\ 0&0&0&1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & -x_{\vec{e}} \\ 0 & 1 & 0 & -y_{\vec{e}} \\ 0 & 0 & 1 & -z_{\vec{e}} \\ 0 & 0 & 0 & 1 \end{bmatrix}\]

Projection Transformation

我的理解投影變換的終極目的是讓物體擠壓在一個單位大小的平面(空間)內。緣由先挖個坑。

Orthographic Projection

簡單理解就是將物體的忽略z座標,將模型經過Scale To [-1,-1]^2平面內。
真正的操做:
(1) 移動模型的位置到原點
(2) 縮放模型到空間[-1,1]^3中
Orthographic

Perspective Projection

正視投影的光線能夠當作是一個立方體,如上圖。透視投影的光線能夠當作一個視錐,以下圖。
透視變換能夠分爲兩個步驟進行:
(1) 將視錐擠壓到立方體內\(M_{persp->ortho}\)
(2) 將擠壓後的視錐進行正視投影變換$M_{ortho}
在這裏插入圖片描述

擠壓時的變換矩陣\(M_{persp->ortho}=\begin{bmatrix} n&0&0&0\\ 0&n&0&0\\ 0&0&n+f&-nf\\ 0 & 0&1&0 \end{bmatrix}\)
因此投影變換矩陣

\[M_{proj}=M_{ortho}M_{persp->ortho} \]

光柵化

Viewport Transform(視口變換)

將通過MVP變換後獲得的單位空間模型變換到屏幕上,屏幕左邊是左下角爲原點。
在這裏插入圖片描述
因此視口變換的矩陣

\[M_{viewport}=\begin{pmatrix} \frac{width}{2}&0&0&\frac{width}{2}\\ 0& \frac{height}{2}&0&\frac{height}{2}\\ 0&0&1&0\\ 0&0&0&1 \end{pmatrix}\]

Rasterization:Draw to Raster Displays

主要是將已經通過視口變換的模型畫在屏幕空間上。
主要過程有:
(1) 採樣
(2) 判斷像素中心的位置與三角形的關係

採樣

由於屏幕空間自己分辨率已經給出,因此像素點的數量也已經確認了,可是對咱們能夠經過如下方法提升效率,將可能有用的像素點選取出來:
1.Bounding Box
在這裏插入圖片描述

2.Incremental Triangle Traversal
在這裏插入圖片描述

判斷像素中心的位置與三角形的關係

主要應用的原理是利用向量的叉乘判斷點是否在三角形內。
僞代碼以下

for(int x =0 ;x<xmax;x++)
	for(int y = 0;y<ymax;y++)
		image[x][y]=inside(tri,x+0.5,y+0.5)

反走樣與深度緩衝

Artifacts(瑕疵) in Computer Graphics

產生Artifacts的分類和緣由

(1) Jaggies(Staircase Pattern)
緣由:空間採樣產生的鋸齒
(2) Mpire
緣由:圖片欠採樣
(3) Wagon Wheel Effect
緣由:時間上採樣產生

解決辦法

(1) 提升採樣率:不實用
(2) 反走樣

反走樣

反鋸齒的思路是先模糊,後採樣,順序不能夠調換。
走樣的緣由:採樣頻率知足奈奎斯特採樣定律,即採樣頻率高於二倍的最高頻率。

濾波

頻率圖:越靠近中心點,表示的頻率越低
濾波器的種類大體分爲四類:
(1) 低通濾波:應用的效果是模糊
(2) 高通濾波:應用效果是提取邊緣信息
(3) 帶通濾波:也能夠繪製出圖像的邊緣信息

卷積定理

時域卷積、頻域相乘
時域卷積,頻率圖向兩邊拓展。
在這裏插入圖片描述

MSAA

經過MSAA方法能夠首先模糊的效果。
步驟以下:
(1) 將每一個像素點再進行細分
(2) 判斷一個像素點裏有幾個細分的點在三角形內
(3) 將像素點根據在三角星內部細分點不一樣程度的着色,表示已經模糊。
上述過程的流程圖以下:
在這裏插入圖片描述
在這裏插入圖片描述
上述過程在頻率上的過程至關於低通濾波
在這裏插入圖片描述

Z-Buffer深度緩衝

每一個像素都有一個z值表明像素點的深度、z值越大,說明該點越遠。
Z-Buffer 算法僞代碼
Initalize depth buffer to \(\infty\)

for(each trangle T)
	for(each sample(x,y,z) in T)
		if(z<zbuffer[x,y])   //closeet samnple so far
			zbuffer[x,y]=z;  //update color
			framebuffer[x,y]=rgb;   //update depth

總結

本週主要是完成光柵化的過程。其中比較重要的幾個知識點:向量點乘和叉乘的幾何意義、齊次座標系下的矩陣變換、MVP變換、視口變換、光柵化、反走樣、Z-Buffrer深度緩衝等等基礎概念。

相關文章
相關標籤/搜索