Unter der Annahme, dass Deine Objekte aus Dreiecken bestehen:
Jedes Dreieck legt eine Ebene fest.
Deine Schnittebene ist, wie der Name schon sagt, ebenfalls eine Ebene.
Zwei Ebenen kann man schneiden, und dann gibt es drei mögliche Fälle:
1. Sie sind parallel, aber verschieden -> kein Schnitt
2. Sie sind gleich -> dann liegt Dein Dreieck in der Schnittebene (musst Du definieren, was Du dann machen willst)
3. Sie schneiden sich in einer Geraden ->
möglicher Schnitt zwischen Ebene und Dreieck
Fall 3 ist interessant.
Die Gleichung der Geraden kannst Du ermitteln, sie ergibt sich aus Ineinander-Einsetzen der beiden Ebenengleichungen (eine in Hessescher Normalform, die andere in der Parameterform
Stützvektor + x*
u + y*
v). Siehe
Wikipedia.
Da Du aber in Wirklichkeit ein Dreieck betrachtest und keine Ebene, musst Du diese Schnittgerade auf das Dreieck zurechtschneiden (clippen). Liegt sie komplett außerhalb des Dreiecks, dann gibt es keinen Schnitt. Nun hast Du die tatsächliche Schnittlinie.
Die meisten Dreiecke werden in Fall 3 enden, weil Ebenen sich ja immer schneiden, wenn sie nicht zufällig parallel sind.
Also sollte man das beschleunigen.
Ansätze zur Beschleunigung:
- Dreiecke des Objekts in kd-Baum oder andere räumliche Datenstruktur packen
- Hierarchischen Schnitttest zwischen Ebene und Bounding-Boxen der Knoten in Deiner Datenstruktur durchführen, erst ganz am Ende mit den Dreiecken selbst