Vilka tekniska utmaningar ställs ni inför, hur reagerar ni på dem osv.? I bästa fall kan vi byta en del tips.
Själv börjar jag med att tala varmt om
quad tree!
Quad tree är användbart när man gör spatial detektering av saker som är spridda längs ett plan (t.ex. terräng), eftersom man via träddatastrukturen snabbt kommer åt endast de föremål som är närmast. Det funkar genom att dela in terrängen i fyra partitioner/rektanglar som vardera refererar t.ex. de polygoner som finns inom varje rektangel. De rektanglar som innehåller många polygoner delas på samma sätt i ännu mindre rektanglar tills man når en viss upplösning.
Jag implementerade quad tree och här kommer lite siffror som visar hur värt det var i mitt fall. I antal detekteringsanrop kunde det se ut så här, för detektion av 3D-figur i en jämnt fördelad terräng:
Spelfigur inom partition:
660 calls to "DetectConv( Vector..."
0 calls to "DetectConv( Line..."
36 calls to "DetectArb( Vector..."Spelfigur mellan två partitioner:
1380 calls to "DetectConv( Vector..."
660 calls to "DetectConv( Line..."
72 calls to "DetectArb( Vector..."Antalet anrop minskade enormt efter att ha delat alla partitioner 3 gånger, och det här var ändå "brute force" utan vidare optimering:
Spelfigur inom partition:
72 calls to "DetectConv( Vector..."
0 calls to "DetectConv( Line..."
36 calls to "DetectArb( Vector..."Spelfigur mellan två partitioner:
150 calls to "DetectConv( Vector..."
72 calls to "DetectConv( Line..."
72 calls to "DetectArb( Vector..."Summa kardemumma är alltså - implementera quad tree! I alla fall om ni har terräng med hög/varierande detaljnivå. Kan också vara intressant att jämföra quad tree med en vanlig grid, som kan vara svårare att anpassa till polygoner av olika storlekar som överlappar partitioner.