Я довольно новичок в C ++ и DirectX9, и я хочу реализовать камеру от третьего лица. Прочитав немного о камерах на основе кватернионов, я решил попробовать реализовать их. Но это действительно поражает меня, поэтому я спрашиваю, как проще всего внедрить TP-камеру?
Вот что должна делать камера:
Следуйте координатам, сохраненным в 3DVector (x, y, z)
Поворот вокруг объекта (гладкий)
Может быть, какой-то тип «пружины» = медленно возвращаясь к нормальному положению позади объекта после вращения
Извиняюсь за мой плохой английский: я немец и все еще в школе!
Заранее спасибо!
РЕДАКТИРОВАТЬ:
После некоторых попыток я понял.
Самой большой проблемой, которую я рассмотрел, было правильное извлечение вектора направления из Матрицы Мира.
Во время моего исследования я обнаружил, что-то вроде этого:
D3DXVECTOR3 direction;
direction.x = worldMatrix->_13;
direction.y = worldMatrix->_23;
direction.z = worldMatrix->_33;
D3DXVec3Normalize(&direction, &direction);
Это НЕ работает для меня! Вместо этого я сделал это:
D3DXVECTOR3 direction;
direction.x = worldMatrix->_13;
// Consider the .y after the .z!
direction.z = worldMatrix->_23;
direction.y = worldMatrix->_33;
D3DXVec3Normalize(&direction, &direction);
Для масштабирования:
// The tenfold of the average distance
D3DXVec3Scale(&direction, &direction, 10.0f);
Установка позиций:
cameraPos = targetPos - direction;
// For a top-view
cameraPos.y = targetPos.y + 5;
Для вращений вы должны создать временную матрицу мира (с позиции цели) и повернуть ее, как вы хотите, и извлечь направление.
Сглаживание вращения действительно зависит от ВАШЕЙ игры!
Такого рода камеру от третьего лица действительно легко сделать, и она делает свое дело!
Действительно большое спасибо "jheriko", который дал мне правильный ответ!