recast 生成navmesh主要流程

參考: 
    critterai   http://www.critterai.org 

 關於理解 NavMesh 生成:
    關於 PolyMesh 的理解,尤爲是其有關多邊形信息的格式,對於理解 rcPolyMesh 很是關鍵:
 一則關於 Mesh 導入轉換成 NavMesh 的討論帖子: 
 一則關於做者說不添加導入普通 Mesh 到 NavMesh 功能的討論貼子:
   一個介紹CritterAI與Recast Navigation尋路的帖子

recast生成導航網格並非直接用Mesh的原始面片開始合併的
先從平面幾何體構建體素,再生成NavMesh
旋轉一個物體會影響他的NavMesh生成結果

recast.h 中有大的步驟函數的定義

recast生成的5個步驟:
1 體素化: 將場景中全部物體體素化,保證體素信息覆蓋所有原始幾何體
2 生成移動區域: 
    a 將體素的上表面取出,爲潛在可移動區域
    b 剔除 距離阻擋(牆,傢俱)太近的 和 上表面過小不足以移動的(桌子,扶手)
     c 合併能夠移動的面,根據高度差,中間有沒有阻擋等
    d 剔除過小的面(最小面積)
   
3 生成輪廓(Contour):
    a 從體素空間轉爲向量空間
    b 從上一步的移動區域生成很是詳細的多邊形信息 
       Marching squares算法  https://en.wikipedia.org/wiki/Marching_squares 
    c 簡化相鄰多邊形的邊界
        Douglas-Peucker算法  https://en.wikipedia.org/wiki/Polygonal_chain 
    b 簡化外部邊界(連接空的邊)
    d 優化邊界長度(限定最長邊線)
    
4 生成凸多邊形:將輪廓幾何體細分爲凸多邊形
5 生成高度信息:將高度信息寫入頂點
    Delaunay triangulation 讓三角形統一化
    
相關文章
相關標籤/搜索