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

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

1

23.02.2013, 05:46

Achsenmatrix

Angenommen man hat ein Flugzeug, dass man fliegt. Es gibt eine Box die die Winkelrotation in Grad anzeigt (Pitch, Roll, Yaw).
Theoretisch könnte man diese über die Rotation des Objekts herausfinden. Das funktioniert so aber nicht, da die Angaben global sind und wenn man in eine andere Richtung fliegt ist ein Rollen des Flugzeugs nicht gleich
eine Drehung um die globale Y-Achse (nur um die lokale). Um diese herauszufinden brauche ich eine Achsenmatrix die ich folgendermaßen berechne:

Quellcode

1
2
3
Mat3 rot = new Mat3(Vec3.Cross(Rotation.GetForward(), Rotation.GetUp()), Rotation.GetUp(), Rotation.GetForward());
Quat rotQ = rot.ToQuat();
Quat local = rotQ * Rotation;


Ich erzeuge die Achsenmatrix (rechts, oben, vorne) und wandle sie in ein Quaternion um.
Jetzt weiß ich leider nicht mehr weiter. Ich nehme an ich muss den/das Quaternion mit der Rotation (auch quaternion) multiplizieren, dann kann ich aus dem Produkt die korrekten lokalen Winkel auslesen?

Kann das jemand überprüfen ob das so stimmt.
Danke im Voraus

mfg

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

23.02.2013, 09:01

1) Wofür brauchst du die Winkel?
2) Wie platzierst du das Flugzeug, ohne die Winkel sowieso schon zu kennen?

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

3

23.02.2013, 15:43

Ehrlich gesagt braucht das jemand den ich kenn und ich versuch ihm zu helfen.
Also ich mag die Pitch/Roll Werte, unabhängig vom Yaw Wert, also sozusagen dass ich Winkel aus einem Koordinatensystem bekomme bei dem die y-Achse immer nach vorne geht und x nach rechts.

ICh glaub ich hab nen Fehler gemacht die Matrix müsste dann so aussehen:

Quellcode

1
2
3
Vec3 fwd = Rotation.GetForward();
fwd.Z = 0; fwd.Normalize();
Mat3 rot = new Mat3(Vec3.Cross(fwd,new Vec3(0,0,1)), new Vec3(0,0,1), fwd);


Wenn die y'-Achse immer vorne sein soll, ist sie abhängig von der Rotation des Flugzeuges.
Dann ist die y'-Achse die Front mit z= 0, da die y'-Achse ja 90° zu (0,0,1) liegen muss und damit nicht steigen oder fallen darf.

und die x'-Achse ist das Punktprodukt aus y' und 0,0,1. So hat man dann einen Pitch/Roll Wert relativ zur aktuellen Rotation, d.h. im Tiefflug gibt es eine Rotation um die X'-Achse, da die Ebene x'-y' auf z=0 liegt.

Das war mein Ziel. Nun möchte ich wissen ob das so ok ist und ob ich jetzt aus (Rotation * Quaternion) oder andersrum (?) die Winkel zum neuen Koordinatensystem auslesen kann.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

23.02.2013, 16:05

Nochmal: Wofür brauchst du diese Winkel? Und woher kommt dieses "Rotation" Ding, wenn du die Winkel nicht kennst?

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

5

23.02.2013, 16:53

Also. ich will die Winkel um festzustellen wie das Flugzeug gerade geneigt ist. Allerdings unabhängig von der Richtung also z.B. 30° um die Achse nach vorne (die die y'-Achse sein soll).
Wenn ich das globale Koordinatensystem verwende, erhalte ich bei unterschiedlichen Flugrichtungen unterschiedliche Pitch/Roll Werte, da die Drehung um die globalen Achsen angegeben wird.
Ich will aber die um eine y'-Achse nach vorne, und eine x'-Achse nach rechts vom Flugzeug aus. Die Achsen müssen allerdings orthogonal zu 0,0,1 (nach oben) liegen, sonst erhalte ich ja keinen Neigungsunterschied zu den Achsen.

Rotation ist ein Property des Objekts und stellt als Quaternion die globale Rotation dar.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

23.02.2013, 17:02

Rotation ist ein Property des Objekts und stellt als Quaternion die globale Rotation dar.

Und wie wird die berechnet?

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

7

23.02.2013, 17:03

Weiß ich nicht, liegt tief in der Engine. Also das Objekt ist am Anfang platziert und durch bestimmten Input kann die Rotation verändert werden. Aber deren Berechnung ist doch irrelevant für das Problem

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

23.02.2013, 17:17

Nö, das ist überhaupt nicht irrelevant. Wie genau sieht dieser Input denn aus, der die Rotation verändert? Und wie genau wird die Rotation dann verändert?

birdfreeyahoo

Alter Hase

  • »birdfreeyahoo« ist der Autor dieses Themas

Beiträge: 756

Wohnort: Schorndorf

Beruf: Junior Software Engineer

  • Private Nachricht senden

9

23.02.2013, 17:24

Weiß ich nicht, meine Frage ist doch bloß, wenn ich eine Achsenmatrix und eine globale Rotation habe, wie muss ich die beiden verknüpfen um die Rotation in dem neuen Koordinatensystem zu erhalten.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

10

23.02.2013, 17:38

Worauf ich hinaus will: Die Information, die du suchst, existiert sehr wahrscheinlich bereits, nämlich eben dort, wo die Rotation berechnet wird...

Werbeanzeige