Seite 1 von 1
Pitch,Yaw,Roll zu X,Y,Z Rotation (bei Camera,Entity)
Verfasst: 01.09.2012 20:53
von FosJonas
Hallo,
Es geht um folgendes: Entities und Cameras kann ich mittels RotateEntity bzw, RotateCamera mittels X,Y und Z Wert rotieren, will ich aber die aktuellen Rotationswerte bekommen geht das nur mittels Pitch Yaw und Roll, die ich allerdings nicht einfach wieder als Parameter für RotateEntity nutzen kann, da es ganz andere Werte sind als die die ich zuvor eingegeben habe.
Ich habe jetzt ein bisschen gegoogelt und es soweit verstanden das es einfach 2 verschiedene Varianten sind für eine Rotation im 3D Raum.
Was ich mich jetzt aber Frage, wie bekomme ich es hin meine Kamera Rotation an die eines Entities anzupassen? Irgendwie habe ich nichts gefunden was eine art "Umrechnung" ermöglicht.
Ein Beispiel (das so eben nicht funktioniert):
Code: Alles auswählen
RotateCamera(#Camera,EntityPitch(#Entity),EntityYaw(#Entity),EntityRoll(#Entity),#PB_Absolute)
Kann mir da jemand weiterhelfen? Wäre sehr dankbar.
Re: Pitch,Yaw,Roll zu X,Y,Z Rotation (bei Camera,Entity)
Verfasst: 02.09.2012 02:25
von STARGÅTE
Was du machen kannst ist, jetzt mit den neuen Befehlen: EntityDirectionX/Y/Z die "Guckrichtung" zu ermitteln.
Diese kannst du dann (addiert mit der Camera-Position) an das CameraLockAt übergeben.
Edit: Ich stehen aber vor ähnlichen Problemen. Da für X,Y,Z oder Pitch, Yaw, Roll immer eine Reihenfolge definiert werden muss.
Für mich als Mathematiker wäre es eindeutiger "überall" mit Rotationsmatrizen zu rechnen.
Re: Pitch,Yaw,Roll zu X,Y,Z Rotation (bei Camera,Entity)
Verfasst: 02.09.2012 08:56
von DarkDragon
STARGÅTE hat geschrieben:Was du machen kannst ist, jetzt mit den neuen Befehlen: EntityDirectionX/Y/Z die "Guckrichtung" zu ermitteln.
Diese kannst du dann (addiert mit der Camera-Position) an das CameraLockAt übergeben.
Fehlt da nicht noch eine Information

? Immerhin kann man die Kamera ja noch um diesen Richtungsvektor rotieren

. Ein Up-Vektor fehlt noch. Momentan ist es praktisch unbestimmbar.
STARGÅTE hat geschrieben:Edit: Ich stehen aber vor ähnlichen Problemen. Da für X,Y,Z oder Pitch, Yaw, Roll immer eine Reihenfolge definiert werden muss.
Für mich als Mathematiker wäre es eindeutiger "überall" mit Rotationsmatrizen zu rechnen.
Das wäre für die meisten auch die gängige Vorgehensweise. Oder zumindest ein Quaternion, ein Skalierungs- und ein Translationsvektor.
Re: Pitch,Yaw,Roll zu X,Y,Z Rotation (bei Camera,Entity)
Verfasst: 02.09.2012 09:28
von gnasen
Ich bin mir nicht sicher, ob in PB ein links- oder rechtshändig gedrehtes Koordinatensystem genutzt wird.. Aber für den Fall linkshändig habe ich das schonmal ausgerechnet, siehe
folgenden Post.
Das ganze war für direct3D, ändert aber nichts an den Rechnungen. Das Kernstück ist aufjedenfall folgende Formel:
Code: Alles auswählen
theta.f = ATan2(Matrix\_33,Matrix\_31)+#PI
phi.f = ATan2(Sin(theta)*Matrix\_31+Cos(theta)*Matrix\_33, -Matrix\_32)
ksi.f = ATan2(Cos(theta)*Matrix\_11-Sin(theta)*Matrix\_13,-Cos(theta)*Matrix\_21+Sin(theta)*Matrix\_23)
Das ganze dann als Yaw-Pitch-Roll oder Roll-Pitch-Yaw übergeben. Ich glaube ersteres, aber einer von beiden ist es auf jedenfall.
Edit: Ich wollte ein Bsp für PB bauen, aber es scheint nicht möglich zu sein das Koordinatensystem des Entitys zu erhalten. schade.
Re: Pitch,Yaw,Roll zu X,Y,Z Rotation (bei Camera,Entity)
Verfasst: 02.09.2012 15:55
von FosJonas
Also scheint es keine einfache Lösung zu geben,
da werde ich wohl einfach auf mein Workarround zurückgreifen und die Rotierungswinkel in Variablen zwischenspeichern.
Also so:
Code: Alles auswählen
RX = 90
RY = 45
RZ = 30
RotateCamera(#Camera,RX,RY,RZ,#PB_Absolute)
RotateEntity(#Entity,RX,RY,RZ,#PB_Absolute)
Und Gnasens Ansatz scheint irgendwie zu hoch für mich zu sein, die Formel versteh ich irgendwie gar nicht.