Окно и видовой экран

Термин окно (window) в сетевой компьютерной среде обозначает область экрана монитора рабочей станции, посредством которого пользователь взаимодействует с вычислительными ресурсами, подключенными к той же сети. В компьютерной графике этот термин имеет иное значение. Окно — это область пространства, проецируемая на монитор. Объекты, находящиеся вне окна, на мониторе не появляются. В этом смысле оно подобно окну дома, через которое человеку, сидящему внутри дома, видна лишь часть внешнего мира. Вероятно, эта аналогия была основанием для выбора соответствующего термина. Окно обычно определяется как прямоугольник, лежащий на экране и заданный значениями Xv и Yv в системе координат просмотра (рис. 3.9 и рис. 3.10). Видимая область пространства, называемая просматриваемым объемом (viewing volume), зависит от типа проекции. Для параллельной проекции эта область имеет форму параллелепипеда, а для перспективной — форму пирамиды.

 

Окно и видовой экран
 
 
 

Просматриваемый объем при проектировании может давать довольно сложное изображение, поскольку в него могут попадать ненужные объекты, расположенные вблизи наблюдателя или вдали от него. Иногда бывает удобно ограничить этот объем двумя плоскостями, из которых одна располагается ближе, а другая — дальше (рис. 3.11). Для параллельной проекции ближняя и дальняя плоскости определяются так же, как и для перспективной.

 

Окно и видовой экран
 
Окно и видовой экран
 
видовой экран (viewport) — это область экрана, где будет отображаться проецируемое изображение (рис. 3.12). В эту область проецируется просматриваемый объем, определяемый «обычным» окном. Отображение состоит из трансляции и масштабирования, учитывающих расстояние между центром видового экрана и центром монитора, а также разницу размеров окна и видового экрана. Другими словами, значения Xs и Ys, полученные по формулам (3.1) и (3.2), должны быть увеличены или уменьшены таким образом, чтобы центр окна попадал в центр видового экрана, а не в центр монитора. Кроме того, они должны быть подвергнуты масштабированию, чтобы четыре граничные точки окна стали четырьмя граничными точками видового экрана. Соотношение сторон у окна должно быть таким же как и у видового экрана, в противном случае изображение будет искажено, И круг, например, превратится в эллипс.
 
 

Окно и видовой экран

 
 

Ниже приведен пример кода, задающего окно и видовой экран с использованием графической библиотеки OpenGL. В OpenGL окно просмотра также определяется как трехмерный объем. Однако результат получается таким, как если бы третье измерение окна просмотра просто игнорировалось.

 

static GLint viewports - {0. 0. 400. 400}:

/* Видовой экран задается координатами окна1. Первый и второй аргументы определяют положение левого нижнего угла окна просмотра, а третий и четвертый - размер прямоугольника. */ static GLolamped depth_range[ ] - {0.0. 1.0}:

/* Первый и второй аргументы представляют собой поправки к минимальному и максимальному значениям, которые могут храниться в буфере глубины. */ static GLdouble viewing volume[ ] - {-100.0. 100.0. -100.0. 100.0. -10.0. 100.0}:

/* Горизонтальный и вертикальный размеры окна задаются в координатах просмотра (аргументы 1-4). Пятый и шестой аргументы определяют расстояние от экрана до ближней и дальней плоскостей соответственно. */ glOrtho(viewing_volume[0]. viewing_volume[l], viewing_volume[2], viewing_volume[3], viewing_volume[4]. viewing_volui!ie[5]):

/* Определяет тип проекции - параллельный - и создает матрицу ортографического параллельного просматриваемого объема. после чего умножает на него текущую матрицу. */ glViewport(viewport[0]. viewport[1]. viewport[2], viewport[3):

/* Определяет прямоугольник окна, открытого диспетчером, после чего отображает в это окно готовое изобаржение. Если glViewport не используется, окно просмотра по умолчанию считается совпадающим со всем открытым окном. */

glDepthRarge(depth_range[0],depth_range[l]):

/* Определяет кодирование z-координат при преобразовании просмотра.

Значения z-координаты масштабируются этой командой так. чтобы они лежали в определенном диапазоне. */

 

Смотрите также