Schnittpunktberechnung: Strahl schneidet Ebene

Bei der Durchführung von Kollisions- und Treffertests gilt es abzuwiegen zwischen der Genauigkeit und dem damit verbundenen Rechenaufwand. Größte Genauigkeit erreicht man, indem man die Tests mit den einzelnen Dreiecksflächen des 3D-Rendermodells oder mit denjenigen des 3D-Kollisionsmodells (Mesh mit kleinerem Polygon Count; es wird weniger Rechenzeit für die Durchführung der Kollisions- und Treffertests benötigt) durchführt. Bevor wir uns jedoch mit diesen Tests befassen können, müssen wir uns zunächst einige mathematische Grundlagen erarbeiten.


Schritt 1 besteht nun darin, die Ebene zu definieren, in der ein Dreieck eingebettet ist. Von besonderem Interesse ist für uns die sogenannte Normalenform einer Ebene:

















Mithilfe der Normalenform kann ohne großen Rechenaufwand überprüft werden, ob sich ein Punkt innerhalb der Ebene befindet. Voraussetzung hierfür ist, dass wir zum einen den Normalenvektor der Ebene kennen (Flächennormale n) und uns zum anderen mindestens ein weiterer Punkt bekannt ist, der sich ebenfalls in der Ebene befindet.
Der uns bekannte Punkt in der Ebene wird durch den Vektor s beschrieben, der zu überprüfende Punkt durch den Vektor p. Sollte nun der zu testende Punkt ebenfalls in der Ebene liegen, dann gilt gleiches für den Differenzvektor aus p und s. Liegt der Differenzvektor in der Ebene, ist er damit senkrecht zur Flächennormale orientiert und das Skalarprodukt beider Vektoren ist gleich Null.

Wie die nachfolgende Abbildung zeigt, kann man unter Zuhilfenahme der Normalenform recht einfach überprüfen, ob und wo ein von einem Spieleobjekt ausgehender Strahl (bsp. ein Laser-Strahl) die Ebene schneidet. Der Ausgangspunkt des Strahls (unser Spieleobjekt) wird hierbei durch den Ortsvektor o beschrieben.

















 





Das Ziel der Berechnungen besteht darin, den Skalierungsparameter a zu bestimmen, der den Richtungsvektor des Strahls (kurz die Strahlrichtung) in der Art verlängert, dass dieser genau in der Ebene endet. Hat das Skalarprodukt aus Strahlrichtung und Flächennormale <r|n> den Wert null, dann verläuft die Strahlrichtung parallel zur Ebene. Alle weiteren Berechnungen können abgebrochen werden, da kein Schnittpunkt existiert.
Befindet sich der Ausgangspunkt des Stahls bereits in der Ebene, dann hat der Parameter a einen Wert von null. In diesem Fall liegt der Hilfsvektor h in der Ebene, und das Skalarprodukt aus Hilfsvektor und Flächennormale <h|n> ist ebenfalls gleich null.

Interessante Artikel