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)


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).


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.


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 |


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.


1
Wie ich bereits sagte, werden Animationen vermasselt.
Jari Komppa
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.