Френсис Хилл

Рис. 3.1. График функции sinc(x)

Вот код этой программы:

void myDisplay(void) {

glBeginC GL_LINE_STRIP):

forCGLfloat x - -4.0: x < 4.0: x += 0.1)

{

GLfloat у - sin(3.14159 * x) / (3.14159 * x): g!Vertex2f(x. y):

}

glEndO: gIFlushO:

3.2. Мировые окна и порты просмотра Заметим, что в этом коде используется естественная система координат для решения данной задачи: задан маленький шаг по х в диапазоне от -4,0 до 4,0. Главный вопрос заключается в том, каким образом следует масштабирввать и сдвигать различные величины (х, у), чтобы изображение должным образом размещалось в экранном окне.

Необходимые масштабирование и сдвиг осуществляются посредством установки мирового окна и порта просмотра и задания соответствующего преобразования между ними. Как мировое окно, так и порт просмотра являются выровненными прямоугольниками, задаваемыми программистом. Мировое окно выражается мировыми координатами. Порт просмотра является частою экранного окна. На рис. 3.2 приведен пример мирового окна и порта просмотра. Идея заключается в следующем: все, что находится внутри мирового окна, масштабируется и сдвигается так, чтобы оно правильно отображалось в порту просмотра; все остальное отсекается и не отображается.

Френсис Хилл

Рис. 3.2. Мировое окно (а) и порт просмотра (б)

Мы хотим описать не только то, как осуществлять операции масштабирования и сдвига в OpenGL, что очень просто, но также и то, как организованы процессы масштабирования и сдвига, чтобы вы смогли разобраться в используемых в них алгоритмах низкого уровня. Здесь мы работаем только с 20-верси-ей, однако позднее мы увидим, что эти идеи естественным образом распространяются и на ЭО-«миры», обозреваемые с помощью «камеры».

3.2.1. Преобразование из мирового окна в порт просмотра На рис. 3.3 более детально показаны мировое окно и порт просмотра. Мировое окно описывается своими левой (left), верхней (top), правой (right) и нижней (bottom) границами, или W.l, W.t, W.r и W.bl соответственно. Порт просмотра описывается подобным же образом в системе координат экранного окна (открытого в каком-либо месте на экране) посредством координат V.l, V.t, V.r и V.b, которые измеряются в пикселах.


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