Задать траекторию полета камеры m_vCamera
BOOL CMainFrame::SetScene() t
// Задать траекторию полета камеры m_vCamera = C3dVector(5, 5, 0);
m_dRadius = 5.0;
// Задать обзорное поле m_pScene-»SetCameraField (1.5) ;
}
Траектория выбирается таким образом, чтобы камера вращалась вокруг заданной точки. На Рисунок 6-7 изображено движение камеры в нашем макете.
Рисунок. 6-7. Траектория полета камеры
Все, что осталось сделать, — организовать совместное перемещение камеры и самолета при каждой итерации:
BOOL CMainFrame::Update(double d)
(
// Обновить положение камеры C3dMatrix r;
r.Rotate(0, 2.0, 0) ;
m vCamera = r * m vCamera;
m_pScene-»SetCameraPosition (m_vCamera) ;
// Задать верхний вектор C3dVector vu(0, 1, 0) ;
// Построить вектор направления C3dVector vf = m_vCamera * vu;
m_p3cene-»SetCameraDirection (vf, vu) ;
// Задать положение самолета относительно камеры r.Rotate(0, 20, 0);
C3dVector vp = r * m vCamera;
m_pPlane-»SetPosition(vp) ;
// Задать направление C3dMatrix rp;
rp.Rotate(0, 0, 10); // Слегка покачаем крьшьями vu = rp * vu;
vf = vp * vu;
m_pPlane-»SetDirection (vf, vu) ;
return m_wnd3d.Update(TRUE);
)
Текущее положение камеры хранится в объекте C3dVector. Для определения ее нового положения вектор умножается на матрицу поворота. Затем камера переносится на новое место — но это еще не все. Необходимо изменить ориентацию камеры, чтобы она по-прежнему была направлена по касательной к окружности. Чтобы вычислить новое направление камеры, мы умножаем (векторно) верхний вектор (vu) на вектор положения камеры (m_vCamera). Вектор-результат совпадает с вектором направления камеры (Рисунок 6-8).
Вычисление вектора направления камеры
148 SUSy Глава 6. Пеоемешение объеет-ов в мякртр
Векторное произведение оказывается очень полезным, когда требуется найти вектор, перпендикулярный плоскости, которая определена двумя другими векторами, как в нашем случае.
Последнее, что осталось сделать, — вычислить положение и направление маленького самолета, летящего перед камерой. Самолет перемещается по той же траектории, что и камера, однако он на несколько градусов опережает камеру. Чтобы определить положение самолета, мы берем вектор положения камеры и поворачиваем его чуть дальше, пользуясь для этого другой матрицей (г). При определении ориентации самолета я сначала вычислял векторное произведение точно так же, как и для камеры. Однако мне показалось, что смотреть на самолет, который идеально ровно летит впереди камеры, довольно скучно. Я слегка повернул вектор вверх, чтобы создать иллюзию покачивания самолета. Эффект не очень впечатляющий, но зато легко реализуемый.
Содержание Назад Вперед
Forekc.ru
Рефераты, дипломы, курсовые, выпускные и квалификационные работы, диссертации, учебники, учебные пособия, лекции, методические пособия и рекомендации, программы и курсы обучения, публикации из профильных изданий