Ausgangspunkt für unsere Überlegungen ist das Reflektionsgesetz, welches Ihnen vielleicht noch aus der Schulzeit vertraut ist:
Einfallswinkel = Ausfallswinkel
Zentrales Element für die Beschreibung einer Fläche bzw. einer Ebene (Fläche mit unendlicher Ausdehnung) ist der sogenannte Normalenvektor. Ein Normalenvektor steht immer senkrecht auf einer Fläche (Ebene) oder Linie und hat immer eine Länge von 1. Den Normalenvektor einer Fläche bezeichnet man im Allgemeinen als Flächennormale. Auf die Berechnung von Flächennormalen werden wir später noch ausführlich eingehen. Bei einer achsenparallelen Kollision ist die Flächennormale immer parallel oder antiparallel zur x-, y- oder z-Achse orientiert. Entsprechend liegt die Kollisionsfläche in der yz-, xz- oder xy-Ebene. Die Flug- bzw. Bewegungsrichtung nach einer Kollision berechnet sich für diese drei Fälle besonders einfach, denn es ändert sich lediglich das Vorzeichen derjenigen Komponente, die in Richtung oder Gegenrichtung des Normalenvektors liegt:
// Kollision in xz-Ebene; n=(0, 1, 0) oder n=(0, -1, 0)
// Ebene hat 2 Seiten!
// Bewegungsrichtung nach Kollision:
Bewegungsrichtung.x = Bewegungsrichtung.x;
Bewegungsrichtung.y = -Bewegungsrichtung.y;
Bewegungsrichtung.z = Bewegungsrichtung.z;
// Kollision in xy-Ebene; n=(0, 0, 1) oder n=(0, 0, -1)
// Bewegungsrichtung nach Kollision:
Bewegungsrichtung.x = Bewegungsrichtung.x;
Bewegungsrichtung.y = Bewegungsrichtung.y;
Bewegungsrichtung.z = -Bewegungsrichtung.z;
// Ebene hat 2 Seiten!
// Bewegungsrichtung nach Kollision:
Bewegungsrichtung.x = Bewegungsrichtung.x;
Bewegungsrichtung.y = -Bewegungsrichtung.y;
Bewegungsrichtung.z = Bewegungsrichtung.z;
// Kollision in xy-Ebene; n=(0, 0, 1) oder n=(0, 0, -1)
// Bewegungsrichtung nach Kollision:
Bewegungsrichtung.x = Bewegungsrichtung.x;
Bewegungsrichtung.y = Bewegungsrichtung.y;
Bewegungsrichtung.z = -Bewegungsrichtung.z;
// Kollision in yz-Ebene; n=(1, 0, 0) oder n=(-1, 0, 0)
// Bewegungsrichtung nach Kollision:
Bewegungsrichtung.x = -Bewegungsrichtung.x;
Bewegungsrichtung.y = Bewegungsrichtung.y;
Bewegungsrichtung.z = Bewegungsrichtung.z;
Das Anwendungsgebiet für diese einfachste Art der Kollisionsantwort ist sehr begrenzt. Sie kann aber in Verbindung mit achsenausgerichteten Bounding-Boxen (AABB) eingesetzt werden. Achsenausgerichtet bedeutet, dass die x-, y- und z-Achsen der AABB mit den x-, y- und z-Achsen des Weltkoordinatensystems übereinstimmen. Man definiert für jedes Objekt eine AABB und kann für den Fall einer Kollision die neuen Bewegungsrichtungen anhand der Kollisionsflächen der beiden Boxen bestimmen. Vereinfacht wird die Angelegenheit dadurch, dass beide Kollisionsflächen immer in derselben Ebene liegen.