Wie im Titel steht, würde ich gerne eine Kamera in einem Dreidimensionalen Raum basierend der momentenen Rotation der Kamera frei bewegen können.
Den Code der für die Rotation der Kamera zuständig ist habe ich bereits erledigt:
Im moment habe ich nur das "Basic Movement" was nicht basierend der Rotation arbeitet bedeutet wenn ich die "W" Taste gedrückt halte, fährt die Kamera weiter nach Norden obwohl ich nach Süden schaue. Das gleich passiert mit Westen und Osten.
Es wäre toll wenn mir jemand bei der Sache weiterhelfen kann, denn ich erziele einfach nicht den Effekt den ich mir vorstelle.
Den Code der für die Rotation der Kamera zuständig ist habe ich bereits erledigt:
C#-Quellcode
- // Cam Rotation X/Y Values
- if (mouse.Movement.Y < 0f) { // Down
- if (!(freeCamera.Rotation.X >= maxAngle - 0.01f)) mouseMovementYStored += topDownlookSpeed * frameTime;
- }
- if (mouse.Movement.Y > 0f) { // Top
- if (!(freeCamera.Rotation.X <= minAngle + 0.01f)) mouseMovementYStored -= topDownlookSpeed * frameTime;
- }
- if (mouse.Movement.X > 0f) { // Right
- mouseMovementXStored += leftRightlookSpeed * frameTime;
- }
- if (mouse.Movement.X < 0f) { // Left
- mouseMovementXStored -= leftRightlookSpeed * frameTime;
- }
- // Rotate Cam based on Mouse Movement
- Matrix camRotMatrixZ = Matrix.RotationZ(mouseMovementXStored * 5f); // Mouse Left/Right
- Matrix camRotMatrixX = Matrix.RotationX(mouseMovementYStored * 5f); // Mouse Top/Down
- float camRotVectorZ = Quaternion.RotationMatrix(camRotMatrixZ).ToRotation().Z;
- float camRotVectorX = Quaternion.RotationMatrix(camRotMatrixX).ToRotation().X;
- camRotVectorX = Clamp(camRotVectorX, minAngle, maxAngle);
- freeCamera.Rotation = new Vector3(camRotVectorX, 0f, -camRotVectorZ);
Im moment habe ich nur das "Basic Movement" was nicht basierend der Rotation arbeitet bedeutet wenn ich die "W" Taste gedrückt halte, fährt die Kamera weiter nach Norden obwohl ich nach Süden schaue. Das gleich passiert mit Westen und Osten.
C#-Quellcode
- if (isUpKeyPressed2) freeCamera.Position += Vector3.WorldNorth * (movementSpeed * frameTime); // Forward
- if (isDownKeyPressed2) freeCamera.Position += Vector3.WorldSouth * (movementSpeed * frameTime); // Backward
- if (isLeftKeyPressed2) freeCamera.Position += Vector3.WorldWest * (movementSpeed * frameTime); // Left
- if (isRightKeyPressed2) freeCamera.Position += Vector3.WorldEast * (movementSpeed * frameTime); // Right
Es wäre toll wenn mir jemand bei der Sache weiterhelfen kann, denn ich erziele einfach nicht den Effekt den ich mir vorstelle.
Wenn ich dir auf irgendeiner Art und Weise helfen konnte, drück doch bitte den "Hilfreich" Button
Für VB.NET Entwickler: Option Strict On nicht vergessen!
Für VB.NET Entwickler: Option Strict On nicht vergessen!