Используя формулы в уравнении (3.3), получим: Л = 180, С =40, В = 240,D = 60.

Тогда для нашего примера преобразование окно - порт просмотра примет вид:

sx= 180дг + 40; sy - 340г/ + 60.

Проверим, что данное преобразование правильно переводит различные характерные точки, например: О Каждый угол окна действительно переводится в соответствующий угол порта просмотра. Например, (2,0,1,0) преобразуется в (400,300).

О Центр окна, то есть (1,0,0,5), преобразуется в центр порта просмотра (220, 180).

Практическое упражнение 3.2.1. Построение преобразования Найдите величины A,B,CnD для перевода мирового окна (-10,0, 10,0, -6,0, 6,0) в порт просмотра (0, 600,0, 400).

Как выполнить это в OpenGL?

В рамках OpenGL перевод из окна в порт просмотра очень прост, он автоматически осуществляет для каждой задаваемой вершины (ломаной линии) нужную последовательность преобразований с помощью команды gl Vertex2 * ( ). Кроме того, OpenGL автоматически отсекает части объекта, находящиеся за пределами мирового окна. Все, что от нас требуется, - это правильно назначить преобразования, а все остальное делает OpenGL.

Для двумерного случая мировое окно устанавливается с помощью функции gl u0rtho2D( ), а порт просмотра - функцией glViewportO. Эти функции имеют следующие прототипы: функция

void glu0rtho2D(GLdouble left. GLdouble right. GLdouble bottom. GLdouble top): устанавливает для окна левый нижний угол ( 1 eft, bottom) и правый верхний угол ( ri ght. top), а функция

void gIViewportCGLint x, GLint y. GLint width. GLint height): устанавливает для порта просмотра нижний левый угол (х. у) и верхний правый угол (х + width, у + height).

3.2. Мировые окна и порты просмотра По умолчанию порт просмотра является полным экранным окном: если ширина и высота экранного окна равны соответственно W и Я, то порт просмотра по умолчанию имеет левый нижний угол (0, 0) и верхний правый угол (W. Н). *

Поскольку в OpenGL для настройки всех его преобразований используются матрицы, то до вызова функций glu0rtho2D()' необходимо вызвать две «установочные» функции: glMatrixMode(GL_PROJECTION) и glLoadldentityO. (В главе 5 мы рассмотрим более подробно, что при этом происходит за сценой.)


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