Ich bin ziemlich neu in C ++ und DirectX9 und möchte eine Third-Person-Kamera implementieren. Nachdem ich etwas über Quaternion-basierte Kameras gelesen hatte, beschloss ich, es zu implementieren. Aber es hat mich wirklich umgehauen, also frage ich hier, wie man eine TP-Kamera am einfachsten implementiert.
Hier sind die Dinge, die die Kamera tun sollte:
Folgen Sie den in einem 3DVector gespeicherten Koordinaten (x, y, z).
Um das Objekt drehen (glatt)
Vielleicht eine Art 'Feder' = Nach dem Drehen langsam zur normalen Position hinter dem Objekt zurückkehren
Entschuldigen Sie mein schlechtes Englisch: Ich bin Deutscher und noch in der Schule!
Danke im Voraus!
BEARBEITEN:
Nach einigem Versuch habe ich es verstanden.
Das größte Problem, das ich in Betracht gezogen habe, war das richtige Extrahieren des "Richtungs" -Vektors aus der Weltmatrix.
Während meiner Recherche habe ich meistens so etwas gefunden:
D3DXVECTOR3 direction;
direction.x = worldMatrix->_13;
direction.y = worldMatrix->_23;
direction.z = worldMatrix->_33;
D3DXVec3Normalize(&direction, &direction);
Das funktioniert bei mir NICHT ! Stattdessen habe ich Folgendes getan:
D3DXVECTOR3 direction;
direction.x = worldMatrix->_13;
// Consider the .y after the .z!
direction.z = worldMatrix->_23;
direction.y = worldMatrix->_33;
D3DXVec3Normalize(&direction, &direction);
Zur Skalierung:
// The tenfold of the average distance
D3DXVec3Scale(&direction, &direction, 10.0f);
Einstellen der Positionen:
cameraPos = targetPos - direction;
// For a top-view
cameraPos.y = targetPos.y + 5;
Für Rotationen sollten Sie eine temporäre Weltmatrix (von der Position des Ziels aus) erstellen und diese nach Ihren Wünschen drehen und die Richtung extrahieren.
Das Glätten der Rotation hängt wirklich von IHREM Spiel ab!
Diese Art von 3rd-Person-Kamera ist wirklich einfach herzustellen und macht ihren Job!
Wirklich toll, danke an "jheriko", der mir die richtige Antwort gegeben hat!