最近看了好幾本圖形學的書,都是中國人寫的,感覺講什麼的都有,不同的書講的內容都不同。於是又翻了下孫家廣的《電腦圖形學(第三版)》,又看了下圖形學聖經《電腦圖形學原理及實踐 C語言描述》的目錄,發現還是聖經涵蓋的內容廣泛,幾乎涉及了其它圖形學教材的所有內容。東西太多,看完有點亂,於是自己梳理一下,看看到底有些什麼。
粗略的看,電腦圖形學分為兩方面內容,一是建模,二是變換,三是渲染。所謂建模,就是將一個現實中的物體或者想象出來的物體做成一個模型,使電腦能夠識別。所謂變換,就是將空間中的實體變換到螢幕上。所謂渲染,就是在螢幕上顯示出來一些情境。
1、建模
建模方面涉及的內容相對較少,這部分主要是和數學有關。因為電腦的基礎就是數學,電腦可識別的模型也即數學模型。
(1) 模型的表示方法
模型表示方法有兩種,一種是用方程表示,一種是用實體造型表示。
方程表示主要包括常見的曲線曲面方程,BEZIER曲線曲面,B樣條曲線曲面和NURBS曲線曲面。
實體造型表示包括內容挺多,如邊界表示,空間劃分表示,等等,很多。
總而言之,這一部分的主要任務是以某種形式將一個實體表示出來。
(2) 多邊形網格
以某種形式將模型表示出來後,通常在三維圖形領域,模型並沒有真正的建立起來。通用的模型是多邊形網格形式的,於是需要進行轉換。
在上一步形成的圖形可表示出大量的點,這些點都是實體表面上的點。按照一定的順序將點串連起來,就得到實體輪廓,即多邊形網格。
通常採用三角形網格,為此需要對點進行三角剖分。常採用delaunay三角剖分和隨機增量剖分。
(3) 網格簡化
形成三角網格後,網格數量如果過多,需要對模型簡化,以降低渲染的負荷。在簡化的同時還要盡量不降低渲染的效果。通常有靜態網格簡化技術,細節層次技術,漸進式網格模型表示等。
2、座標系變換
(1) 觀察變換
這一部分是將空間物體從全局座標系變換到二維視區。因為物體處於三維空間中,然而螢幕是以圖片的形式顯示的,即視區是二維的,這樣就需要這樣一個變換。包括如下三個步驟:
觀察變換:將實體從全局座標系變換到觀察座標系。
正常化變換:將觀察域正常化
視區變換:完成從觀察座標繫到視區的映射。
(2) 裁剪
裁剪是確定圖元是否落在某一地區。視區是有限的,在視區外的圖元不需要顯示在螢幕上。裁剪是在視區變換的過程中執行。
裁剪演算法很多,關於直線裁剪,有Cohen-Sutherland演算法、Liang-Barsky演算法,關於多邊形裁剪,有Sutherland-Hodgman演算法、Weiler-Atherton演算法。
3、渲染
渲染是電腦圖形學中最龐大的部分,這部分和電腦、數學、物理等多個學科都有聯絡。
(1) 光照和明暗處理
這部分研究的是光源發出的光打到實體表面產生的光照效果。於是需要研究如下內容:
光照模型。即光源是什麼樣的,發出什麼樣的光。
明暗處理模型。即模型的表面是什麼樣的,如何反射光。陰影屬於此部分
光線追蹤。一種計算光照效果的演算法。
輻射度演算法。另一種計算光照效果的演算法。
即,這部分研究的主要內容是:光源發出什麼樣的光,物體對光如何反射,以及根據光源模型和明暗處理模型而產生的類比光照效果的演算法。
(2) 顏色模型與著色
現實世界是繽紛多彩的,因此必須有多種顏色。顏色模型有多種,如CIE-XYZ色度圖,RGB顏色模型,CMY顏色模型,HSV顏色模型,HLS顏色模型等等。
選用某種特定的顏色模型,對實體進行著色,是渲染的重要內容,是增加渲染效果真實性的重要組成部分。
(3) 可見面判定
圖形學類比的是人眼看到的世界。對於一個實體,面對著我們的一側可以被看到,而實體的背部則不在視線範圍內。不在視線範圍內的部分稱為隱藏面。
可見面判定即確定哪些面可見,哪些面不可見。這裡演算法也比較多,涉及到Z緩衝器演算法,曲面求交演算法等等。
(4) 紋理
為實體添加紋理,通常採用貼圖的形式,使實體更加真實。
總結:
其實整理的也很亂,因為圖形學涉及的東西太多太雜了,比如幾何變換,投影等等,都沒有寫在上面。
下面是三維圖形實現流程,我想有了這樣一個流程圖,心中就有了一條比較清晰的脈絡了。
關於渲染過程畫的不全,但是比較重要的內容就是這些。寫這些也就是梳理一下,想闡述下某種技術在圖形學中到底有什麼作用,僅此而已。
The End