X, Y, Z-Koordinatennormale?

12

Ich bin ziemlich neu in der Entwicklung von 3D-Spielen. Wenn ich Tutorials und Beispiele durchlese, stelle ich fest, dass die X / Y / Z-Koordinaten ein bisschen rückwärts scheinen als meine erste Vermutung.

Ich hatte mir vorgestellt, dass sich die X / Y-Position einer Person, die auf einem Feld herumläuft, ändern würde, und dass sich die Z-Position einer Person ändern würde, wenn sie einen Hügel hinauf- oder hinunterspringt oder geht. Meine Annahmen scheinen falsch zu sein, weil das Gehen um ein Feld X / Z zu verändern scheint und das Springen oder Hinauf- / Hinuntergehen einen Hügel verändert das Y.

1) Sind meine Beobachtungen korrekt? 3D ist neu für mich und ich denke möglicherweise nicht richtig über die Dinge nach.

2) Welche Logik steckt hinter der horizontalen Bewegung X / Z und der vertikalen Bewegung Y?

3) Wäre es so falsch von mir, X / Y als horizontale Bewegung und Z als vertikale Bewegung im XNA Framework zu verwenden?

Corey Ogburn
quelle
Linke / rechte Koordinatensysteme. DirectX ist links, der Standardwert in OpenGL ist rechts.
Jonathan Connell

Antworten:

19

Ihre Annahmen sind nicht falsch: Jede Engine behandelt diese Koordinaten unterschiedlich. Im Allgemeinen ist X fast immer die Ost-West-Achse, aber ob Y oder Z die Höhenachse ist, variiert tendenziell. Wie ich es verstehe, haben Quake 3, die Source Engine und die Torque Engine alle Z als up. Ebenso das Modellierungswerkzeug 3DS Max. Das ist nicht ungewöhnlich.

Es ist sinnvoll, ein Koordinatensystem zu haben, das grob in absteigender Reihenfolge der Wichtigkeit geordnet ist, damit das Abflachen einer Darstellung in weniger Dimensionen leichter zu verstehen ist. Wenn Ihr Spiel beispielsweise auf einer 2D-Höhenkarte festgelegt ist, ist es sinnvoll, dass Z "auf" ist, da dann Ihre X- und Y-Koordinaten in der 3D-Weltkarte direkt mit den X- und Y-Koordinaten auf der Höhenkarte übereinstimmen. Auf der anderen Seite sind Sie es gewohnt, dass X und Y die Bildschirmkoordinaten sind, wenn Sie hauptsächlich in Bezug auf das Rendern denken (und das tun viele Spieleentwickler), sodass das Hinzufügen einer dritten Achse auf natürliche Weise in den Bildschirm hinein- oder hinausgeht.

Verwenden Sie das, was für Sie am einfachsten ist. Beachten Sie jedoch, dass jede Auswahl willkürlich ist und dass Sie möglicherweise zwischen ihnen konvertieren und mehrere Koordinatensysteme in einem Programm verwenden müssen.

Kylotan
quelle
Die anderen beiden Antworten gefallen mir eigentlich besser, aber da dies die akzeptierte Antwort ist, ist ein Hinweis darauf, dass Y vertikal und Z auf dem Bildschirm angezeigt werden, die Art und Weise, wie die meisten 3D-Hardware-APIs für die Arbeit eingerichtet sind (DirectX und OpenGL). . Wenn Sie ein eigenes System wünschen, beachten Sie dies, da möglicherweise eine Übersetzung erforderlich ist. (Etwas unsachgemäß verwendet, aber konsequent kann oft wie gewünscht funktionieren, daher die "möglicherweise" :))
James
1
Technisch gesehen wird in OpenGL standardmäßig Z angezeigt, wenn Sie die Richtung angeben. Obwohl sowohl es als auch DirectX Z parallel zur Betrachtungsrichtung haben, sind sie immer noch nicht kompatibel! Wenn Sie mit 3D arbeiten, müssen Sie in der Lage sein, durch Rotationen, Verschiebungen und Skalierungen von einem Koordinatensystem zum nächsten zu gelangen. Auf diese Weise gelangen Modelle in die Welt Standard.
Kylotan
Nur darauf hinweisen, wenn Sie mit Millionen von Dreiecken zu tun haben. Je weniger Sie tun müssen, um gegen das Koordinationssystem der Hardware anzukämpfen, desto besser. )
James
Die Vorstellung, dass "Z" in den Bildschirm hinein- oder hinausgeht oder Höhe ist, ist etwas irreführend. Es könnte einfacher sein, die Transformationen zu konzipieren. Wir übermitteln 3D / 4D-Scheitelpunktkoordinaten, die schließlich in einen 2D-Fensterraum mit einem Tiefenwert transformiert werden. Die Idee, dass eine API die 3D-Koordinaten von X, Y oder Z inhärent der "Tiefe" zuordnet, ist nicht wirklich richtig - Sie können sich eine Transformation überlegen, die die Bedeutung der Koordinaten austauscht. Am Ende dieser Transformation erhalten Sie weiterhin 2D-Fensterraumkoordinaten und einen Tiefenwert.
PatrickB
1
Ich bin mir nicht ganz sicher, wo wir uns im Übrigen nicht einig sind: Natürlich können Sie jeden gewünschten Koordinatenraum verwenden, solange Sie am Ende auf x, y, Tiefe projizieren können, aber diese Frage dreht sich in erster Linie darum, warum bestimmte Konventionen existieren für Koordinatensysteme, und die Konventionen sind zwangsläufig mit realen Konzepten verbunden.
Kylotan
6

Stellen Sie sich vor, Sie betrachten ein Stück Papier mit einem Diagramm vor sich. Die Achsen sind in der Regel unten mit X und oben in der Vertikalen mit Y gekennzeichnet. Dadurch bleibt Z die nach außen gerichtete Achse entlang des Bodens.

Es ist nur eine Konvention, aber sie wird häufig in Grafiken verwendet, in denen wir Z als die Tiefe in der Szene betrachten.

In anderen Bereichen wie CAD wäre Ihre Version üblicher.

Patrick Hughes
quelle
4

Die Idee ist, dass die x- und y-Achse gleich bleiben - y ist oben auf dem Bildschirm und x ist quer.

z - die dritte Dimension, die zurück in den Bildschirm projiziert wird (wobei die Fragen der Händigkeit hier ignoriert werden). In 3 Dimensionen wird dies etwas seltsam, aber für die Positionierung von Objekten im Bildschirmraum ist es sinnvoller.

3) Sie können, wenn Sie möchten, aber es wäre schmerzhaft und klobig. Ich würde nur raten, sich an die Z-Projekte zu gewöhnen.

Die kommunistische Ente
quelle
1

1) Ja, Ihre Beobachtungen sind korrekt.

2) Das standardmäßige globale XYZ-Koordinatensystem ist sinnvoll, wenn Sie an einen Ego-Shooter denken und durch die Augen eines Charakters in der Szene mit einer leeren (Identitäts-) Transformationsmatrix schauen. Wie beim Zeichnen eines Koordinatensystems auf einem Blatt Papier zeigt X nach rechts und Y nach oben. Entsprechend der Regel für die rechte Hand (x-> Daumen, y-> Zeigefinger, z-> Mittelfinger) zeigt Z in Ihre Richtung.

3) Es wäre nicht falsch, aber es wäre eine Abweichung von den Standards. Momentan kann ich mir drei Probleme vorstellen: (a) Nehmen wir an, Sie möchten eines Tages eine Physikbibliothek verwenden, die den Standardkoordinatenrahmen verwendet. Wenn Sie dem Standard nicht gefolgt sind, müssen Sie jetzt über die Transformation nachdenken, die Sie von Ihrer Welt in die Welt der Physik führt. Kann ärgerlich werden, wenn Sie einen Fehler beheben möchten. (b) Wenn Sie Code für jemanden freigeben oder jemanden mit der Entwicklung beauftragen möchten, muss dieser sich an Ihre Konvention gewöhnen. (c) Wenn Sie Standard-3D-Modelle verwenden, müssen Sie immer eine Transformation über ihnen haben, damit sie nicht zur Seite schauen.

Nun, um Frage 2 hinzuzufügen, es ist sooo nützlich, sich X, Y und Z nicht nur als drei Buchstaben vorzustellen, sondern als richtig, aufwärts und rückwärts. Jedem Zeichen in der Szene ist ein lokales Koordinatensystem zugeordnet, und in den lokalen Koordinatenrahmen ist X immer richtig, Y ist nach oben und Z ist nach hinten. Wenn Sie dies einmal haben, können Sie jetzt die Vektoren, die Sie ausdrucken, verstehen oder Ihre Algorithmen auf sinnvolle Weise schreiben. Angenommen, Sie haben zwei Zeichen A und B und möchten etwas tun, wenn eines davon dem anderen zugewandt ist. Sie können einfach die Position von B im Koordinatenrahmen von A (Ta ^ -1 * p_b) finden, den erhaltenen Vektor betrachten und sehen, ob Z (rückwärts) negativ ist und X (rechts) und Y (oben) klein sind, weil dieser Vektor gibt an, wie viel Rückwärts, Rechts und Hoch B in Bezug auf A ist.

Gazihan Alankus
quelle