1. 程式人生 > >google 的 recastnavigation 筆記 (未完待續)

google 的 recastnavigation 筆記 (未完待續)

截止到2018 /9/12最新版的recastnavigation

https://www.jianshu.com/p/490a9128b248

http://www.critterai.org/projects/nmgen_study/ 

對每個 三角形求取aabb範圍並儲存

solomesh中的第一步通過rcMarkWalkableTriangles設定三角形的area判斷依據為三角形的slope,初始只有兩個極端的值,表示可行走還是不可行走

solomesh中的rcRasterizeTriangles 函式,如果有圖來進行展示會非常好理解,具體思路和操作是
1、將整個模型所在的box進行分條,如果按 俯檢視來看, 分成長寬相等的cell(空間中可想象cell為長方體俯檢視是邊長為cellsize的正方形),整個模型所在的box剛好完全切分成cell。程式碼中體現在 雙重for迴圈的x,y
2、左上角(或右上角或其他角)開始,從上致下,從左致右的順序,檢視所有三角形與該cell是否相交,如果相交,取出三角形在該cell空間範圍內的aabb,並作為一個span(rcSpan型別)儲存。總的是一個cell count個頭的散列表。x*y作為散列表的關鍵值,span是一個是散列表中item。並同時將三角形的area傳遞給span。
3、一個cell中可能同時與多個三角形有相交,也就是有多個span,將新增的span儲存到對應的 散列表中,並做好排序,範圍小的在表的最上方。
 

solomesh中的rcFilterLowHangingWalkableObstacles,看註釋吧

solomesh 中的rcFilterLedgeSpans,看註釋和程式碼吧

solomesh中的rcFilterWalkableLowHeightSpans,看註釋和程式碼

rcBuildCompactHeightfield,作用是將sheildheight轉為compactsheildheight,換一種儲存方式。方便後面的使用。

rcErodeWalkableArea,腐蝕能走的區域,思路和原因和平面中的 腐蝕作用型別。

rcMarkConvexPolyArea, 更改area的值,該值作為許可權使用。

SAMPLE_PARTITION_WATERSHED
       rcBuildDistanceField,計算每個span離邊緣的距離。