ВУЗ:
Составители:
Рубрика:
32
ния объекта, то конечную цель можно достичь после следующих шагов: шаг 1 – поворота объекта на
45° относительно оси z после чего; шаг 2 – перемещение объекта (повернутого) вдоль оси x на две еди-
ницы. Но в OpenGL это осуществляется в обратном порядке.
Совет: приучите себя к рассуждениям о преобразованиях объектов с точки зрения их систем коор-
динат, и это вас избавит от возможных геометрических ошибок.
Напоминаем, что текущая матрица умножается на координаты точек объекта только при определе-
нии самого объекта. После чего координаты объекта преобразуются в новые значения. А до этого мо-
мента формируется текущая матрица преобразования. Любой вызов команды преобразования заверша-
ется перемножением текущей матрицы преобразования на сформированную матрицу командой преоб-
разования. Полученная матрица размещается на место текущей.
Изменяя положение самого объекта, создается иллюзия, что перемещается камера наблюдения. В
OpenGL существует возможность управлять камерой с одновременным изменением модельно-видовой
матрицы. Это можно сделать с помощью команды:
void gluLookAt( GLdouble eyex, GLdouble eyey, GLdouble eyez,
GLdouble cx, GLdouble cy, GLdouble cz,
GLdouble upx, GLdouble upy, GLdouble upz)
ЗДЕСЬ ПАРАМЕТРЫ EYEX, EYEY, EYEZ ОПРЕДЕЛЯЮТ ТОЧКУ НАБЛЮДЕНИЯ, CX, CY,
CZ ЗАДАЮТ ЦЕНТР СЦЕНЫ, КОТОРЫЙ БУДЕТ ПРОЕКТИРОВАТЬСЯ В ЦЕНТР ОБЛАСТИ
ВЫВОДА, И ПАРАМЕТРЫ UPX, UPY, UPZ ЗАДАЮТ ВЕКТОР ПОЛОЖИТЕЛЬНОГО НА-
ПРАВЛЕНИЯ ОСИ У СЦЕНЫ, ОПРЕДЕЛЯЯ ПОВОРОТ КАМЕРЫ. ОБЫЧНО ПАРАМЕТРЫ
UPX, UPY, UPZ ИМЕЮТ ЗНАЧЕНИЯ – (0,1,0).
Внимание! Команду gluLookAt() обычно отрабатывают, когда модельно-видовая матрица равна
единичной. Например:
…
glMatrixMode(GL_MODELVIEW); // текущая матрица – видовая
glLoadIdentity(); // текущая матрица – единичная
gluLookAt(2.0f,1.0f,3.0f, // положение центра наблюдения
6.0f,0.0f,0.0f, // центр сцены в мировых координатах
0.0f,1.0f,0.0f); // вектор "верх" направлен вдоль оси у
…
10.3 Область вывода
В OpenGL готовая для визуализации графическая информация поступает в специально настроен-
ную область вывода, которая определяется шириной (p
x
), высотой (p
y
) и положением ее центра на экра-
не (o
x
, o
y
). Эти параметры формируются специальной командой:
void glViewPort (GLint x, GLint y, GLint width, GLint height)
Параметры x и y задают координаты левого нижнего угла (x, y) области вывода в оконной системе ко-
ординат. Параметры width и height определяют ширину и высоту окна вывода. Все параметры команды
задаются в пикселях. Размеры оконной системы координат определяются текущими размерами окна при-
ложения, точка (0,0) находится в левом нижнем углу окна.
После выполнения команды glViewPort параметры области выво-
да устанавливаются в значения p
x
= width, p
y
= height, o
x
= x + width/2 и
o
y
= y + height (точка с координатами (0, 0, 0) в оконных координатах будет располагаться я в центре ок-
на области вывода), а оконные координаты выводимых вершин определяются соотношением:
22
2
2
fnnf
z
o
p
y
o
p
x
z
y
x
y
y
x
x
w
w
w
+
+
−
+
+
=
,
где n и f определяют допустимый диапазон изменения глубины (z – координата). По умолчанию данные
параметры равны 0 и 1 соответственно. Но их можно изменять командой:
void glDepthRange (GLclampd n, GLclampd f)
Страницы
- « первая
- ‹ предыдущая
- …
- 28
- 29
- 30
- 31
- 32
- …
- следующая ›
- последняя »
