Имея векторы и и п, легко построить вектор v: он должен быть перпендикулярен векторам чип, поэтому снова используем векторное произведение: v = n х и. Заметим, что вектор v, как правило, не расположен на одной линии с вектором up: вектор v должен быть перпендикулярен к п, поскольку пользователь использует up для указания «направления вверх», и единственное используемое свойство вектора up - то, что он векторно перемножается с п.
Резюмируем эти рассуждения. По заданным величинам eye, look, up мы назначаем: п - eye - look,
u - up х п, (7.1) v - n x u, после чего нормализуем все три вектора к единичной длине.
Обратите внимание, как эта схема работает в обычном случае, когда up = (0,1,0). Убедитесь, что в этом случае и = (пг, 0, -пх), a v - (_*y»,> п\ + пЬ ~пгпу)- Заметим, что г/-компонент вектора и действительно равен нулю, то есть он «горизонтален». Кроме того, ^-компонент вектора v положителен, то есть он направлен более или менее «вверх».
Пример 7.2.1. Нахождение системы координат камеры
Рассмотрим камеру с eye = (4,4,4), смотрящую «вниз» на точку look = (0,1, 0). Пусть вектор up имеет координаты (0, 1, 0). Найдите векторы u, v, п. Повторите это для up = (2,1,0). Решение Из уравнения (7.1) находим векторы и = (4,0, -4), v - (-12,32, -12), п = (4,3,4), каждый из которых легко привести к единичной длине. (Начертите все векторы.) Отметим, что вектор и действительно горизонтален. Проверьте, что все эти векторы взаимно перпендикулярны. Для случая up = (2,1,0) (попробуйте до арифметических вычислений мысленно представить себе эту камеру) и - (4, -8,2), v = (38,8, -44), п = (4,3,4). Начертите эти векторы. Проверьте, что все векторы взаимно перпендикулярны.
Пример 7.2.2. Разработка пространственного воображения с помощью камер
Чтобы помочь развитию пространственного воображения (геометрической интуиции) при установке камеры, на рис. 7.8 приведены две камеры, каждая из которых изображена как система координат с отображаемым объемом. Эти камеры расположены над мировой системой координат, которая для наглядности нарисована с сеткой в плоскости хг. Отображаемый объем обеих камер имеет форматное соотношение 2. Одна камера установлена с eye = (-2,2,0), look = (0,0,0), up = (0,1,0). Для этой камеры из формулы (7.1) находим п = (-2,2,0), и - (0,0,2), v = (4,4,0). Все эти векторы, а также вектор up показаны на рисунке. У второй камеры eye = (2,2,0), look = (0,0,0), up = (0,0,1). В этом случае и - (-2,2,0), V = (0, 0, 8). Здесь направление вектора v параллельно up. Отметим, что эта камера лежит «на боку». (Проверьте, что все эти векторы сориентированы в нужных направлениях.)