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

Давайте посмотрим, как выбирать окно и порт просмотра, чтобы получить нужные изображения сцены. В ряде случаев программист (или, возможно, пользователь во время выполнения программы) может ввести спецификации для окна и порта просмотра для получения необходимого эффекта; в других случаях одна или обе эти спецификации устанавливаются автоматически, согласно некоторым требованиям к изображению. В данном разделе мы рассмотрим несколько вариантов выбора.

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

Обычно стремятся найти окно, в которое объект помещается целиком. Для этого необходимо найти обрамление данного объекта, называемое экстентом (extent). Экстент, или ограничивающий прямоугольник (bounding box) объекта - это выровненный прямоугольник, в точности покрывающий данный объект. На рис. 3.12 приведен чертеж, составленный из нескольких отрезков прямых. Экстент данной фигуры, показанный штриховой линией, равен (left, right, bottom, up) = (0,36, 3,44, -0,51,1,75).

3.2.2. Автоматическая установка окна и порта просмотра

Френсис Хилл

Рис. 3.12. Использование экстента в качестве окна

3.2. Мировые окна и порты просмотра Как вычислить экстент для заданного объекта? Если все конечные точки линий, из которых состоит объект, хранятся в массиве рт.[1], где г = 0,2,га - 1, то экстент можно определить, найдя экстремальные значения жиг/в данном массиве. Например, левая сторона экстента равна минимуму из всех значений рт.[т] .х. После того как экстент найден, окно можно положить равным ему.

Если же объект задан процедурно, то не представляется возможным заранее определить его экстент. В этом случае можно прогнать рисующую данный объект подпрограмму дважды, но по-разному:


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