В чём суть проблемы загораживания? Какие четыре характеристики лежат в основе различий известных методов решения задачи загораживания?



Задача загораживания (удаление невидимых частей сцены) возникла в процессе визуализации каркасных изображений. Чтобы создать иллюзию непрозрачности отображаемых объектов, нужно найти и отобразить только части объекта, видимые для наблюдателя.

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

Нет единственного универсального решения задачи. Известные методы решения различаются между собой по следующим характеристикам:

1. Выбор структуры данных для представления поверхностей:

· аналитическое представление;

· уравнения поверхностей: сфера, цилиндр, конус;

· совокупность полигонов;

· бикубические сегменты.

2. Способ визуализации поверхности:

· получение сеточных изображений;

· получение полутоновых или закрашенных изображений.

3. Использование специфических геометрических свойств изображаемых объектов.

4. Пространство работы алгоритма:

· пространство объектов (ПО)

· пространство изображений (ПИ)

 

Алгоритмы, работающие вПО, имеют дело с системой координат объекта, в декартовом пространстве каждый объект сцены сравнивается с оставшимися  объектами. Объем вычислений пропорционален квадрату объектов. Достоинство: качество, возможность масштабировать без потери качества.

Алгоритмы, работающие в ПИ, отталкиваются от приборной системы координат экрана, т.е. определяют видимость каждого пикселя картины. Объем вычислений пропорционален ,

 – кол-во объектов в сцене,

– число пикселов экрана.

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

53. 54. 55.

Алгоритмы переборного типа относятся к первым алгоритмам. В них пытались точно решить задачу загораживания (ЗЗ), для чего использовали геометрический подход: рассматривалось каждое ребро сцены и его положение сопоставлялось с каждой из граней, при этом можно выделить 3 случая:

1) ребро видимое, расположено между гранью и наблюдателем.

2) ребро находится за гранью

3) ребро пересекает грань.

Третий случай приводили к первым двум делением ребра на части. Алгоритм завершался в случае, если были просмотрены все грани, и выводилась видимая часть, либо, когда всё ребро становилось невидимым.

Алгоритмы данного типа работают в пространстве объекта. Типичным представителем данного семейства является алгоритм Робертса: прежде всего в нем удаляются невидимые части, экранируемые самим телом, а затем те, которые загораживает другой объект, после чего каждая из видимых частей, каждого тела, сравнивается с каждым из оставшихся. Достоинство: использование простых, мощных и точных математических методов, которые используются до сих пор.

Метод удаления не лицевых граней: внешняя сторона объекта (лицевая грань) будет видима наблюдателю тогда, когда её нормаль будет направлена к наблюдателю, т.е. угол  между вектором нормали и наблюдателем лежит в пределах , . Знак косинуса легко определяется по скалярному произведению. Если уравнение плоскости грани имеет вид:  то требуется проверить только знак коэффициента .

Для нахождения нормали также можно воспользоваться векторным произведением любых 2х смежных векторов грани. Данный метод решает ЗЗ полностью для визуализации выпуклых многогранников, но может быть применен и для решения частных задач отображения сцены.

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

а) Проекция видимого объема пуста. Она не содержит проекцию ни одного видимого объекта сцены. Проекция объема- окно, которое закрашивается цветом фона.

б) Окно охватывается полностью ближайшей к нему по глубине грани проекций. Оно закрашивается цветом этой грани.

в) Размеры окна равны 1 пикселю. Этот пиксель закрашивается цветом ближайшей охватывающей грани.

г) Не распознана не одна из предыдущих ситуаций. Окно разбивается на 4 части, алгоритм повторяется для каждой части.

Алгоритм позволяет распараллелить вычисления, применим к удалению ребер и граней. Возможны дефекты из-за относительно произвольной разбивки для распознавания.

К данной группе можно отнести один из самых универсальных и используемых алгоритмов загораживания – алгоритм Z-буфера, или буфера глубины (был предложен Кеттелом), алгоритм отталкивается от пространства изображения, но включает цикл просмотра полигонов, а не пикселей и может быть реализован в процессе растрирования объектов: информация о глубине размещения каждого полигона записывается в z-буфер. Его размеры: , где  – количество битов для хранения информации о глубине сцены с приемлемой для количества изображения точностью, Ка – кол-во пикселей по горизонтали, Кв – по вертикали. Инициализируется буфер максимальной глубиной (аналогия с видеопамятью). В процессе преобразования объектов каждая ячейка z-буфера содержит значение расстояния до ближайшего из обработанных полигонов, вдоль проецирующего луча, проходящего через соответствующий пиксель экрана. При растрировании полигона для каждой его точки вычисляется расстояние от центра проецирования до экрана. Оно сравнивается с соответствующим для этой точки значением в z-буфере.

Когда значение сравниваемого пикселя больше хранящегося точку в буфер кадра не помещают. В противном случае данный пиксель заменяет точку экрана, а его z-глубина – соответствующую ячейку Z-буфера. Объем дополнительных вычислений невелик. Единственный недостаток – большой объем памяти.

Алгоритмы построчного сканирования работают в пространстве изображения, обрабатывают сцену, рассекая ее параллельными плоскостями, проходящими по сторонам развертки. Для каждой такой плоскости определяется совокупность отрезков – следов пересечения с ней граней объектов, т.е. задача 3D сводится к задаче 2D. Алг данного типа одни из первых были реализованы аппаратно и до недавнего времени считались наиболее эффективными. Отличие данных алгоритмов от алгоритмов с применением z-буфера состоит в том, что алгоритмы построчного сканирования должны просматривать при обработке все полигоны, претендующие на отображение в данной строке, а алгоритм z-буфера в текущий момент времени имеет дело с одним. Подобные алгоритмы требуют тщательно продуманной организации данных для полигонов, используются для создания компьютерных игр и являются универсальными.

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

К данной группе также относят алгоритм плавающего горизонта, который используется для визуализации сетчатых поверхностей, описываемых неявно . Работает в пространстве изображения, обладает простотой и высокой скоростью реализации. Использует упорядочение по расстоянию до наблюдателя. Идея алгоритма состоит в том, что трехмерную задачу сводят к двумерной путем сечения поверхности последовательностью плоскостей имеющей постоянное значение одной из координат: x, y или z, например, или . Получается, что поверхность представляется семейством кривых. Алгоритм хранит в памяти координаты 2-горизонтов: верхнего и нижнего т.е. хранится координата Z. При отображении каждой новой точки ее координату Z сравнивают с соответствующим значением верхнего и нижнего горизонта. Выводятся только пиксели с Z координатой больше верхнего и меньше нижнего горизонта. Метод просто совмещать с растрированием отрезков. Недостаток: появление дефектов на границах поверхности, в точках быстрого изменения функции и не прямоугольной области определения аргумента функции.

 

Билет № 56.

«Факторы создания реалистичных изображений»

 

1 Формулировка вопроса.

Какие факторы приходится учитывать при создании реалистичных изображений?

 

2 Факторы создания реалистичных изображений.

Для создания реалистичного изображения следует учитывать несколько факторов:

– Передача глубины (позволяет учесть расстояние до объектов).

– Освещение объектов (позволяет учесть форму, цвет и материал объекта).

– Наложение теней (позволяет уточнить геометрию сцены).

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

 

3 Подробный разбор факторов.

 

3.1 Передача глубины.

Для передачи глубины принято использовать перспективу, яркость или бинокулярный эффект.

 

Геометрическая перспектива предполагает наличие бесконечно удалённой точки схода, к которой сходятся все прямые изображения. В зависимости расположения точки схода - за или перед рисунком – различают соответственно прямую и обратную перспективу. В добавок можно использовать отсечение по глубине, т.е. чем дальше находится объект тем позже он будет изображён. Также следует скрывать невидимые линии для большего реализма. Использование перспективы наиболее эффективно для простых угловатых объектов. Для более сложных и нелинейных структур использование перспективы не даст ощутимого эффекта.

 

Представление глубины с помощью яркости – чем дальше объект от зрителя, тем меньше его яркость. Для реализации данного метода необходимо знать z координату объекта. Данный метод не позволяет показать значительные изменения глубины вследствие особенностей работы человеческого глаза.

 

При использовании бинокулярного эффекта создают два плоских изображения на основе разности которых составляется представление о глубине и, как следствие, трёхмерное изображение.

 

3.2 Освещение объектов.

При падении света на тело возможны следующие случаи :

– Свет полностью отражается (глянцевый объект).

– Свет частично отражается, частично поглощается.

– Свет полностью поглощается (матовый объект).

– Свет частично проходит (частично или полностью прозрачный объект).

Для придания большего реализма изображения следует правильно поставить отражённый свет. Отражённый свет зависит от строения, направления и формы источника света, а также от свойств поверхности, на которую падает свет.

Отражённый свет можно разделить на диффузную (рассеянную) составляющую и зеркальную (отражаемую в определённом направлении). К тому же следует учитывать фоновое освещение (ambient). При наложении света следует также учитывать световую составляющую объекта для получения наиболее реалистичных изображений.

 

3.3 Наложение теней и добавление оптических эффектов.

Полутень принято разделять на две части – полная тень (umbra) – наиболее тёмная часть тени и полутень (penumbra) – граница полной тени. Ввиду большой вычислительной сложности при наложении полутени эффективнее всего учитывать только полную тень. Если объект закрывает доступ света на другой объект, возникает проекционная тень. Наложение тени позволяет добавить реалистичности изображению и, возможно, оптимизировать вывод сцены, например, объект находится в тени можно не выводить его или выводить менее детализировано.

Билет № 57.

«Простая модель освещения. Моделирование источников света»

 

1 Формулировка вопроса.

Поясните, какие источники света и каким образом моделируются в простой модели освещения?

 

2 Виды источников света.

Выделяют4 основных типа источников света:

– фоновое освещение (ambientlighting, прим. лампа дневного света)

– точечный источник (pointsources, прим. лампа накаливания) ­

– прожектор (spotlights)

– удаленный источник (distantlight, прим. Солнце)

Любой из них рассматривается как состоящий из 3х независимых источников, цветов RGB и описывается соответственно трехкомпонентной функцией излучения I = [IR,IG,IB]. Вычисления для всех цветов осуществляется по одной схеме.

2.1 Фоновое освещение.

Фоновое освещение дает равномерный цвет по всему пространству, т. е. считается, что точки света нет, направление различно. В простых моделях освещения считается, что каждая точка на поверхности объекта сцены освещается светом с одинаковой интенсивностью IA.

2.2 Точечный источник

При использовании точечного источника считается, что освещенность поверхности зависит от ориентации относительно источника. Максимальная освещенность при перпендикулярно падающих лучах от источника и уменьшается при уменьшении угла падения. Считается, что идеальный точечный источник излучает свет одинаково во всех направлениях. Источник характеризуется координатами точки, в которой находится источник. Освещенность поверхности им обратно пропорциональна квадрату расстояния между освещаемой точкой P и точкой источника P0 и рассчитывается по формуле (2).

                                                   (2)

Такая модель проста, часто используется, но в комбинации с другими источниками. Учет расстояния от точечного источника вносит свою долю в изменение контрастности освещения. Вместо обратно пропорциональной зависимости в компьютерной графике используется модификация (3). Формула = корень квадратный от (a+bd+cd2) d=pp0 – расстояние a, b, c – константы, которые подбираются из условия смягчения контрастности.

                (3)

2.3 Прожектор

Прожектор (направленный источник или точечный ближний) испускает свет пучком, т. е. в каком-то направлении. Проще всего прожектор моделируется точечным источником света, ограничив для него направление распространения световых лучей. Более близкой к реальному является модель прожектора, с функцией распределения интенсивности в конусе излучения. Эту функцию аппроксимируют как , где  – угол между осью косинуса и вектором, направленным на определенную точку поверхности, если он меньше . . А e определяет быстроту убывания интенсивности по мере увеличения угла φ. Удаленный источник света. Считается при моделировании, что все испускаемые им лучи параллельны. Моделируется заменой точечного источника параллельным пучком света. Обработка таких лучей аналогична параллельному проецированию. P0=[x,y,z,1] PОИ=[x,y,z,0]. При этом считается, что вектор (0;0;0;0) соответствует текущему источнику, тогда (0;0;-1;0) направление вглубь сцены, а (0;-1;0;0) – сверху вниз. Прожектор моделирует пространственную неоднородность освещенности и применяется в основном для видеоэффектов, т. к. приводит к уменьшению наглядности изображения.

 

 

Билет № 58.

«Простая модель освещения. Моделирование отражения света»

 

1 Формулировка вопроса.

Поясните, какие источники света и каким образом моделируются в простой модели освещения?

 

2. Составные части отражения света.

Отражённый свет можно разложить на несколько составляющих :

– фоновое освещение (ambient)

– рассеянное освещение (diffuse)

– зеркальное освещение (specular)

Фоновое освещение постоянно в каждой точке и не зависит от формы объекта. Интенсивность фонового освещения рассчитывается по формуле (1).

Ia = kaia,                                                                                         (1)

Где ka – свойство материала воспринимать фоновое освещение,

Ia– мощность фонового освещения, Ia – итоговая интенсивность фонового освещения.

 

2.1 Рассеянное освещение. Модель Ламберта.

 

Рассеянное освещение моделируется по эмпирической модели Ламберта.

Модель Ламберта моделирует идеальное диффузное освещение. Считается, что свет при попадании на поверхность рассеивается равномерно во все стороны. При расчете такого освещения учитывается только ориентация поверхности (нормаль N) и направление на источник света (вектор L). Рассеянная составляющая рассчитывается по закону косинусов (закон Ламберта):

Для удобства все векторы, описанные ниже, берутся единичными. В этом случае косинус угла между ними совпадает со скалярным произведением.

 

2.2 Зеркальное освещение. Модель Фонга.

 

Для учёта зеркального освещения применяется эмпирическая модель Фонга.

Модель Фонга – классическая модель освещения. Модель представляет собой комбинацию диффузной составляющей (модели Ламберта) и зеркальной составляющей и работает таким образом, что кроме равномерного освещения на материале может еще появляться блик. Местонахождение блика на объекте, освещенном по модели Фонга, определяется из закона равенства углов падения и отражения. Если наблюдатель находится вблизи углов отражения, яркость соответствующей точки повышается.

Падающий и отраженный лучи лежат в одной плоскости с нормалью к отражающей поверхности в точке падения, и эта нормаль делит угол между лучами на две равные части. Т.о. отраженная составляющая освещенности в точке зависит от того, насколько близки направления на наблюдателя и отраженного луча. Это можно выразить следующей формулой:

В общем случае вектора V, L и N не лежат в одной плоскости.

где
Is – зеркальная составляющая освещенности в точке,
ks – коэффициент зеркального отражения,
is – мощность зеркального освещения,
R – направление отраженного луча,
V - направление на наблюдателя,
α - коэффициент блеска, свойство материала.

Итоговое освещение рассматривается как линейная комбинация представленных выше трёх видов освещения.


 

Билет № 59.

«Методы закраски полигональной сетки»

1 Формулировка вопроса

Какие существуют методы закраски полигональной сетки в компьютерной графике? В чём их отличие ?

2 Основные методы закраски полигональной сетки.

Можно выделить три основных способа закраски объектов, заданных полигональными сетками. В порядке возрастания сложности ими являются:

– однотонная закраска

– метод Гуро (основан на интерполяции значений интенсивности)

– метод Фонга (основан на интерполяции векторов нормали).

В каждом из этих случаев может быть использована любая из моделей закраски, описанная выше.

 

2.1 Однотонная закраска

При однотонной закраске вычисляют один уровень интенсивности, который используется для закраски всего многоугольника. При этом предполагается, что, во-первых, источник света расположен в бесконечности, поэтому произведение вектора к источнику освещения (L) и нормали к поверхности (N) постоянно на всей полигональной грани. Во-вторых, наблюдатель находится в бесконечности, поэтому произведение вектора к точке зрения (V) и вектора нормали (N) постоянно на всей полигональной грани и. В-третьих, полигон представляет реальную моделируемую поверхность, а не является аппроксимацией криволинейной поверхности.

Рисунок 1 – обозначения векторов

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

2.2 Метод Гуро

Метод тонированияГуро — метод закрашивания в трёхмерной компьютерной графике (затенения), предназначенный для создания иллюзии гладкой криволинейной поверхности, описанной в виде полигональной сетки с плоскими гранями, путём интерполяции цветов примыкающих граней. Принцип метода состоит в последовательном вычислении нормалей к каждой из граней трёхмерной модели, дальнейшего определения нормалей вершин путём усреднения нормалей всех примыкающих к вершине граней. Далее на основании значений нормалей по выбранной модели отражения вычисляется освещённость каждой вершины, которая представляется интенсивностью цвета в вершине.

2.3 Метод Фонга

Закраска по методу Фонга является усовершенствованием метода Гуро. Подобно методу Гуро, в методе Фонга используются нормали вершин, однако, вместо интерполяции вычисленных для вершин значений, производится вычисление нормалей для каждой точки грани. Эта дополнительная работа обеспечивает более точный результат. Закраска по методу Фонга медленнее, чем закраска по методу Гуро.

Билет № 60.

«Примитивы в компьютерной графике»

1 Формулировка вопроса

Что называется примитивом в компьютерной графике? Каким образом примитивы используются для создания изображений?

2 Определение примитива.

Примитив - это наименьшее неделимое с точки зрения прикладной программы элемент, используемый как базовый.

3 Классификация примитивов

Примитивы подразделяют на:

­– геометрические (точки, отрезки, ломаные, дуги)

– текстовые

– символьные (маркеры).

Различают физический и логический уpовни формирования примитивов. На физическом уровне объект генеpиpуется с помощью аппаратного блока, в то время как на логическом гpафический элемент генерируется программным образом.

4 Свойства примитивов

Примитивы определяются параметрами и атрибутами. Среди параметров выделяют

– форму

– размер

– местоположение­

– видимость

– яркость

– цвет

– режим мерцания

– толщина линии

Среди атрибутов можно выделить:

– визуальные свойства и статус по отношению к pазличнымопеpациям (например, возможность или невозможность указания пpимитива)

– удаление

– преобразования.

5 Применение примитивов

Пpименениепpимитивов значительно облегчает пpоцессфоpмиpования объектов и изобpажения. Гpафическийобект можно представить как множество пpимитивов под одним именем, котоpые обладают одинаковыми атpибутами. Гpафическая библиотека BGI (BorlandGraphicsInterface) состоит из постоянного ядpа графической системы и набоpагpафическихдpайвеpов, включаемых в систему по меpе надобности (обеспечивают независимость пpогpаммы от аппаpатуpы).

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

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

Билет № 61.

«Основные особенности архитектуры OpenGL»

1 Формулировка вопроса

Какие основные особенности архитектуры OpenGL?

2 Определение OpenGL.

OpenGL – спецификация, разработанная SiliconGraphics и поддерживаемая KronosGroup, определяющая платформонезависимый программный интерфейс (API) для разработки графических приложений.

3 Архитектура OpenGL

С точки зрения архитектуры, графическая система OpenGL является конвейером (graphicspipeline), состоящим из нескольких этапов обработки данных:

– аппроксимация кривых и поверхностей

– обработка вершин и сборка примитивов

– растеризация и обработка фрагментов

– операции над пикселами

– подготовка текстуры

– передача данных в буфер кадра

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

Для обеспечения интуитивно понятных названий в OpenGL полное имя команды имеет вид:

type glCommand_name[1 2 3 4][b s i f d ub us ui][v](type1 arg1,…,typeNargN)

Таким образом, имя состоит из нескольких частей:

gl это имя библиотеки, в которой описана эта функция: для базовых функций OpenGL, функций из библиотек GLU, GLUT, GLAUX это gl, glu, glut, aux соответственно.

Command_name - имя команды.

 [1 2 3 4] - число аргументов команды

[b s i f d ub us ui ] - типаргумента:

символ b означает тип GLbyte (аналог char в С\С++), символ f тип GLfloat (аналог float), символ i– тип GLint(аналог int) и так далее.

Символы в квадратных скобках в некоторых названиях не используются. Например, команда glVertex2i() описана как базовая в библиотеке OpenGL, и использует в качестве параметров два целых числа, а команда glColor3fv() использует в качестве параметра указатель на массив из трех вещественных чисел.

3 Основные библиотеки OpenGL

Среди основных библиотек OpenGL можно выделить

­– GLU (Utilitylibrary) – надстройка над OpenGL, позволяющая создавать сложные объекты, текстуры и т.д. Методы данной библиотеки имеют префикс glu.

– GLUT (Utilitytoolkitlibrary, или аналог freeglut) – позволяет:создание окна, управление окном, мониторинг за вводом с клавиатуры и событий мыши; включает функции для рисования ряда геометрических примитивов. Методы данной библиотеки имеют префикс glut.

– GLM (Mathematics) – предоставляет доступ к структурам и функциям, позволяющим использовать данные для OpenGL

 

4 GLSL

GLSL (OpenGLShadingLanguage) – язык высокого уровня для программирования шейдеров, синтаксис языка базируется на языке программирования ANSI C с добавлением некоторых функций и типов данных для работы с матрицами. Является кроссплатформенным.

Различают вертексные (вершинные, геометрические) шейдеры, проводящие операции над вершинами геометрии и фрагментные (пиксельные) шейдеры, выполняющие преобразования пикселей геометрии и возвращающих цвет пикселя.

Билет № 62.

«Общая структура OpenGL программы»

1 Формулировка вопроса

Какая общая структура OpenGL программы?

2 Общая структура программы.

Простейшая консольное приложение использующее OpenGL имеет следующую структуру:

– Инициализация GLUT

– Установка параметров окна.

– Создание окна.

– Установка функций, отвечающих за рисование в окне и изменении формы окна.

– Вход в главный цикл GLUT.

3 Подробный разбор

Рассмотрим создание консольного приложения.

3.1 Инициализация GLUT

Инициализация GLUT производится командой:

void glutInit(int *argcp, char **argv);

Первый параметр представляет собой указатель на количество аргументов в командной строке, а второй - указатель на массив аргументов. Обычно эти значения берутся из главной функции программы: intmain(intargc, char *argv[]).

3.2 Установка параметров окна

 Установка параметров окна содержит в себе несколько этапов. Прежде всего, необходимо указать размеры окна:

void glutInitWindowSize(int width, int height);

Первый параметр width - ширина окна в пикселях, второй height - высота окна в пикселях. Далее можно задать положение создаваемого окна относительно верхнего левого угла экрана. Делается это командой:

void glutInitWindowPosition(int x, int y);

Необходимо также установить для окна режим отображения информации. Т.е. установить для окна такие параметры как: используемая цветовая модель, количество различных буферов, и т.д. Для этого в GLUT существует команда:

void glutInitDisplayMode(unsigned int mode);

У команды имеется единственный параметр, который может быть представлен одной из следующих констант или комбинацией этих констант с помощью побитового ИЛИ.

Константа Значение
GLUT_RGB Для отображения графической информации используются 3 компоненты цвета RGB.
GLUT_RGBA То же что и RGB, но используется также 4 компонента ALPHA (прозрачность).
GLUT_INDEX Цвет задается не с помощью RGB компонентов, а с помощью палитры. Используется для старых дисплеев, где количество цветов например 256.
GLUT_SINGLE Вывод в окно осуществляется с использованием 1 буфера. Обычно используется для статического вывода информации.
GLUT_DOUBLE Вывод в окно осуществляется с использованием 2 буферов. Применяется для анимации, чтобы исключить эффект мерцания.
GLUT_ACCUM Использовать также буфер накопления (AccumulationBuffer). Этот буфер применяется для создания специальных эффектов, например отражения и тени.
GLUT_ALPHA Использовать буфер ALPHA. Этот буфер, как уже говорилось используется для задания 4-го компонента цвета - ALPHA. Обычно применяется для таких эффектов как прозрачность объектов и антиалиасинг.
GLUT_DEPTH Создать буфер глубины. Этот буфер используется для отсечения невидимых линий в 3D пространстве при выводе на плоский экран монитора.
GLUT_STENCIL Буфер трафарета используется для таких эффектов как вырезание части фигуры, делая этот кусок прозрачным. Например, наложив прямоугольный трафарет на стену дома, вы получите окно, через которое можно увидеть что находится внутри дома.
GLUT_STEREO Этот флаг используется для создания стереоизображений. Используется редко, так как для просмотра такого изображения нужна специальная аппаратура.

Вот пример использования этой команды:void glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);

3.3 Создание окна.

После того как окно установлено необходимо его создать.

int glutCreateWindow(const char *title);

Эта команда создаёт окно с заголовком, который вы укажете в качестве параметра и возвращает HANDLER окна в виде числа int. Этот HANDLER обычно используется для последующих операций над этим окном, таких как изменение параметров окна и закрытие окна.

3.4 Установка функций, отвечающих за рисование в окне и изменении формы окна.

После того, как окно, в которое будет выводится (рендерится) графическая информация, подготовлено и создано, необходимо связать с ним процедуры, которые будут отвечать за вывод графической информации, следить за размерами окна, следить за нажатиями на клавиши и т.д. Самая первая и самая необходимая функция отвечает за рисование. Именно она всегда будет вызываться операционной системой, чтобы нарисовать (перерисовать) содержимое окна. Итак, задаётся эта функция командой:

void glutDisplayFunc(void (*func)(void));

Единственный параметр этой функции - это указатель на функцию, которая будет отвечать за рисование в окне. Например чтобы функция voidDraw(void), определенная в вашей программе отвечала за рисование в окне, надо присоединить ее к GLUT следующим образом: glutDisplayFunc(Draw);

И ещё одна функция важная функция - это функция, которая отслеживает изменения окна. Как только у окна изменились размеры, необходимо перестроить вывод графической информации уже в новое окно с другими размерами. Если этого не сделать, то например увеличив размеры окна, вывод информации будет производиться в старую область окна, с меньшими размерами. Определить функцию, отвечающую за изменение размеров окна нужно следующей командой:

void glutReshapeFunc(void (*func)(int width, int height));

Единственный параметр - это указатель на функцию, отвечающую за изменение размеров окна, которая как видно должна принимать два параметра width и height, соответственно ширина и высота нового (измененного) окна.

Среди других часто используемых функции можно выделить функции раоты с мышью и клавиатурой.

3.5 Вход в главный цикл GLUT.

Ну и последнее, что необходимо сделать, чтобы запустить программу - это войти в так называемый главный цикл GLUT. Этот цикл запускает на выполнение так называемое ядро GLUT, которое обеспечивает взаимосвязь между операционной системой и теми функциями, которые отвечают за окно, получают информацию от устройств ввода/вывода. Для того, чтобы перейти в главный цикл GLUT, необходимо выполнить единственную команду:

void glutMainLoop(void);

 


Дата добавления: 2018-04-04; просмотров: 647; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!