else { // Pd皆不為上述終止條件往三方向擴散 R ← {Pd} ∪ R ;
for ( Pd的所有相連三角形 P’ ) region_growing( P’);
} }
3.3.2 輪廓的判斷
在山石模型中,我們要找的輪廓特徵有:Silhouette、Boundary,可在表面區域 擴展過程中,由兩個相連三角形的關係,區分其相連邊是否為輪廓邊,我們將一一 分析,最後總結說明擴展分析過程。
A. Silhouette
由隱蔽面定義所區分的類型二中,該三角形(Pd)至少有一可見邊 E,當 E 的另 一側三角形為可見時,必會擴展到 Pd,因 Pd不可見而終止,此時 E 可為 Silhouette 或是區域的邊界。我們於下面分析。
在多邊形網格中,Silhouette 包含所有連接 back-facing 多邊形與 front-facing 多 邊形的邊。而 back-facing 多邊形為不可見的,front-facing 多邊形則在可能情況下可 見。也就是說 Silhouette 一定屬於可見三角形與不可見三角形的交界邊。利用此特 性,我們在表面擴展時,在可見三角形區域進行,當它擴展至不可見三角形時終止,
而不可見三角形可能是 front-facing 或 back-facing,利用 3.3 式判別:
第三章 表面區域擴展
29
{ front back - - facing facing , , n n ρ ρ ⋅ ⋅ V V > ≤ 0 0 (3.3)
其中
n ρ
為三角形在視角座標下之法向量,V 為視線向量(line-of-sight vector)。
根據方程式 3.3,辨別出 back-facing 三角形,在這情況下,按 Silhouette 定義,
在 front 與 back face 的相連邊 E 即為 Silhouette,將它加入區域的 Silhouette 集合。
例 如 圖 11 所 示 , 依 此 圖 的 視 點 位 置 看 模 型 , 圖 中 綠 色 線 段 為 該 視 角 下 模 型 的 Silhouette,黃色頂點為可見點,紅色頂點為不可見點。其中 A(藍色區域),是模型 的前半面(front-facing),為可見三角形集合而成的表面區域。而 B~D(灰色區域)為模 型的後半面(back-facing),為不可見表面,其中灰階值由淺至深表示端點可見數的多 寡,B 為只有單一端點不可見,C 的兩端點不可見,D 則三個端點皆不可見。圖中 藍色區域的黑色箭頭為可見三角形進行擴展的方向,實線的箭頭所跨越之邊 E 為擴 展終止邊,也就是說當 A 區域來源三角形(設為 Ps)擴展至 B 區的三角形(設為 Pd)時,
判斷 Pd是不可見的屬性,故不執行 Pd的區域擴展,此時接著以 3.3 式判斷 Pd,得 出它為 back-facing,也就是該終止邊 E 為我們想要找的 Silhouette。同樣為不可見的 灰色三角形但卻是 front-facing 的情況時,則是被前方物體遮蓋而產生的區域邊緣,
在繪畫時並不重要,因為前方物體的輪廓線已描繪出後方物體表面被遮蓋的情形,
見圖 10 (a)之遮蓋景況。
第三章 表面區域擴展
30
圖 11 區域擴散時,Silhouette 的辨別。綠色線段為該視角下模型的 Silhouette,
黃色為可見點,紅色為不可見點。
下面是判斷 Silhouette 的演算法:
if ( Pd不可見 ) {
if (
n ρ ⋅V ≤ 0
) { //back facePs與 Pd的相連邊 E 為 Silhouette;
} else{
E 為區域邊界;
} }
n ρ V
A D C
B
可見表面 不可見表面
黑 色 箭 頭 為 擴展方向
2.終止擴展後,以法 向 量 與 視 線 向 量 的 內積值分辨輪廓邊
1.此擴展方向因 B 區 有 一 頂 點 不 可 見,而停止擴展
第三章 表面區域擴展