Kann mir hier jemand bei einem Problem in der Matrizen Mathematik helfen?
Ich habe nämlich gerade ein Verständnissproblem:
Ich programmiere gerade eine FirstPersonCamera für ein Computerspiel.
Um das zu vestehen, muss ich vlt zuerst ein paar Grundlagen der GameProgrammierung erklären. In einem 3D-Spiel werden die Positionen aller Objekte in einer Matrix gespeichert (enthält Angaben zu X, Y und Z Position im Raum, Rotation, Skalierung). Die aktuelle Ansicht wird dann über eine weitere Matrix (4x4) berechnet.
Objekte, von welchen aus der 3D-Raum betrachtet werden kann, werden Kameras genannt. Und ich programmiere gerade eine FirstPersonCamera, welche man mittels der Tastatur durch den 3D-Raum steuern kann. Hierbei habe ich nun das Problem, dass zwar die Rotationen (Yaw, Pitch und Roll) korrekt funktionieren, sobald ich mich dann aber forwärts bewegen will, bewegt sich die Kamera z.b. nur auf der Z-Achse nach vorne, anstatt in die Richtung, in die ich gerade (aufgrund der Rotationen) blicke.
Die Matrix, mit welcher die Ansicht berechnet wird, berechne ich wie folgt:
Diese Berechnung wird bei jedem Frame (d.h. Berechnung des Bildes) ausgeführt
Erklärungen zu den Variablen:
- currenPosition: Aktuelle Position der Kamera im Raum (Vektor mit X Y Z)
- currentRotation: Aktuelle Rotation der Kamera (Vektor X Y Z)
- moveVector: Distanz, welche die Kamera bewegt wird (Vektor X Y Z)
- rotationVector: Rotation, welche seit dem letzten Frame angewandt wurde (Vektor X Y Z)
Meine Idee ist, dass ich die Kamera zuerst an den Ort bewege, wo sie vorher war und anschliessend die bestehende Rotation darauf anwende. Anschliessend wird die Bewegung und die neue Rotation angewandt, was meiner Meinung nach so richtig sein müsste :S
Ich hoffe ich habe alles nötige erklärt...
Ich habe nämlich gerade ein Verständnissproblem:
Ich programmiere gerade eine FirstPersonCamera für ein Computerspiel.
Um das zu vestehen, muss ich vlt zuerst ein paar Grundlagen der GameProgrammierung erklären. In einem 3D-Spiel werden die Positionen aller Objekte in einer Matrix gespeichert (enthält Angaben zu X, Y und Z Position im Raum, Rotation, Skalierung). Die aktuelle Ansicht wird dann über eine weitere Matrix (4x4) berechnet.
Objekte, von welchen aus der 3D-Raum betrachtet werden kann, werden Kameras genannt. Und ich programmiere gerade eine FirstPersonCamera, welche man mittels der Tastatur durch den 3D-Raum steuern kann. Hierbei habe ich nun das Problem, dass zwar die Rotationen (Yaw, Pitch und Roll) korrekt funktionieren, sobald ich mich dann aber forwärts bewegen will, bewegt sich die Kamera z.b. nur auf der Z-Achse nach vorne, anstatt in die Richtung, in die ich gerade (aufgrund der Rotationen) blicke.
Die Matrix, mit welcher die Ansicht berechnet wird, berechne ich wie folgt:
Code:
view = Matrix.CreateTranslation(currentPosition) * Matrix.CreateRotationX(currentRotation.X) * Matrix.CreateRotationY(currentRotation.Y) * Matrix.CreateRotationY(currentRotation.Z) * Matrix.CreateTranslation(moveVector) * Matrix.CreateRotationX(rotationVector.X) * Matrix.CreateRotationY(rotationVector.Y) * Matrix.CreateRotationY(rotationVector.Z)
Diese Berechnung wird bei jedem Frame (d.h. Berechnung des Bildes) ausgeführt
Erklärungen zu den Variablen:
- currenPosition: Aktuelle Position der Kamera im Raum (Vektor mit X Y Z)
- currentRotation: Aktuelle Rotation der Kamera (Vektor X Y Z)
- moveVector: Distanz, welche die Kamera bewegt wird (Vektor X Y Z)
- rotationVector: Rotation, welche seit dem letzten Frame angewandt wurde (Vektor X Y Z)
Meine Idee ist, dass ich die Kamera zuerst an den Ort bewege, wo sie vorher war und anschliessend die bestehende Rotation darauf anwende. Anschliessend wird die Bewegung und die neue Rotation angewandt, was meiner Meinung nach so richtig sein müsste :S
Ich hoffe ich habe alles nötige erklärt...
Kommentar