Перемещать камеру вдоль одной из ее осей просто. Для того чтобы переместить ее на расстояние D вдоль оси и, нужно положить eye равным eye + Du. Для удобства можно объединить три возможных перемещения в одной функции: s1ide(de1U. delV. delN) перемещает камеру на delU вдоль оси и, на delV вдоль оси V, на delN вдоль оси п. Код этой функции выглядит так:

void Camera:: s1ide(float dell), float delV. float delN) {

eye.x +- dell) * u.x + delV * v.x + delN * n.x: eye.у +- dell) * u.y + delV * v.у + delN * n.y: eye.z += delU * u.z + delV * v.z + delN * n.z: setModelViewMatrix():

}

Поворот камеры

4Лы хотим иметь возможность накренять (roll) камеру, тангажировать (pitch) или рыскать (yaw) ею. Каждая из этих операций предполагает поворот камеры вокруг одной из ее собственных осей. Мы рассмотрим подробно операцию крена; два других вида поворота аналогичны.

Накренить камеру означает повернуть ее вокруг ее собственной оси п. Это подразумевает, что должны быть повернуты оба направления - и и v, как показано на рис. 7.10. Образуются две новых оси и' и v', которые лежат в той же плоскости, что и и V, .однако они повернуты на угол а радиан.

Крен камеры

Рис. 7.10. Крен камеры

Итак, нам требуется только представить векторы и' и V' в виде линейных комбинаций и и V"opengl1_470.html">⇐ Предыдущая| |Следующая ⇒