Soy bastante nuevo en C ++ y DirectX9 y quiero implementar una cámara en tercera persona. Después de leer un poco sobre las cámaras basadas en Quaternion, decidí intentar implementarlo. Pero realmente me sorprende, así que pregunto aquí cuál es la forma más fácil de implementar una cámara TP.
Estas son las cosas que debe hacer la cámara:
Siga las coordenadas almacenadas en un 3DVector (x, y, z)
Rotar alrededor del objeto (suave)
Tal vez algún tipo de 'resorte' = retroceder lentamente a la posición normal detrás del objeto después de rotar
Pide disculpas por mi mal inglés: ¡soy alemán y todavía estoy en la escuela!
¡Gracias por adelantado!
EDITAR:
Después de intentarlo, lo tengo.
El mayor problema que consideré fue la extracción correcta del Vector de "dirección" de la Matriz Mundial.
Durante mi investigación, he encontrado principalmente algo como esto:
D3DXVECTOR3 direction;
direction.x = worldMatrix->_13;
direction.y = worldMatrix->_23;
direction.z = worldMatrix->_33;
D3DXVec3Normalize(&direction, &direction);
¡Eso NO funciona para mí! En cambio hice esto:
D3DXVECTOR3 direction;
direction.x = worldMatrix->_13;
// Consider the .y after the .z!
direction.z = worldMatrix->_23;
direction.y = worldMatrix->_33;
D3DXVec3Normalize(&direction, &direction);
Para escalar:
// The tenfold of the average distance
D3DXVec3Scale(&direction, &direction, 10.0f);
Configuración de las posiciones:
cameraPos = targetPos - direction;
// For a top-view
cameraPos.y = targetPos.y + 5;
Para las rotaciones, debe crear una matriz mundial temporal (desde la posición del objetivo) y rotarla como desee y extraer la dirección.
¡El suavizado de la rotación realmente depende de TU juego!
¡Este tipo de cámara en tercera persona es realmente fácil de hacer y hace su trabajo!
¡Realmente GENIAL gracias a "jheriko" que me dio la respuesta correcta!