Функции, устанавливающие отображаемый объем и положение наблюдателя в 3D
тел./ф.: +7 (495) 545 0624 (многоканальный), моб. +7 (926) 992 0154, +7 (926) 292 6860
E-mail:irina@piramidatour.ru;festivaliveka@mail.ru Cайты:www.piramidatour.ru;www.festivali.biz Мы Вконтакте: http://vk.com/deti_xxiveka Мы на Facebook: https://www.facebook.com/pages/Международный-проект-творческого-развития-детей-и-молодёжи-Дети-XXI-века/694140220625136 Г.М. НАБЕРЕЖНОВ, Н.Н. МАКСИМОВ Установка отображаемого пространства Методическое пособие к лабораторным работам по курсу «Компьютерная геометрия и графика»
Казань 2007 Функции, устанавливающие отображаемый объем и положение наблюдателя в 3D
В OpenGL существуют стандартные функции для задания ортографической (параллельной) и перспективной проекций. Первый тип проекции может быть задан функцией void glOrtho ( GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f)![]()
Перспективная проекция задается функцией void glFrustum (GLdouble l, GLdouble r, GLdouble b, GLdouble t, GLdouble n, GLdouble f). Эта функция задает отображаемый объем как усеченную пирамиду в системе координат наблюдателя СКe (xeyeze). Геометрический смысл параметров ясен из рис. 2. Функция создает матрицу перспективного преобразования координат из СКe в СК1, при котором усеченная пирамида отображается как параллелепипед, а затем матрицу преобразования из СК1 в СКp. Т.о. результирующая матрица преобразования координат, создаваемая функцией, это матрица преобразования координат из СКe в CKp. Далее текущая матрица перемножается на созданную функцией и результат замещает текущую.
Существует более удобная модификация описанной выше функции. Это функция void gluPerspective (GLdouble angle, GLdouble aspect, GLdouble n, GLdouble f). В этой функции параметр angle – угол охвата (обзора), параметр aspect = w/h, параметры n и f ближняя и дальняя плоскости отсечения. Функция создает ту же матрицу Fep, что и функция glFrustum () и аналогично выполняется. При этом предварительно вычисляются t = n *tg(p/180* angle /2); b = - t; r = t *aspect; l = - r.
По умолчанию система координат наблюдателя СКe (xeyeze) совпадает с мировой системой координат СКw (МСК). Возможно установить наблюдателя в любую позицию в МСК вызвав функцию void gluLookAt (GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz).E(eyex, eyey, eyez) – позиция наблюдателя в CKw; C(c enterx, c entery, c enterz) – точка в CKw в которую направлен взгляд наблюдателя; UP(upx, upy, upz) – вектор, задающий плоскость zeye и направление оси ze. Система координат наблюдателя устанавливается таким образом: N = E - C – вектор, задает направление оси ze; U = UP ´ N - вектор, задает направление оси xe, векторное произведение; V = N ´ U - вектор, задает направление оси ye. Функция создает матрицу преобразования координат из CKw в CKe, перемножает текущую матрицу на созданную и текущую замещает результатом перемножения. На рис.4 показано как при этом размещается отображаемый объем в МСК при ортографическом проецировании, а на рис.5 – при перспективном проецировании.
|