set_view_reference_point(x, у, z); Далее нужно задать ориентацию камеры. Эту задачу можно разделить на две подзадачи: задание ориентации картинной плоскости посредством вектора нормам к картинной плоскости (view-plane normal) и задание вектора вертикали вида (view-up vector). Вектор нормали к картинной плоскости (п на рис. 5.15) задает ориентацию картинной плоскости или "фотопластинки" в камере. Ориентация любой плоскости всегда определяется вектором нормали к ней, соответствующая функция входит в состав API: Рис. 5.15. Фрейм камеры

set_view_plane_normal(nx, ny, nz);

Но для однозначного определения ориентации камеры недостаточно знать ориентацию картинной плоскости, поскольку остается еще одна степень свободы - поворот камеры вокруг

Визуализация

нормали к картинной плоскости. Поэтому потребуется определить еще и положение вектора вертикали вида (w на рис. 5.15), что зафиксирует однозначную ориентацию камеры. Это выполняется вызовом еще одной функции API:

set_view_up(w_x, w_y, w_z);

Проекция вектора вертикали вида w на картинную плоскость дает вектор вертикали картинной плоскости v (рис. 5.16). Таким образом, в качестве вектора вертикали вида w можно задать любой вектор, непараллельный п, что избавляет пользователя от необходимости вычислять вектор, лежащий обязательно в картинной плоскости. Вектор v ортогонален вектору п. Третий вектор, и, образующий с первыми двумя правостороннюю тройку, есть векторное произведение v х п. Полученную таким образом новую систему координат принято называть либо системой координат вида (viewing-coordinate system), либо u-v-n системой. Вместе с ТПВ эта тройка векторов образует фрейм камеры. Матрица, которая выполняет соответствующее преобразование фрейма, называется матрицей ориентации вида (view-orientation matrix).

Эта матрица формируется в результате суперпозиции матриц поворота и сдвига в однородных координатах. Начнем с определения точки привязки вида Рис. 5.16. Определение вектора вертикали картинной плоскости

Начало координат нового фрейма устанавливается в точке привязки вида, вектор нормали к картинной плоскости задает направление одной координатной оси, а две другие задаются векторами и и v. По умолчанию считаем, что тройке осей х, у, z соответствуют и, v, п. Такой выбор используется и в установленной по умолчанию матрице вида в OpenGL. Перенос начала фрейма в точку привязки вида выполняется посредством матрицы сдвига Т(-х, -у, -z). Далее выполняется поворот, и матрица вида V образуется как произведение


⇐ Предыдущая| |Следующая ⇒