Существуют установленные по умолчанию параметры формирования изображения в компьютере, что аналогично установленной на штативе фотокамере со штатным объективом. Но такая фиксированная камера вынуждает фотографа компоновать кадр, переставляя объекты съемки. Если нужно снять слона, то его придется втащить в павильон и заставить стоять на приличном удалении от камеры. А какого-нибудь паучка вообще не удастся снять, поскольку это не позволит сделать штатный объектив. Поэтому профессиональные фотографы пользу-
Графическое программирование
ются портативными камерами с набором сменных объективов или специальным объективом с переменным фокусным расстоянием - трансфокатором. Тот же подход реализуется и в системах компьютерной графики.
2.5.1. Визуализация двухмерных объектов Визуализация двухмерных объектов сводится к выбору прямоугольной области двухмерного пространства и переносу ее содержимого на экран, как показано на рис. 2.28. Отображаемая область пространства называется прямоугольником видимости (viewing rectangle), или прямоугольником отсечения (clipping rectangle). Объекты, попавшие внутрь этого прямоугольника, переносятся на экран, а не попавшие в него - отсекаются и не отображаются. Объекты, которые пересекаются контуром прямоугольника отсечения, будут частично видимыми. Какими должны быть размеры окна и где его расположить на экране - это отдельный разговор, который мы продолжим в разделе 2.6.
Рис. 2.28. Визуализация двухмерных объектов: а - объекты до отсечения; б - изображение после выполнения отсечения Не забывайте, что двухмерная графика является частным случаем трехмерной, а следовательно, прямоугольник видимости лежит на плоскости z = 0 в трехмерной зоне видимости {viewing volume), как показано на рис. 2.29. Если зона видимости не задана явно, то в OpenGL используется установленная по умолчанию зона в виде куба видимости 2x2x2 с началом координат в центре куба. В терминах двухмерной плоскости левый нижний угол прямоугольника видимости имеет координаты (-1.0, -1.0), а правый верхний - координаты (1.0, 1.0).