iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 22
0
Modern Web

在Three.js探索CAD的奧秘系列 第 22

Day 22 : 三角網格細分

前言

網格細分 (Grid Refinement),是CAD圖學中重要的基礎方法,目的是網格進行細緻化以提升解析度,經常配合各種編修工具合併使用。

網格細分方法

在前一篇文章中,聰明的各位會發現塗抹效果不夠平滑,其中一個原因是網格不夠細緻,以下列舉三種常見的網格細分方法:

  1. 長邊分裂方式,首先尋找三角形最長的邊取其邊線中點的座標位置,再與此對邊所對應的角點位置進行連線(藍線),藉此分割出兩個三角形,這種方式在分裂一個三角形的時候最為簡單容易且計算快速。
    https://ithelp.ithome.com.tw/upload/images/20180110/20107175qkoMIjdKZg.png

  2. 三邊中點分裂方式,首先找尋三個邊各別的中點座標位置,並且將三個座標進行連線成為一個三角形(藍色三角形),藉此分割成四個三角形,這種分裂方式可以一次性的分裂出更細緻的網格。
    https://ithelp.ithome.com.tw/upload/images/20180110/20107175zAVWyf2PQm.png

  3. 形心分裂方式,首先找尋三角形的形心座標,再將三角形的三個頂點分別連線到形心座標位置,藉此分割成三個三角形,這種分裂方式在建立三角網格拓樸關係的時候最為容易。
    https://ithelp.ithome.com.tw/upload/images/20180110/201071755SMM3J7pcG.png

拓樸搜尋網格細分

在介紹完基本的原理後,再更進一步的說明實作上可以怎麼進行,以下列舉前面提到的三種常見的網格細分方法進行說明:

  1. 長邊分裂方式,首先會由拓樸搜尋所有的邊,例如下圖的邊AB要做細分,其邊拓樸中存在兩個面的拓樸資訊,計算完面ABC後會將面ABE也一同進行網格細分。原因是若只有計算一個面的情況下,會發現第二個面會多了一個頂點,變成一個四角形就會不符合三角網格資料結構,為了防止這種情況的發生必須將兩個面都進行網格細分。
    https://ithelp.ithome.com.tw/upload/images/20180110/20107175d6I01UwdsO.png

  2. 三邊中點分裂方式,首先會由拓樸搜尋所有的面,例如下圖的面ABC要做細分,面的拓樸中會記錄三個邊的ID資訊,再透過邊的拓樸資料得到各自的中點座標。這種方法在面對需要進行局部網格細分的時候比較麻煩,此三角形的三個鄰面都會產生四邊形的情況,可以搭配 長邊分裂方式 將鄰面一分為二解決此問題。
    https://ithelp.ithome.com.tw/upload/images/20180110/201071757n5MMUDsZL.png

  3. 形心分裂方式,首先同樣由拓樸搜尋所有的面,例如下圖的面ABC要做細分,面的拓樸中有記錄面的形心資訊,只要將三個點座標直接對形心進行連線即可。這種方法沒有前述兩個方法的問題,但是分割出來的面較容易生成所謂的狹長形網格,根據需求會需要搭配網格重建技術消除狹長形三角網格。
    https://ithelp.ithome.com.tw/upload/images/20180110/20107175aDiRl7P8iU.png

後記

今天不實作,先討論了三種常見的網格細分方法,讓大家了解到除了改變網格頂點的位置以外,還能透過增加三角網格來達到細緻化的效果,如此一來在CAD軟體中就能擁有更豐富的應用。


上一篇
Day 21 : 模型塗抹效果
下一篇
Day 23 : 網格細分實作
系列文
在Three.js探索CAD的奧秘30

尚未有邦友留言

立即登入留言