detour TopologyOptimization

dtCrowd::update在updateMoveRequest後會執行updateTopologyOptimization

----------

 

dtCrowd::updateTopologyOptimization(dtCrowdAgent**agents,constintnagents,constfloatdt):

強制位移可能導致agent position不在corridor裏面了,

久而久之會導致corridor不是最優的了,

這個函數用來re-optimizethe corridor.

 

 

首先把符合條件的agent加入到queue裏面

然後遍歷queue執行optimizePathTopology

 

====

dtPathCorridor::optimizePathTopology(dtNavMeshQuery*navquery,constdtQueryFilter*filter)

還是先走

initSlicedFindPath

updateSlicedFindPath

finalizeSlicedFindPathPartial

 

dtMergeCorridorStartShortcut相當於NavMeshTesterTool裏面的fixupCorridor

總得來說就是把visited裏面有而path裏面沒有的加到path裏面去

 

 

 

 

 

dtMergeCorridorStartShortcut(dtPolyRef*path,constintnpath,constintmaxPath,

                                 constdtPolyRef*visited,constintnvisited):

 

首先path和visited從後往前找path[i]== visited[j]

constintreq= furthestVisited;

if(req<= 0)

    returnnpath;

當是0的時候直接返回

已經找到了visited的第一個了

 

後面的操作就是把visited裏面的furthestVisited之前的部分

與path裏面furthestPath以及後面的部分

連接起來

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章