7.2.2. Использование ир дает наилучшее приближение к ир вектором V
Покажите, что использование ир из уравнения (7.1) для задания векторов и и V эквивалентно тому, что вектор V - ближайший к ир вектор из всех, перпендикулярных к вектору п. Выполните следующие этапы: О Покажите, что V - п х (ир х п).
О Используйте следующее свойство двойного векторного произведения: а х (Ь с) = (а с) Ь - (а Ь) с.
О Покажите, что тогда вектор V является проекцией вектора ир на плоскость с нормалью п (см. главу 4), откуда следует, что V - ближайший к ир вектор в этой плоскости.
Для того чтобы осуществлять наилучший контроль за передвижениями камеры, создадим в программе собственную камеру и будем управлять ею. После каждого изменения, произведенного с этой камерой, она сама «сообщает» OpenGL, что она теперь собой представляет.
Мы создаем класс Camera, который «знает», как делать все то, что делает камера. Сделать это очень просто, и выигрыш получается значительный. Создадим в программе объект класса Camera, например cam, и настроим его с помощью таких функций:
cam.set(eye. look, up):
// initialize the camera
// инициализируем камеру
cam.slide(-l. 0. -2):
// slide the camera forward and to the left
// перемещаем камеру вперед и вверх
сат.гоП(ЗО):
//roll it through 30°
// накреняем камеру на 30"
cam.yaw(20):
// yaw it through 20°
// рыскаем камерой на 20°
etc.
// и так далее а
7.3. Встраивание камеры в программу
Хорошо сказать о предмете столь же интересно и столь же трудно, как нарисовать его.
Винсент ван Тог (Vincent van Gogjn)
7.3. Встраивание камеры в программу
Листинг 7.1. Определение класса Camera
class Camera{ private:
Point3 eye: Vector3 u. v. n:
double viewAngle. aspect. nearDist. \farDist: // view volume shape // форма отображаемого объема
void setModelViewMatrixO: // tell OpenGL where the camera is // сообщаем OpenGL. где находится камера
public:
Camera О: // default constructor // конструктор no умолчанию
void set(Point3 eye. Point3 look. Vector3 up): // like gluLookAtO // подобно gluLookAtO