Ear Clipping算法简介
?
背景
偶爾翻出來幾個以前的老游戲玩了一下,其中包括了孢子。說實話,以前作為玩家的時候感覺這個游戲也就一般。但是現在作為游戲開發者發現這個游戲涉及到一些很酷的技術,包括自定義的肢體(Skin方面)、動畫的泛化(Animation Retargeting方面)以及IK結算的泛化。因此查找了一些這方面的資料,嘗試了解一些這方面的知識。
搜索了一些資料之后,決定挨個的去補一補對應的知識點。有些知識點在大學也學過但是記憶已經模糊了,有些則是完全沒聽過的領域,統一記錄下來吧,也當作是對以往的知識點的整理。
這篇博客介紹的就是孢子中使用的用于將自定義肢體模型進行細分化的Ear Clipping算法。
在孢子的開發者博客中提到,在項目開發期,Marching Cube算法仍然處于專利保護期(雖然游戲發行的時候專利已經過期了……),因此開發者決定使用Ear Clipping算法將整個網格進行細分處理。
算法介紹
Ear Clipping算法指的是用于將一個普通多邊形拆解為一系列的三角形,這些三角形的頂點都來自原來的普通多邊形,如下圖:
各類定義
普通多邊形的定義
上文提到了普通多邊形(Simple polygon),普通多邊形定義如下:
如下圖,最左邊的是一個普通多邊形,中間的不是普通多邊形因為頂點V1V1連接了多于兩條邊,右邊的不是普通多邊形因為1和4的邊相交于非頂點。
Ear Tip
針對于三個連續的頂點Vi0,Vi1,Vi2Vi0,Vi1,Vi2,如果線段Vi0Vi2Vi0Vi2是多邊形的一根對角線,那么頂點Vi1Vi1就是一個Ear tip.
說的更通俗一點,如果線段Vi0Vi2Vi0Vi2完全位于多邊形內部,并且頂點Vi1Vi1是一個凸頂點,那么頂點Vi1Vi1就是一個Ear tip。
算法過程
算法過程其實相對來講比較簡單:
例如下圖,在多邊形中刪除了Ear Tip 3,此時三角形<V2,V3,V4V2,V3,V4>就被放入三角形列表中。
再如下圖,在多邊形中刪除了Ear Tip 4,此時三角形<V2,V4,V5V2,V4,V5>被加入三角形鏈表中,并且頂點5變成了新的Ear和凸頂點,此時需要更新對應的鏈表。
完整過程如下:
不難看出,Ear Clipping算法的時間復雜度是O(n2)O(n2),并且三角化的最終質量很大程度上取決于頂點順序。在某些情況下很容易生成過于細長的三角形,這樣不利于Skinning的進行。
思考
Ear Clipping算法常用于將Polygons進行三角化,但是在孢子中最后的軀干模型往往是基于一個隱式曲面(Implicit Surface),也就是說是連續的,此時需要將隱式曲面轉化為多邊形之后,再進行操作。
但是看得出來孢子中并沒有使用這個算法進行最終的三角化。在最終的隱式曲面方程定型之后,他們使用的是Graphics Gems III的文章Compact Isocontours from Sampled Data,對應的tech report鏈接。據說是強烈推薦,下一篇文章就寫這個吧……
總結
以上是生活随笔為你收集整理的Ear Clipping算法简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c语言地震子波6,地震子波显示及合成地震
- 下一篇: 迷阵突围(dij)