【GAMES101现代计算机图形学入门笔记】Lec05 光栅化1(三角形)
Lec05 光柵化1(三角形)
文章目錄
- Lec05 光柵化1(三角形)
- 投影變換(續)
- 光柵化
- 視口變換(Viewport Transformation)
- 光柵化設備(補充知識)
- 三角形光柵化
- 采樣的概念
- 三角形采樣
- 采樣速度優化
- 存在的不足
投影變換(續)
如何表示近平面的大小(l, r, b, t)和遠近平面的距離(n, f)呢?事實上,用戶只需設定四個參數:
- 垂直視錐(vertical field of view)
- 近平面寬高比(aspect ratio = width / height)
- 近平面距離 n
- 遠平面距離 f
(注意!上圖是一張3D透視圖)
由三角形關系可知,tan?forvY2=tn\tan\frac{forvY}{2}=\frac{t}{n}tan2forvY?=nt?,aspect=rtaspect=\frac{r}{t}aspect=tr?,又l=?rl=-rl=?r,b=?tb=-tb=?t,至此所有信息都可以通過用戶輸入信息轉化而來。
小結:MVP變換
- Medel transformation (placing objects)
- View transformation (placing camera)
- Projection transformation
- Orthographic projection (cuboid to “canonical” cube [-1, 1]3)
- Perspective projection (frustum to “canonical” cube)
光柵化
我們已經把三位的圖像投射到二維平面上了,接下來的任務就是要在屏幕上顯示出來。
屏幕,其實就是像素(Pixel, short for picture element)的陣列。屏幕顯示的結果與分辨率(resolution,也即像素的數量)和光柵顯示方法(raster display)有關。
光柵化(rasterize),就是控制像素的顯示,從而把圖像“繪制”到屏幕上的過程。raster在德語中正是屏幕(screen)的意思。
在本課程中,為討論方便,我們把像素簡化為顏色統一的正方形,并定義屏幕空間如下:
每個像素塊的下標用整數對(x, y)來表示。
視口變換(Viewport Transformation)
我們在MVP變換中得到一個[-1, 1]3的立方體,現在需要把這個立方體投射到屏幕上。這里先不考慮z坐標,只在xy平面內進行變換:把[-1, 1]2變換為[0, width] * [0, height].
從正則立方體到屏幕的變換正是視口變換。其變換矩陣如下:
Mviewport=[width200width20height20height200100001]M_{viewport}= \begin{bmatrix} \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{bmatrix} Mviewport?=?????2width?000?02height?00?0010?2width?2height?01??????
光柵化設備(補充知識)
在實際的顯示設備中,每個像素并不是一塊統一的顏色,而是由RGB色塊組成的:
在屏幕上光柵化的設備,除了電腦顯示器,還有示波器(Osciliosope)、陰極射線管(Cathode Ray Tube)、電視(CRT原理,可以每次只畫奇數行/偶數行)、幀緩沖設備(調用內存里存儲的圖像)、液晶顯示屏(LCD,Liquid Crystal Display,通過液晶的排布影響光的偏振方向,從而控制光能否通過光柵)、發光二極管(LED,Light Emitting Diode)、電子墨水屏(Eletrophoretic Display,如Kindle),etc.
除此以外,也并不一定是繪制到屏幕上。如:數控精雕機(CNC Sharpie Drawing Machine)、激光切割機(Laser Cutting Machine),etc.
三角形光柵化
為什么常常使用三角形作為拆解圖形的單位?因為它有很多不錯的性質:
- 三角形是最小的多邊形,可以拆分其他多邊形
- 三角形在同一平面內的
- 三角形的內外定義清晰,可以用叉乘判斷內外
- 三角形內可以定義明確的插值方法
在經過MVP變換和視口變換之后,我們可以得到一個三角形頂點的精確坐標,接下來所要做的就是用像素近似地顯示出來。
我們將采用“采樣”的方法來實現。
采樣的概念
采樣一個函數:在離散的點上對函數進行采樣(求值),從而把連續的函數離散化(discretize)。
圖形學中采樣也有廣泛的應用:時間(1D)、區域(2D)、體積(3D),etc.
再舉個例子:在人體內任何一個位置得到其密度,也是一種三維的采樣。
三角形采樣
類似地,對三角形的采樣可以作如下解釋:
給定一個三角形,對每個像素判斷其中心是否在三角形內。
for (x=0; x<xmax; ++x)for (y=0; y<ymax; ++y)image[x][y] = inside(tri, x+0.5, y+0.5);而判斷是否在三角形內,就要用到Lec02中叉乘的知識了:
若P1P2?×P1Q?\vec{P_1P_2}\times \vec{P_1Q}P1?P2??×P1?Q?,P2P0?×P2Q?\vec{P_2P_0}\times \vec{P_2Q}P2?P0??×P2?Q?,P0P1?×P0Q?\vec{P_0P_1}\times \vec{P_0Q}P0?P1??×P0?Q? 同號,則Q在三角形內。
對于邊界情況(比如某個像素中心在兩個三角形的公共邊上),我們不必過多關注??梢宰远x處理辦法:比如,如果你認為邊上的點算在三角形內,那么這個點就同時在這兩個三角形內。
采樣速度優化
為了加速采樣,我們有兩種簡單的方法:
- 包圍盒(Bounding Box)
- 遞增遍歷(Incremental Triangle Traverse),即對每一行,只采樣三角形經過的最左像素到最右像素。該方法只適用于窄長、旋轉的三角形(這種情況下包圍盒不高效)
存在的不足
這樣采樣過后,三角形并不是平滑的,而是會出現很多鋸齒。
我們將在下節課介紹反走樣技術(Antialiasing)。
總結
以上是生活随笔為你收集整理的【GAMES101现代计算机图形学入门笔记】Lec05 光栅化1(三角形)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle与r语言时间转换,R语言时间
- 下一篇: BOM的相关知识