Eu sou muito novo em C ++ e DirectX9 e quero implementar uma câmera de terceira pessoa. Depois de ler sobre as câmeras baseadas em Quaternion, decidi tentar implementá-las. Mas isso realmente me surpreende, então pergunto aqui qual é a maneira mais fácil de implementar uma câmera TP?
Aqui estão as coisas que a câmera deve fazer:
Siga as coordenadas armazenadas em um vetor 3D (x, y, z)
Girar ao redor do objeto (suave)
Talvez algum tipo de 'mola' = Mova lentamente para o Pos normal atrás do Objeto depois de Girar
Peça desculpas pelo meu inglês ruim: eu sou alemão e ainda estou na escola!
Desde já, obrigado!
EDITAR:
Depois de algumas tentativas, eu entendi.
O maior problema que considerei foi a extração correta do vetor "direction" da World-Matrix.
Durante minha pesquisa, encontrei principalmente algo parecido com isto:
D3DXVECTOR3 direction;
direction.x = worldMatrix->_13;
direction.y = worldMatrix->_23;
direction.z = worldMatrix->_33;
D3DXVec3Normalize(&direction, &direction);
Isso não funciona para mim! Em vez disso, fiz o seguinte:
D3DXVECTOR3 direction;
direction.x = worldMatrix->_13;
// Consider the .y after the .z!
direction.z = worldMatrix->_23;
direction.y = worldMatrix->_33;
D3DXVec3Normalize(&direction, &direction);
Para dimensionar:
// The tenfold of the average distance
D3DXVec3Scale(&direction, &direction, 10.0f);
Definindo as posições:
cameraPos = targetPos - direction;
// For a top-view
cameraPos.y = targetPos.y + 5;
Para Rotações, você deve criar uma Matriz mundial temporária (a partir da posição do alvo) e girá-la como quiser e extrair a direção.
A suavização da rotação realmente depende do seu jogo!
Esse tipo de câmera de terceira pessoa é realmente fácil de fazer e funciona!
Realmente MUITO obrigado a "jheriko", que me deu a resposta certa!