Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

19.07.2006, 13:30

3D-Ebene in 2D-Ansicht bringen

Hallo liebe Community

Ich möchte eine Ebene aus dem 3D-Raum als 2 dimensionale Abbildung darstellen. Die Ebene liegt mir in Form eines Urprungspunktes, 2 Richtungsvektoren, als auch dem Normalenvektor vor. Dabei soll die Blickrichtung mit dem Normalenvektor übereinstimmen.

Klingt ganz einfach dachte ich, aber ist wie immer komplizierter, als es aussieht. Die Ebene liegt ja erstmal frei im Raum. Zusätzlich befinden sich gewisse Punkte im 3D-Raum. Diese Punkte sollen auf die Ebene abgebildet und die Ebene mittels orthogonaler Ansicht so dargestellt werden, dass man von oben "draufschaut" (also wie beschrieben die Richtung des Normalenvektors)

Die Lösung, die mir dazu einfällt, heißt halt Rotation. Aber denke ich da zu kompliziert? Gibt es vielleicht eine einfachere Lösung?

Gruß
Neron

big_muff

Alter Hase

Beiträge: 460

Wohnort: Schweiz

Beruf: Informatikstudent (4. Semester)

  • Private Nachricht senden

2

19.07.2006, 13:35

Irgendwie verstehe ich dich nicht richtig. Geht's hier eigentlich um DirectX oder irgendwas Raytracing-artiges.
So wie ich das sehe hast du eine Ebene und willst diese als Projektionsebene verwenden? In dem fall wäre die Lösung unter DirectX Kameramatrix???
Nur Idioten halten Ordnung, ein Genie beherrscht das Chaos.[size=7]

[/size]HardFate - Ein Start, Ein Ziel, Viele Wege[size=7]

[/size]Ein Mitglied der VEGeiCoUndGraSonMaWiGeS Bewegung.

3

19.07.2006, 13:37

Ich arbeite mit OpenGL, hatte ich vergessen zu sagen. Sorry

Zitat von »"big_muff"«

So wie ich das sehe hast du eine Ebene und willst diese als Projektionsebene verwenden?

Ja, genau so soll's sein :)

Steven77

Alter Hase

Beiträge: 515

Wohnort: Münster - Gievenbeach

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

19.07.2006, 13:48

Als Lösung fällt mir direkt mal "Starrkörpertransformation" ein: Du bildest dir eine Transformationsmatrix für die Kamera, so dass deine Ebene quasi auf die Near-Plane gemappt wird:
n sei der Normalenvektor der Ebene = gewünschte Blickrichtung.
Was du noch brauchst ist ein Fokuspunkt in der Ebene, nennen wir ihn p.
Dann könnte p-n die Kameraposition sein. Die Entfernung spielt bei orthogonaler Projektion keine Rolle.
Der Aufwärtsvektor ist vielleicht einer deiner Richtungsvektoren der Ebene, z.b. a.
Dann bildest du dir das Kamerakoordinatensystem wie folgt:
z = n
y = a - dot(n, a) * look
x = cross(y, z)
Die Vektoren müssen noch normalisiert werden und stellen dann die Rotationsvektoren der Transformationsmatrix dar.
Für die Translation der Transformationsmatrix nimmst du einfach den (negativen) Positionsvektor der Kamera p-n.
Kommen Sie nie mit einem Schwert zu einer Schießerei.

5

19.07.2006, 14:40

Ok, erstmal vielen Dank Steven - mal gucken, ob ich das richtig gerafft habe.
Also zuerst bilde ich mit Hilfe der Vektoren ein rechtwinkliges Koordinatensystem. Dann bewege ich mich zu dem Punkt, an dem der Normalenvektor (ausgehend von p auf der Ebene) endet und richte die Kamera so aus, dass ich entegegen des Normalenvektors blicke. Stimmt das soweit?

Wenn ja, wäre meine nächste Frage, ob ich dann die Funktion gluOrtho2D anwenden kann, um die Abbildung zu machen?

Werbeanzeige