Lösung
Modellierung des 3D-Objekts

Um die späteren Berechnungen und die Rotation des Objekts zu vereinfachen, sollte das Objekt mit Hilfe einer Punktliste der Eckpunkte modelliert werden.
Die Verwendung von Dreiecken für die Oberfläche stellt sicher, dass alle Eckpunkte innerhalb einer Ebene liegen.
Es ist empfehlenswert, dass der Mittelpunkt des Objekts im Koordinatenursprung liegt, um später die Rotation (um die Achsen) zu vereinfachen.

Beispiel:

P' = {(0, 0, -3), (2, 0, 0), (0, 2, 0), (-2, 0, 0), (0, -2, 0), (0, 0, 3)}

Ergebnis:
Ergebnis Punktliste

Rotation des Objekts und Hinzufügen der Oberflächen

SchiebereglerAls nächstes sollte - noch vor dem Einfügen der Oberflächen - die Rotation des Objekts ermöglicht werden. Im folgenden Beispiel wird eine Rotation um alle 3 Achsen des Koordinatensystems ermöglicht.
Dazu werden zunächst 3 Schieberegler für die Rotationswinkel platziert: \(\alpha\), \(\beta\) und \(\gamma\).
Mit dem Befehl "Drehe()" kann dann die gesamte Punktliste der Eckpunkte in Abhängigkeit der Rotationswinkel rotiert werden - hier je 1 mal pro Achse.

Beispiel:

P'' =Drehe(P', α, zAchse)
P'''=Drehe(P'', β, yAchse)
P   =Drehe(P''', γ, xAchse)

Ergebnis:
Rotierte Eckpunkte

Erst jetzt sollten die Oberflächenpolygone hinzugefügt werden. Als Grundlage hierzu wird die letzte Punktliste benutzt - also jene, die um alle 3 Achsen rotieren kann.
Beim Hinzufügen der Polygone entstehen automatisch Einzelpunkte, die an die verwendete Punktliste gebunden sind. Daher können/sollten die Punktlisten selbst jetzt aus der Grafikansicht ausgeblendet werden.
Für die verschiedenen Oberflächen sollten verschiedene Farben genutzt und die Transparenz entfernt werden.

Beispiel/Ergebnis:
Oberflächen

Dieses Objekt kann jetzt mit Hilfe der Schieberegler frei in alle Richtungen gedreht werden.

Festlegen von Blickpunkt und -richtung

Hierfür sollten zwei weitere Punkte gesetzt werden, die - durch einen Vektor verbunden - die Blickrichtung definieren.
Der Startpunkt (Beobachterposition) sollte außerhalb des Objekts liegen, der Zielpunkt kann (aber nicht muss) innerhalb liegen. Sinnvoll ist es, den Zielpunkt zu fixieren und den Startpunkt frei verschiebbar zu lassen.

Beispiel/Ergebnis:
Blickrichtung hinzugefügt

Mit dem Befehl

SetzeAnsichtsrichtung(<Blickrichtungsvektor>)
wird die Ansicht in GeoGebra entlang des eben definierten Vektors ausgerichtet. So lässt sich später die Wirksamkeit des Backface Culling gut überprüfen.

Beispiel/Ergebnis:
Ansicht entlang Blickrichtung ausgerichtet

Berechnung der Normalenvektoren

Gesucht werden nun die Vektoren, die die Lage der Oberflächen im Raum eindeutig beschreiben und daher auf diesen senkrecht stehen (Normalenvektoren).
Mit Hilfe der entsprechenden Tipps lässt sich die Berechnung der Normalenvektoren über das Skalarprodukt herleiten: Die Normalenvektoren sind das Resultat des Vektor-/Kreuzprodukts zweier Vektoren, die die jeweilige Oberfläche aufspannen.
Wichtig dabei: Die Drehrichtung beachten (rechtsdrehend), so dass die resultierenden Normalenvektoren "aus dem Objekt heraus" zeigen.
\( \vec{n_1} = \overrightarrow{AB} \times \overrightarrow{AC}\)
Diese Normalenvektoren müssen nun für jede der Oberflächen in GeoGebra hinzugefügt werden.

Beispiel:

n_1 = Kreuzprodukt(Vektor(A,B), Vektor(A,C))

Ergebnis:
Normalenvektor hinzugefügt

Sichtbarkeit der Oberflächen

Eine Oberfläche ist dann sichtbar, wenn ihr Normalenvektor grob entgegengesetzt zum Blickrichtungsvektor verläuft. In diesem Fall ist das Skalarprodukt dieser beide Vektoren negativ.
Dieser Zusammenhang kann als Bedingung für die Sichtbarkeit der Oberfläche verwendet werden:
Falls \( \vec{n} \cdot \vec{v} < 0\), dann ist die entsprechende Oberfläche sichtbar.

Diese Bedingung muss im Eigenschaftsdialog des jeweiligen Oberflächenpolygons unter "Bedignung, um Objekt anzuzeigen" eingetragen werden:

Skalarprodukt(n_1, v) < 0

Ergebnis:
Bedingung für Sichtbarkeit

Auch dies muss für jede Oberfläche erledigt werden.

Abschließend können die Eckpunkte noch ausgeblendet werden. Bei Rotation des Objekts (über die Schieberegler) oder Veränderung des Blickrichtungsvektors wirkt nun das Backface Culling in Echtzeit.
Zur Kontrolle kann das rotierende Objekt einmal entlang des Blickrichtungsvektors und einmal aus einer deutlich anderen Richtung, etwa entgegengesetzt dem Blickrichtungsvektor, betrachtet werden.

Extras

Anregungen für Erweiterungen des Demonstrationsmodells (Lösungen siehe ggb-Dateien unten):

  • Schaltfläche zum Starten/Stoppen der Rotation (GeoGebra-Skripting notwendig)
  • Schaltfläche zum Zurücksetzen der Ansichtsrichtung entlang des Blickrichtungsvektors (wenig GeoGebra-Skripting notwendig)
  • Kontrollkästchen zum Ein- und Ausblenden der Normalenvektoren
  • Produktion von Videos/Animationen aus zwei Ansichtsrichtungen gleichzeitig

Endergebnis

ggb-Dateien zum Download:

Zuletzt geändert: Donnerstag, 8. September 2022, 10:34