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 讓三角形統一化
    





    









免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM