Wie ist die Transformationsreihenfolge bei Verwendung der Transformationsklasse?


7

Ich verwende derzeit Unity 5.5 zum ersten Mal in einem Projekt und habe einige Probleme mit Transformationen.

Ich habe einen Hintergrund in allgemeineren 3D-Grafiken, was bedeutet, dass ich zum Verwalten von Szenendiagrammen und Matrixtransformationsreihenfolgen verwendet werde.

Mein größtes Problem beim Wechsel zu Unity und bei Verwendung der integrierten Transformationsklasse ist, dass ich keine Informationen zur Transformationsreihenfolge von Rotation, Lokalrotation, Skalierung, Ortsskalierung, Position und Lokalposition finden kann.

Ich kann keine guten Informationen darüber finden und es macht mich ein bisschen verrückt.

TL; DR: Wie ist die Transformationsreihenfolge der Transform-Klasse?


Ich vermute, sie folgen der Konvention, die die meisten Game-Engines verwenden, Translation * Rotation * Scaleund mit den lokalen Dingen würde ich raten(LocalTranslation * WorldTranslation) * (LocalRotation * WorldRotation) * (LocalScaling * WorldScaling)
Soapy

Antworten:


9
  1. Lokale Skala ( localScale)

  2. Lokale Rotation ( localRotation)

    Wenn Sie Euler-Winkel verwenden, werden sie als Rotationen um die Weltachsen in der folgenden Reihenfolge angewendet :

    1. Rolle (Drehung um die Welt-Z-Achse)
    2. Pitch (Drehung um die Welt x Achse)
    3. Gieren (Drehung um die y-Achse der Welt)


    (Oder wenn Sie lieber an Rotationen denken, die um lokale Achsen stattfinden, ist es ...)

    1. Gieren (Drehung um die lokale y-Achse)
    2. Pitch (Drehung um die resultierende lokale x-Achse)
    3. Rollen (Drehung um die resultierende lokale z-Achse)
  3. Lokale Übersetzung ( localPosition)

  4. Die lokalen Transformationen der Eltern in derselben Reihenfolge wie oben

Wiederholen Sie diesen Vorgang bis zur Wurzel der Transformationshierarchie.

Die nicht-lokale Parameter, lossyScale, rotation, position, den Nettoeffekt dieser gesamten Transformationskette repräsentieren ( lossyScaleeine „verlustbehaftete“ Näherung ist , da, als wir mehrere Skalen und Drehungen kombiniert haben, wird die resultierende Maßstab nicht als Achse justierten garantiert , so dass es möglicherweise nicht mehr gut durch einen Vektor dargestellt wird3)


2

Schauen Sie sich das Inspector-Tutorial hier an: https://unity3d.com/learn/tutorials/topics/interface-essentials/inspector

und werfen Sie einen Blick hier https://docs.unity3d.com/Manual/UsingTheInspector.html

Sie haben alle visuell benötigten Informationen über:

  • Transformationsposition (X, Y, Z)
  • Transformation der Rotation als Eulerwinkel (X, Y, Z)
  • Transformationsskala (wieder X, Y, Z)

4
Obwohl diese Referenzen nützlich sind, beschreibt diese Antwort nicht die Reihenfolge, in der Transformationen angewendet werden (was wichtig ist, da eine Reihe von Transformationen nicht kommutativ sind - die Ausführung derselben Operationen in einer anderen Reihenfolge kann zu unterschiedlichen Ergebnissen führen). Unity hat eine bestimmte Konvention für die Reihenfolge, in der sich die verschiedenen Transformationseigenschaften stapeln.
DMGregory

1

Sie können das ausdrucken localToWorldMatrix. Wenn die Spalte ganz rechts / 4. enthält transform.position, wissen Sie, dass die Übersetzung zuletzt angewendet wurde, d. H.

localToWorldMatrix = translationMatrix * rotationMatrix !=  rotationMatrix * translationMatrix
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.