三角網格(3)

2021-04-29 20:43:12 字數 2191 閱讀 7985

三角網可在三角形或頂點級儲存額外資訊。

紋理對映座標

紋理對映是將點陣圖(稱作"紋理圖"或簡稱"紋理")貼到多邊形表面的過程。這裡只給出乙個高度簡化的解釋:我們希望將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)超過兩個三角形共享的邊:封閉網格中,任一邊必須為兩個三角形共享。

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

三角網格(2)

三角帶 三角帶是乙個三角形列表,其中每個三角形都與前乙個三角形共享一邊,圖14.2顯示了乙個三角帶的例子。注意頂點列出的順序使得每三個連續的點都能構成乙個三角形。例如 1 頂點1 2 3構成第乙個三角形。2 頂點2 3 4構成第二個三角形。3 頂點3 4 5構成第三個三角形。在圖14.2中,頂點以構...

三角雛形 3

檔名稱 123.cpp 作 者 隋宗濤 完成日期 2016年5月8日 版 本 號 v1.0 問題描述 使用有預設引數的建構函式,不給定實參時,預設邊長為1 注意 只需要乙個建構函式即可。輸入描述 無 程式輸出 include includeusing namespace std class doub...

三角網格的主要生成方法

1 網格前沿演算法 advancing front method 又稱啟發式的網格生成演算法。演算法思路是以剖分域的邊界為網格的初始前沿,按預設網格單元的形狀 尺度等要求向域內生成節點 連線單元,同時更新網格前沿,如此逐層向剖分域內推進,直至所有空間被剖分 此法最大的特徵就是能夠生成複雜形狀的非結構...