Koordinatensystem von Z-up nach Y-up ändern

8

Das Koordinatensystem von Blender unterscheidet sich von dem, was ich gewohnt bin, da Z anstelle von Y nach oben zeigt. Was wäre der einfachste Weg, alle Weltdaten zu konvertieren (damit alle Animationen, Texturkoordinaten usw. noch funktionieren), sodass Y. zeigt nach oben?

Klärung:

Objektpositionen werden als Matrizen definiert, daher ist es keine triviale Aufgabe, nur die Translations- / Rotations- / Skalierungsinformationen in Matrizen zu wechseln. (Zumindest scheint es mir keine triviale Aufgabe zu sein)

Jari Komppa
quelle
Vermisse ich etwas oder könnten Sie einfach die Z-Koordinaten und die Y-Koordinaten wechseln?
Die kommunistische Ente
Klarstellung zur Frage hinzugefügt.
Jari Komppa
Ist eine Objektpositionsmatrix nicht nur eine 1x4-Spaltenmatrix? Wäre es nicht einfach, die Elemente zu wechseln? Ich habe Matrizen behandelt, aber nicht in Gamedev-spezifischen Begriffen. : p
Die kommunistische Ente
Dies sind flache 4x4-Matrizen mit Translation, Rotation und Skalierung.
Jari Komppa
1
Wenn Sie Ihr eigenes Python-Skript verwenden, können Sie bpy_extras.io_utils.axis_conversion verwenden (siehe: blender.org/documentation/blender_python_api_2_66a_release/… ). Afaik, Unterstützung für 'non Z up'-Koordinatensysteme im Mixer ist geplant, aber noch nicht implementiert (2.66a).
Exilyth

Antworten:

2

Warum können Sie die Rotationsmatrix nicht einfach so ausrichten, dass sie den ersten Teil Ihrer Weltmatrix korrekt ausrichtet?

Wenn Sie es beim Laden reparieren möchten, erstellen Sie die Rotationsmatrix, um sie korrekt auszurichten (dh 90 Grad um die X-Achse). Wenden Sie dies auf alle Scheitelpunkte an und ändern Sie dann alle vorhandenen Matrizen in (Drehung * vorhanden).

Jason Goemaat
quelle
Dies könnte funktionieren - wenden Sie beim Export eine 90-Zoll-Rotationsmatrix auf alles an.
Jari Komppa
Nun, ich fragte nach dem einfachsten Weg.
Jari Komppa
7

Stimmen Sie mich ab, wenn ich falsch liege, aber ich verstehe nicht, warum die Leute empfehlen, y und z zu tauschen. Das würde Ihr Koordinatensystem von Rechtshänder zu Linkshänder machen. Versuchen Sie dies selbst, tauschen Sie y und z aus und richten Sie die Achse so aus, dass x nach rechts und y nach oben zeigt. Sie werden sehen, dass z in die entgegengesetzte Richtung zum Original zeigt (vom Bildschirm weg). Der richtige Weg ist, sich um die x-Achse zu drehen, die y und z vertauscht, und dann das Vorzeichen des letzten z umzukehren.

Ich denke, die einfachere Lösung besteht darin, Ihre Modelle mit einem höheren Wert zu erstellen.

5ound
quelle
1
Nun, wie man die Matrizen so fixiert, dass "das Vorzeichen des letzten z" invertiert wird.
Jari Komppa
1
Sie möchten Ihre Matrizen nicht reparieren, Sie möchten Ihre Daten reparieren,
dh
1
Die Animationsdaten werden jedoch als Matrizen gespeichert, sodass sie sich in die falsche Richtung bewegen. Die Objekte zeigen also in die richtige Richtung, Animationen jedoch nicht.
Jari Komppa
5

Wie Genosse Ente vorschlägt, können Sie einfach Y und Z tauschen. Wenn Sie dazu eine Matrix benötigen, verwenden Sie diese:

| 1 0 0 |
| 0 0 1 |
| 0 1 0 |

oder in homogenen Koordinaten

| 1 0 0 0 |
| 0 0 1 0 |
| 0 1 0 0 |
| 0 0 0 1 |
ggambett
quelle
1

Wenn Ihre Matrix ist:

x
y
z
w

Warum dann nicht:

temp = y
y = z
z = temp

Oder welche Swap-Methode Sie wollen.

Die kommunistische Ente
quelle
0

Wenn Sie Ihre Netze mit dem von Ihnen verwendeten Netzladecode laden, wechseln Sie einfach die Z- und Y-Werte. Das Netz wird dann im entsprechenden Koordinatenraum in Ihr Spiel geladen und Sie können alles tun, was Sie möchten (Rotationen, Übersetzungen usw. anwenden). Es ist eine ähnliche Situation, die ich mit 3DS Max hatte.

Ray Dey
quelle
1
Wie ich bereits sagte, werden Animationen vermasselt.
Jari Komppa