三角網格

 

三角網格(3)

 

三角網可在三角形或頂點級保存額外信息。

 

紋理映射座標

紋理映射是將位圖(稱作"紋理圖"或簡稱"紋理")貼到多邊形表面的過程。這裏只給出一個高度簡化的解釋:我們希望將2D紋理貼到多邊形表面上,同時考慮多邊形在攝像機空間的方向。對多邊形中每個需要渲染的像素都要計算2D紋理映射座標,這些座標用以索引紋理圖,從而爲相應像素着色。

通常,在頂點保存紋理映射座標,三角形面中其餘各點的座標通過插值進行計算。

 

表面法向量

許多應用程序中,網格上的各點都需要一個表面法向量。它可以用來:

(1)計算光照。

(2)進行背面剔除。

(3)模擬粒子在表面"彈跳"的效果。

(4)通過只考慮正面而加速碰撞檢測。

表面法向量可能保存於三角形級或頂點級,或兩者皆有。

三角形級法向量可以通過兩向量叉乘的方法輕鬆獲得,而頂點級法向量的計算則困難一些。首先,應注意到頂點處其實是沒有法向量定義的,因爲此處網格表面不連續。第二,三角網是對連續表面的逼近,所以我們實際想要的是連續表面的法向量。根據產生三角網的方法,這種信息不一定現成可得。如果網格是自動生成的,比如說從參數曲面上,則可以直接獲得法向量。

若法向量沒有提供,則必得有現成數據(頂點位置和三角形)生成。一個技巧是平均相鄰三角形的表面法向量並將結果標準化。當然,這要求知道三角形法向量。一般可以假設三角形頂點以順時針列出,通過叉乘計算外表面的法向量。如果頂點順序不能假設時,可使用Glassner建議的方法。

通過平均三角形法向量求得頂點法向量是一種經驗性方法,大多數情況下都能工作得很好。但是有必要指出,某些情況下,其結果並不是所期望的。最明顯的例子是兩個法向量剛好相反的三角形共享一個頂點。這種情形常發生在"公告板"物體上。"公告板"由兩個三角形背靠背構成,它的兩個法向量方向恰好相反,其平均值爲0不能標準化。爲解決這種問題,必須拆開所謂的"雙面"三角形。

平均頂點法向量的另一個問題會在應用Gouraud着色時發生,這裏給出一個簡化的解釋:光照是按頂點法向量逐點計算的。如果使用平均三角形法向量計算的頂點法向量,某些應該有尖銳邊緣的地方會顯得"過於平滑"。以最簡單的盒子爲例,邊緣處應該有一個劇烈的關照變化。如果我們使用平均頂點法向量,這個劇烈變化會消失。如圖14.8所示:

根本問題在於盒子邊緣不連續,而這種不連續卻不能很好的被表達,因爲每個頂點只有一個法向量。其實仍然可以使用面拆分解決問題:換句話說,重複不連續處的頂點。這樣做之後,人爲的構造了一個不連續以防止頂點法向量被平均。這種"裂縫"在網格拓撲中可能會導致問題,但在如渲染、光線追蹤等任務中沒有問題。

另一個小問題是這種平均會導致結果向較多擁有相同法向量的三角形偏移。例如,若干三角形共享一個頂點,但其中兩個共面。則平均出的法向量會發生偏移,因爲共面三角形的法向量重複了兩次,相比於其他法向量有更多"發言權"。於是,即使表面並未變化,也會使頂點法向量發生改變。我們可以修正此錯誤,但幸運的是實踐中這並不是什麼大問題,因爲頂點法向量本來就是一種近似。

 

光照值

另一種常由頂點維護的信息是光照值。這些光照值用於沿表面的插值,典型的方法是Gouraud着色。有些時候,頂點處僅保存法向量,渲染時動態計算光照值。

 

拓撲與一致性

三角網格的拓撲是指當在三角網格中不考慮頂點位置與其他幾何性質的邏輯連通性時,兩個頂點數相同且三角形互聯方式一致的三角網格爲同拓撲的,即使它們對應的物體完全不同。從另一方面說,儘管形狀不同,拉伸網格但不打破鄰接性,我們得到的是同拓撲的網格。

有一種特殊網格稱作封閉網絡,又稱作"流形"。概念上,封閉網格完美地覆蓋物體表面,網格中沒有間隙,從外面完全無法看到任何三角形的背面。這是一種重要的網格,它的點和邊組成形式就像平面圖,即如果將頂點當成平面點,用直線連接頂點,此封閉網格可以畫在一個2D平面上,而且沒有邊交叉。平面圖符合Euler方程:v-e+f=2,其中v爲頂點數,e爲邊數,f爲網格上的面數。

實踐中,我們經常遇到拓撲異常的三角網格,導致網格不封閉:

(1)孤立頂點:頂點未被任何三角形使用。

(2)重複頂點:完全相同的頂點。使用這些點的三角形幾何上相鄰而邏輯上不相鄰,多數情況下,我們不希望看到這種現象,應該刪除。

(3)退化三角形:使用一頂點超過一次的三角形。意味着這個三角形沒有面積,一般這種三角形應該刪除。

(4)開放邊:僅爲一個三角形所使用。

(5)超過兩個三角形共享的邊:封閉網格中,任一邊必須爲兩個三角形共享。

(6)重複面:網格中包含有兩個或更多相同的面。這是不希望看到的,應該去掉多餘面而只保留一個。

根據應用的不同,上述異常可能是嚴重的錯誤,也可能是小錯誤,或者無關緊要。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章