2011-01-07 10 views
1

Ich habe ein kleines Problem beim Übersetzen und Drehen meiner Kamera im 3D-Raum. In Direct3D9 ist eine Kamera definiert als Position, Blick und Achse (als 3D-Vektoren). Also habe ich die Rotation und Position der Kamera gespeichert, und wenn ich die Kamera für einen neuen Rahmen definiert habe, habe ich den Blick auf den Vektor und die obere Achse gedreht und die Position festgelegt. Bei der Übersetzung der Kamera nahm ich die Übersetzung, rotierte sie bei der Rotation und übersetzte die Position der Kamera und den Blick auf den Vektor. Aber nach einiger Zeit ordnen sich der Suchvektor und die neue Übersetzung nicht an, dh die Kamera bewegt sich nicht mehr vorwärts, wenn der Translationsvektor ein gerades Vielfaches des ursprünglichen Blickvektors ist, der vorwärts definiert. Ich kann nicht verstehen, warum dies geschieht - irgendwelche Vorschläge?Kamera im 3D-Raum drehen und übersetzen

Antwort

1

Konnten Sie Gimbal Lock erfahren? Das ist mir schon mal aufgefallen und so habe ich Vektoren entwertet und bin zu Quaternions gewechselt.

+0

Ich glaube nicht. Die D3DX-Funktion zum Erstellen der Ansichtsmatrix benötigt nur D3DXVECTOR3s. Ich kann nicht mit Quaternions arbeiten. – Puppy

+0

@DeadMG, können Sie eine D3DXVECTOR3 durch eine D3DXQUATERNION multiplizieren, wenn das * das * Problem ist. Es klingt definitiv ähnlich. –

+0

@ Moo-Juice: Warum hat der LookAt Vektor dann nicht den gleichen Gimbal Lock wie der Translationsvektor? Ich habe auch keine Funktionen gefunden, um einen D3DXVECTOR3 mit einem D3DXQUATERNION- zu multiplizieren und auch die Überlastung des Operators überprüft. – Puppy

Verwandte Themen