Optimierung der Kollision

Da wir für die Kollisionsberechnung vier Rays verwendet haben, die in jedem Frame Schnittpunkte zu allen Objekten berechnen, konnte man an dieser Stelle gut ansetzen. Wir haben die Objekte, mit denen kollidiert werden kann, nun nicht in einem einfachen Array, sondern in einer Octree-Datenstruktur gespeichert. Vor der Berechnung der Schnittpunkte können wir nun im Octree suchen, welche Objekte wir in einer bestimmten Richtung und innerhalb einer gewissen Distanz überhaupt mit unseren Kollisions-Rays schneiden können. Dafür kann man die Parameter der Kollisions-Rays an den search-Aufruf des Octrees übergeben und bekommt als Rückgabe die Objekte die, für die weitere Kollisionsberechnung in Frage kommen.

octreeObjects = octree.search( rayorigin, rayfarplane, true, raydirection );
intersections = raycaster.intersectOctreeObjects(octreeObjects);

Dabei sind:
rayorigin der Startpunkt des Kollisions-Rays
rayfarplane die Länge des Kollisions-Rays
true die Option, nach Faces (nicht nur nach ganzen Meshes) zu filtern
raydirection die Richtung des Kollisions-Rays

Der Octree berücksichtigt dabei sogar die einzelnen Faces und nicht nur Meshes als ganzes. Durch diesen Schritt konnten wir, abhängig von der Komplexität des Levels, bis zu 20 frames per second gutmachen.

results matching ""

    No results matching ""