Beste / efficiënte manier om een 3D Collision te implementeren

Ik heb al een op 2D gebaseerd botsingssysteem geprogrammeerd voor een vorige game. Het was mijn eerste botsingssysteem en het was was lelijk. Ik was op zoek naar een botsing tussen objecten door alle objecten met alle objecten te controleren. Ik heb al gehoord over een rastersysteem met cellen waar een object alleen de botsing met andere objecten uit zijn huidige cel (len) zal zien. Is het echt een goede manier om een aanrijding te controleren?

Ik “zou graag een goede techniek willen hebben om door al mijn items in een 3D-wereld te lopen.

Antwoord

Je “zult een goed algoritme nodig hebben voor het partitioneren van de ruimte, dat vaak gebruikt wordt in 3D zijn octrees .

Daarna zou je modellen etc kunnen omringen met bounding sheres waarin ze netjes passen omdat een botsing tussen bounding sheres heel gemakkelijk te berekenen is. Nadat u weet dat twee begrenzende bollen met elkaar in botsing komen, kunt u iteratief de begrenzende bollen kleiner maken en begrenzende bollen toevoegen om het object erin bedekt te houden, of een ander slim algoritme gebruiken om botsingen tussen twee complexe objecten te berekenen.

Zie deze afbeelding: meerdere begrenzende bollen

Antwoord

Uiteindelijk denk ik dat het antwoord op uw vraag hangt af van de behoeften van uw specifieke toepassing, aangezien er geen one-size-fits-all oplossing is. Hoewel er een aantal goede bronnen op internet zijn, bespaart u uzelf veel tijd en frustratie door het oppikken van Christer Ericson “s Real-time Collision Detection , die een grote verscheidenheid aan technieken en algoritmen in detail beschrijft, met bijvoorbeeld C ++ code.

Het hielp me om kleine stapjes te zetten voordat ik probeerde een groots systeem te bouwen. Een functie schrijven om te bepalen of een punt in een vlak ligt, de n als een punt in een driehoek staat, als een straal in een driehoek staat, enz. Vervolgens overgaan op statische tests van verschillende convexe lichamen: AABB versus driehoek, enz. Na verloop van tijd werden dingen die ondoordringbaar leken (vergeef de woordspeling) aanvankelijk minder ontmoedigend. Hier is een lijst van een groot aantal tests, met voorbeeldcode:

http://www.realtimerendering.com/intersections.html

In de tussentijd, aangezien ik weet dat niet iedereen zomaar 70-80 $ voor een boek kan uitkeren, zijn hier enkele termen waar je misschien naar wilt kijken:

  • Ruimtelijke partities, octrees, quadtrees, BSP-bomen
  • BIH-bomen
  • Bounding volumes en bounding volume hiërarchieën
  • Discrete vs. continue botsingsdetectie
  • Scheidingsas-stelling
  • GJK-algoritme

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *