Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Otvety_po_inzhenerke.doc
Скачиваний:
28
Добавлен:
22.09.2019
Размер:
1 Мб
Скачать
☆

Где матрица преобразований m имеет следующий вид:

Классическая матрица

поворотов   

Вектор проекций 

 Вектор сдвига (переноса)      

 Общий масштаб

При отображении пространственных объектов используют понятие мировых координат – трёхмерных декартовых координатах пространства, в котором размещаются объекты. Каждый из объектов обычно имеет собственную объектную систему координат. И, наконец, экранная система координат связана с тем графическим устройством, где в заданной проекции на картинной плоскости (в общем случае – картинной поверхности) отображается создаваемая трёхмерная сцена. Так как практически все устройства графического вывода являются плоскостными, то две из трёх экранных координат (X и Y) располагаются в плоскости экрана соответственно по горизонтали и вертикали, а координата Z направлена перпендикулярно им (если «вглубь» экрана, то получившаяся система координат левосторонняя). Проецирование в общем случае – отображение точек, заданных в системе координат с размерностью N, в точки в системе с меньшей размерностью. Видовое преобразование (view transform) – преобразование координат согласно ракурсу показа пространственных объектов. Иными словами – поворот системы координат, связанной с камерой (точкой зрения на трёхмерную сцену), плюс операции отсечения по объёму видимости. При анализе изображений и в автоматизированном проектировании7 используют ортогональные проекции – проецирующие лучи перпендикулярны плоскости проекции, а плоскость проекции перпендикулярна одной из осей координат. Аксонометрическая проекция – проекция на плоскость с помощью параллельных лучей, идущих из центра проецирования (который удалён в ∞) через каждую точку объекта до пересечения с картинной плоскостью. Среди аксонометрических про­екций выделяются:

прямоугольные – проецируемые лучи пер-пендикулярны к плоскости проекции. В противном случае проекцию называют косоугольной.

 При прямоугольной аксонометрической про-екции указывают косинусы углов наклона коорди-натных осей к плоскости проецирования, называемых показателями искажения. Если два показателя искажения равны, то проекцию называют диметрической; если равны три показателя – изометрической; если все показатели различны – триметрической.

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

Перспективная проекция – это центральная проекция на плоскость прямыми лучами, сходящимися в точку – центр проецирования (S). (рис. IV.6) Существуют одно-, двух- и трёхточечные центральные проекции, различия между которыми показаны на рис. IV.7. Один из проецирующих лучей перпендикулярен к картинной плоскости, и он называется главным (S-S'). Точка пересечения этого луча и картинной плоскости – главная точка картины (S'). Расстояние от главной точки до центра проецирования называется фокусным (D). Стереограммы – достаточно давно известный способ создания псевдотрёхмерных (но отнюдь не проекций трёхмерных) изображений, который благодаря возможностям современной компьютерной графики породил довольно много новых вариантов (в частности стереоизображения из текстурных основ и из случайных точек, анимированные стереоизображения и т.п.). Рисунок IV.9, в отличие IV.8, даёт представление об алгоритме, лежащем в основе создания стереоизображения. Обычно при создании стереограмм ставится задача показать пространственно разделённые по координате z части изображения, то есть изображение всегда представляется как плоскость, деформированная по координате z. При этом для описания каждой точки этой плоскости (на рисунке: точки A и B) используются как минимум два пикселя, дающих её изображение (AL и AR) соответственно для левого (L1) и правого (R1) глаза вдоль одной горизонтальной строки. Два изображения следующей «трёхмерной» точки (B) в наиболее простых алгоритмах пиксели строится для смещённых на малое расстояние h точек зрения левого (L2) и правого (R2) глаза. Чем ближе точка к плоскости изображения, тем меньше расстояние между изображающими её пикселями. В результате такого подхода: (1) глазные оси, рассматривающий изображение, должны быть практически параллельны, иными словами, «глаз должен быть аккомодирован на бесконечность»; (2) информация о цвете трёхмерного изображения для таким образом обманутого глаза обычно намеренно не поддерживается, чтобы зашифровать трёхмерное изображение за цветной двумерной основой; (3) для стереограммы задаётся период повторения, обычно равный нескольким сантиметрам, в который и вписывается трёхмерное изображение. Упорядоченного по данным правилам расположения пикселей для фиксированного фокусного расстояния D вполне достаточно, чтобы мозг человека, постоянно настроенный на поиск форм в информационном поле, соответствующим образом настроил восприятие «скрытой» информации и дал чёткое восприятие опрокинутого в глубину изображения .

8. 3D-алгоритмы удаления невидимых граней и рёбер. Алгоритм Робертса. Алгоритм Z-буфера. Алгоритм художника.

А лгоритм художника. Пусть имеется некий набор граней (т.е. сцена), который требуется нарисовать. Отсортируем грани по удаленности от камеры и отрисуем все грани, начиная с самых удаленных. Довольно распространенная характеристика удаленности для грани ABC - это среднее значение z, mid_z = (A.z+B.z+C.z)/3. Вот и весь алгоритм. Просто, и обычно достаточно быстро. Существует, правда, несколько проблем. Во-первых, при некотором расположении граней этот алгоритм вообще не может дать правильного результата - в каком порядке грани не рисуй, получится неправильно. Вот стандартный пример.

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

целесообразно использовать какие-то другие методы (например BSP и PVS, порталы, и т.д).

Алгоритм использующий z буфер. Это один из простейших алгоритмов удаления невидимых поверхностей. Впервые он был предложен Кэтмулом [8]. Работает этот алгоритм в пространстве изображения. Идея z-буфера является простым обобщением идеи о буфере кадра. Буфер кадра используется для запоминания атрибутов (интенсивности) каждого пиксела в пространстве изображения, z-буфер - это отдельный буфер глубины, используемый для запоминания координаты z или глубины каждого видимого пиксела в пространстве изображения. В процессе работы глубина или значение z каждого нового пиксела, который нужно занести в буфер кадра, сравнивается с глубиной того пиксела, который уже занесен в z-буфер. Если это сравнение показывает, что новый пиксел расположен впереди пиксела, находящегося в буфере кадра, то новый пиксел заносится в этот буфер и, кроме того, производится корректировка z-буфера новым значением z. Если же сравнение дает противоположный результат, то никаких действий не производится. По сути, алгоритм является поиском по х и у наибольшего значения функции z (х, у).Главное преимущество алгоритма - его простота. Кроме того, этот алгоритм решает задачу об удалении невидимых поверхностей и делает тривиальной визуализацию пересечений сложных поверхностей. Сцены могут быть любой сложности. Поскольку габариты пространства изображения фиксированы, оценка вычислительной трудоемкости алгоритма не более чем линейна. Поскольку элементы сцены или картинки можно заносить в буфер кадра или в z-буфер в произвольном порядке, их не нужно предварительно сортировать по приоритету глубины. Поэтому экономится вычислительное время, затрачиваемое на сортировку по глубине.Основной недостаток алгоритма - большой объем требуемой памяти. Если сцена подвергается видовому преобразованию и отсекается до фиксированного диапазона координат z значений, то можно использовать z-буфер с фиксированной точностью. Информацию о глубине нужно обрабатывать с большей точностью, чем координатную информацию на плоскости (х, y); обычно бывает достаточно 20 бит. Буфер кадра размером 512х512х24 бит в комбинации с z-буфером размером 512х512х20 бит требует почти 1.5 мегабайт памяти. Однако снижение цен на память делает экономически оправданным создание специализированных запоминающих устройств для z-буфера и связанной с ним аппаратуры.

Альтернативой созданию специальной памяти для z-буфера является использование для этой цели оперативной или массовой памяти. Уменьшение требуемой памяти достигается разбиением пространства изображения на 4, 16 или больше квадратов или полос. В предельном варианте можно использовать г-буфер размером в одну строку развертки. Для последнего случая имеется интересный алгоритм построчного сканирования. Поскольку каждый элемент сцены обрабатывается много раз, то сегментирование z-буфера, вообще говоря, приводит к увеличению времени, необходимого для обработки сцены. Однако сортировка на плоскости, позволяющая не обрабатывать все многоугольники в каждом из квадратов или полос, может значительно сократить этот рост.Другой недостаток алгоритма z-буфера состоит в трудоемкости и высокой стоимости устранения лестничного эффекта, а также реализации эффектов прозрачности и просвечивания. Поскольку алгоритм заносит пикселы в буфер кадра в произвольном порядке, то нелегко получить информацию, необходимую для методов устранения лестничного эффекта, основывающихся на предварительной фильтрации. При реализации эффектов прозрачности и просвечивания, пикселы могут заноситься в буфер кадра в некорректном порядке, что ведет к локальным ошибкам.Хотя реализация методов устранения лестничного эффекта, основывающихся на префильтрации, в принципе возможна [7], практически это сделать трудно. Однако относительно легко реализуются методы постфильтрации (усреднение подпикселов). Напомним, что в методах устранения лестничного эффекта, основывающихся на постфильтрации, сцена вычисляется в таком пространстве изображения, разрешающая способность которого выше, чем разрешающая способность экрана. Поэтому возможны два подхода к устранению леcтничного эффекта на основе постфильтрации. В первом используется буфер кадра, заданный в пространстве изображения, разрешение которого выше, чем у экрана, и z-буфер, разрешение которого совпадает с разрешением экрана. Глубина изображения вычисляется только в центре той группы подпикселов, которая усредняется. Если для имитации расстояния от наблюдателя используется масштабирование интенсивности, то этот метод может оказаться неадекватным.Во втором методе оба буфера, заданные в пространстве изображения, имеют повышенную разрешающую способность. При визуализации изображения как пикселная информация, так и глубина усредняются. В этом методе требуются очень большие объемы памяти. Например, изображение размером 512х512х24 бита, использующее z-буфер размером 20 бит на пиксел, разрешение которого повышено в 2 раза по осям х и у и на котором устранена ступенчатость методом равномерного усреднения, требует почти 6 мегабайт памяти. Более формальное описание алгоритма z-буфера таково: Заполнить буфер кадра фоновым значением интенсивности или цвета. Заполнить z -буфер минимальным значением z. Преобразовать каждый многоугольник в растровую форму в произвольном порядке. Для каждого Пиксел(x,y) в многоугольнике вычислить его глубину z(x,y). Сравнить глубину z(х,у) со значением Zбуфер(х,у), хранящимся в z-буфере в этой же позиции. Если z(х, у) > Zбуфер (х,у), то записать атрибут этого многоугольника (интенсивность, цвет и т. п.) в буфер кадра и заменить Zбуфер(х,у) на z(х,у). В противном случае никаких действий не производить. В качестве предварительного шага там, где это целесообразно, применяется удаление нелицевых граней. Если известно уравнение плоскости, несушей каждый многоугольник, то вычисление глубины каждого пиксела на сканирующей строке можно проделать пошаговым способом. Напомним, что уравнение плоскости имеет вид  aх + by + сz + d = 0 z = - (ах+ by+d)/c<>0 Для сканирующей строки y = const. Поэтому глубина пиксела на этой строке, у которого x1 = х +x, равна z1 - z = -(ax1 + d)/c+ (ах + d)/c = а(х - х1)/с или z1 = z - (a/c)x Но x = 1, поэтому z1 =z - (a/с). Алгоритм Робертса очень простыми действиями достигает успешного построения изображений отдельных выпуклых многогранных объектов. Основным недостатком метода, определившим ограниченность его распространения, являются неспособность без привлечения других подходов реализовать падающие тени, невозможность передачи зеркальных эффектов и преломления света и, наконец, строгая ориентация метода только на выпуклые многогранники. В модификациях алгоритма Робертса, ориентированных на изображение множества выпуклых объектов, алгоритм выполняется в три этапа. На первом этапе алгоритм Робертса используется в классическом виде для удаления нелицевых (невидимых) граней каждого объекта в отдельности. На втором этапе каждое из множества оставшихся ребер оценивается на экранирование всеми другими телами. Наконец, на третьем этапе определяют отрезки, которые образуют новые ребра при протыкании телами друг друга. Несложно развить этот подход для закрашивания видимых граней, однако проблема падающих теней остается открытой...

9. Моделирование реалистичного отражения, преломления и поглощения света. Методы закрашивания граней Фонга и Гуро. Построение реалистичных изображений поверхностей. Моделирование текстуры и источников света.

Идеальная зеркально отражающая поверхность. Угол между нормалью и падающим лучом (θi) равен углу между нормалью и отражённым лучом (θr). Падающий луч, отражённый и нормаль располагаются в одной плоскости. Поверхность считается идеально зеркальной, если на ней отсутствуют какие-либо неровности, шероховатости. Собственный цвет у такой поверхности не наблюдается. Световая энергия падающего луча отражается только по линии отражённого луча. В векторной форме это может быть представлено так: (см. рис. VI.1, все векторы считаем единичными):

.

И деальная преломляющая поверхность. Преломлённый луч лежит в плоскости падения; отношение синуса угла падения (θi) к синусу угла преломления (θt) зависит от длины волны падающего света, но не зависит от угла падения (закон Снеллиуса): (где η1 и η2 – показатели преломления сред падающего и преломлённого лучей, являющиеся функциями длины волны падающего света λ, см. рис. VI.1). В векторном виде закон Снеллиуса выглядит следующим образом:

. (VI.2)

Случай, когда в (VI.2) выражение под корнем отрицательно, соответствует так называемому полному внутреннему отражению, когда вся световая энергия отражается от границы раздела сред. Очевидно, что вычисления отражения и преломления по формулам (VI.1) и (VI.2) в трёхмерных объектах, состоящих из выпуклых плоских граней (см. пункт IV.4.3), сложности не представляют, однако в реальных условиях идеальное отражение и преломление встречаются достаточно редко (например, бесцветная стеклянная поверхность).

И деальная диффузно отражающая поверхность. Идеальное диффузное отражение описывается законом Ламберта, согласно которому падающий свет рассеивается во все стороны с одинаковой интенсивностью. Такие поверхности называют ортотропными или диффузными. Примерами таких поверхностей являются песок, рыхлый снег, сухой асфальт. Для ортотропных поверхностей не существует однозначно определённого направления, в котором бы отражался падающий луч, то есть яркость отражённого от них излучения не зависит от положения наблюдателя. На рис. VI.2 показана индикатриса отражения для этого случая. В векторном виде закон Ламберта выглядит следующим образом:

Реалистичная закраска граней. Метод Гуро.

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

Пусть интенсивности падающего излучения в вершинах V1, V2, V3 плоской выпуклой грани известны и равны соответственно Iv1, Iv2, Iv3.9 (рис. VI.5). Рассмотрим проекцию грани на картинную плоскость. Пусть W – произвольная точка грани, через которую проходит строка сканирования. Введём точки W1 и W2 как точки пересечения данной строки с границами грани. И, наконец, будем считать, что интенсивность света на отрезке | W1 W2 |, а также вдоль всех рёбер грани изменяется линейно. Тогда:

  1. Находим , и .

  2. Ищем интенсивность света в точке W: , и перемещаемся по строке сканирования к следующему пикселю картинной плоскости, лежащему на данной строке.

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

Таким образом, метод Гуро обеспечивает непрерывное изменение интенсивности при переходе от одной грани к другой без разрывов. Однако он не обеспечивает непрерывности изменения интенсивности (т.е. непрерывности первой производной), в результате чего возможны дефекты изображения (иллюзия зрения: т.н. полосы Маха). Закраска Гуро обычно используется для поверхностей с преимущественно диффузным рассеянием света. Другой недостаток, который может проявиться в методах градиентной закраски, связан с «черепитчатой» поверхностью и представлен на рис. VI.6. Нормали к рёбрам одинаково направлены – следовательно различий в интенсивности от вершины к вершине не возникает, и поверхность будет закрашена как плоская.

Метод Фонга.

Аналогичен методу Гуро, но для определения цвета в каждой точке интерполируются не интенсивности отражённого света, а векторы нормалей. Последовательность действий:

1. Определяются нормали к граням.

2. По нормалям к граням определяются нормали в вершинах.

3. В каждой точке закрашиваемой грани определяется интерполированный вектор нормали:

, , и

. При этом все векторы нормалей обычно нормируют.

4. По направлению векторов нормали определяется цвет точек грани в соответствии с выбранной моделью отражения света.

Закраска Фонга требует заметно большего объёма вычислений. Изображения зеркальных поверхностей при использовании этого метода выглядят значительно реалистичнее, чем при закраске Гуро.

Источники света.

1. Рассеянный свет, представляющий собой «подсветку» сцены, чаще всего просто добавляется как константа к интенсивности света, падающего на данную точку сцены:

. (VI.)

Здесь ka – коэффициент фонового излучения, Ia – интенсивность фонового излучения.

2. Точечный источник. Если источник расположен относительно освещаемой поверхности на расстоянии, много большем его геометрических размеров, то его можно считать точечным. Для «классического» точечного источника:

. (VI.10)

Здесь Il – интенсивность источника, d – расстояние от источника до освещаемой грани, θi – угол между нормалью к грани и направлением на источник.

3. Неточечный источник. Так как в реальности классические точечные источники встречаются очень редко, используют формулу, дающую результат источника света, «близкого» к точечному:

, (VI.11)

где константа k определяет «степень реалистичности» точечного источника.

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

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

10.Модель прямой и обратной трассировки лучей. Адаптивная и распределенная трассировка лучей. Метод излучательности и фотонных карт. Программы реалистичной трехмерной графики. . Модели трассировки лучей.

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

Прямая трассировка лучей. Рассчитываются пути лучей света, идущие от источников до объектов сцены. Если такой первичный луч попадает в прозрачный объект, то преломляясь и теряя интенсивность, он идёт дальше и, возможно, попадает на другой объект, в свою очередь отражаясь от него. Так, многократно отражаясь и преломляясь, какая-то часть лучей приходят в точку наблюдения – т.е. эти лучи определяют цвет некоторых пикселей экранной плоскости. Если ограничиться некоторыми первичными лучами, выходящими из источников и попадающими только на объекты сцены или в камеру, а затем точно так же поступить со вторичными лучами, то время вычисления сцены уже будет конечным, а результат достаточно реалистичным. Например, тени и полутени от объектов сцены будут сформированы сразу же. Тем не менее даже небольшое изменение точки наблюдения приведёт к пересчёту всей сцены. Недостаток данного метода – огромное количество «лишних» вычислительных операций.

Обратная трассировка лучей. Данный метод позволяет значительно сократить перебор световых лучей. Метод разработан в 80-х годах, основополагающими считаются работы Уиттеда и Кея. Согласно этому методу отслеживание лучей производится не от источников света, а в обратном направлении – от точки наблюдения через каждый пиксель картинной плоскости. Таким образом, учитываются только те лучи, которые формируют изображение.

На рисунке VI.7 представлена сцена, рассчитываемая по методу обратной трассировки лучей. Из точки наблюдения через пиксель картинной (экранной) плоскости P* восстанавливается луч зрения , упираясь в точку P на видимой грани объекта трёхмерной сцены. Эта точка освещается с помощью первичных лучей, идущих от нескольких источников света. На рисунке показан один из источников, направление на который даёт вектор . Кроме того, если в этой точке грань является отражающей, то восстановив вектор отражения , симметричный относительно нормали к грани , отследим пересечение этого вектора с другими объектами сцены и проведём расчёт освещённости для точки P2. Если в точке P указано свойство прозрачности, то необходимо также отследить преломлённый луч для луча зрения , по которому также может быть получена информация об освещённости других объектов сцены (точка P3).

11.Графические библиотеки OpenGL. Структура языка, синтаксис команд, назначение библиотек. Рисование геометрических объектов, примитивов и сложных фигур. Преобразования координат. Создание интерактивных сцен на OpenGL. Материалы и текстурирование. Освещение, тени.

OpenGL (Open Graphics Library — открытая графическая библиотека) — спецификация, определяющая независимый от языка программирования кросс-платформенный программный интерфейс для написания приложений, использующих двумерную и трёхмерную компьютерную графику. Включает более 250-ти функций для рисования сложных трёхмерных сцен из простых примитивов. Используется при создании видео-игр, САПР, виртуальной реальности, визуализации в научных исследованиях. На платформе Windows конкурирует с DirectX. Спецификация. На базовом уровне, OpenGL — это просто спецификация, то есть документ, описывающий набор функций и их точное поведение. Производители оборудования на основе этой спецификации создают реализации — библиотеки функций, соответствующих набору функций спецификации. Реализация использует возможности оборудования там, где это возможно. Если аппаратура не позволяет реализовать какую-либо возможность, она должна быть эмулирована программно. Производители должны пройти специфические тесты (conformance tests — тесты на соответствие) прежде чем реализация будет классифицирована как OpenGL реализация. Таким образом, разработчикам программного обеспечения достаточно научиться использовать функции, описанные в спецификации, оставив эффективную реализацию последних разработчикам аппаратного обеспечения. Эффективные реализации OpenGL существуют для Windows, Unix-платформ, PlayStation 3 и Mac OS. Эти реализации обычно предоставляются изготовителями видеоадаптеров и активно используют возможности последних. Существуют также чисто программные реализации спецификации OpenGL, одной из которых является библиотека Mesa. Из лицензионных соображений Mesa является «неофициальной» реализацией OpenGL, хотя полностью с ней совместима на уровне кода. Спецификация OpenGL пересматривается Консорциумом ARB (Architecture Review Board), который был сформирован в 1992 году. Консорциум состоит из компаний, заинтересованных в создании широко распространённого и доступного API. Согласно официальному сайту OpenGL, членами ARB с решающим голосом на ноябрь 2004 года являются производители профессиональных графических аппаратных средств SGI, 3Dlabs, Matrox и Evans & Sutherland (военные приложения), производители потребительских графических аппаратных средств ATI и NVIDIA, производитель процессоров Intel, и изготовители компьютеров и компьютерного оборудования IBM, Apple, Dell, Hewlett-Packard и Sun Microsystems, а также один из лидеров компьютерной игровой индустрии id Software. Microsoft, один из основоположников Консорциума, покинула его в марте 2003 года. Помимо постоянных членов, каждый год приглашается большое количество других компаний, становящихся частью OpenGL ARB в течение одного года. Такое большое число компаний, вовлеченных в разнообразный круг интересов, позволило OpenGL стать прикладным интерфейсом широкого назначения с большим количеством возможностей. Курт Экелей (Kurt Akeley) и Марк Сегал (Mark Segal) являются авторами оригинальной спецификации OpenGL. Крис Фрэзиер (Chris Frazier) редактировал версию 1.1. Йон Лич (Jon Leech) редактировал версии с 1.2 по настоящую версию 2.0. Архитектура. OpenGL ориентируется на следующие две задачи: Скрыть сложности адаптации различных 3D-ускорителей предоставляя разработчику единый API. Скрыть различия в возможностях аппаратных платформ, требуя реализации недостающей функциональности с помощью программной эмуляции. Основным принципом работы OpenGL является получение наборов векторных графических примитивов в виде точек, линий и многоугольников с последующей математической обработкой полученных данных и построением растровой картинки на экране и/или в памяти. Векторные трансформации и растеризация выполняются графическим конвейером (graphics pipeline), который по сути представляет из себя дискретный автомат. Абсолютное большинство команд OpenGL попадают в одну из двух групп: либо они добавляют графические примитивы на вход в конвейер, либо конфигурируют конвейер на различное исполнение трансформаций. OpenGL является низкоуровневым процедурным API, что вынуждает программиста диктовать точную последовательность шагов, чтобы построить результирующую растровую графику (императивный подход). Это является основным отличием от дескрипторных подходов, когда вся сцена передается в виде структуры данных (чаще всего дерева), которое обрабатывается и строится на экране. С одной стороны императивный подход требует от программиста глубокого знания законов трёхмерной графики и математических моделей, с другой стороны — даёт свободу внедрения различных инноваций. Расширения. Стандарт OpenGL, с появлением новых технологий, позволяет отдельным производителям добавлять в библиотеку функциональность через механизм расширений. Расширения распространяются с помощью двух составляющих: заголовочный файл, в котором находятся прототипы новых функций и констант, а также драйвер устройства, поставляемого разработчиком. Каждый производитель имеет аббревиатуру, которая используется при именовании его новых функций и констант. Например, компания NVIDIA имеет аббревиатуру NV, которая используется при именовании ее новых функций, как, например, glCombinerParameterfvNV(), а также констант, GL_NORMAL_MAP_NV. Может случиться так, что определённое расширение могут реализовать несколько производителей. В этом случае используется аббревиатура EXT, например, glDeleteRenderbuffersEXT. В случае же, когда расширение одобряется Консорциумом ARB, оно приобретает аббревиатуру ARB и становится стандартным расширением. Обычно, расширения, одобренные Консорциумом ARB, включаются в одну из последующих спецификаций OpenGL. Список зарегистрированных расширений можно найти в официальной базе расширений.[1] Дополнительные библиотеки. Существует ряд библиотек, созданных поверх или в дополнение к OpenGL. Например, библиотека GLU, являющаяся практически стандартным дополнением OpenGL и всегда её сопровождающая, построена поверх последней, то есть использует её функции для реализации своих возможностей. Другие библиотеки, как, например, GLUT и SDL, созданы для реализации возможностей, недоступных в OpenGL. К таким возможностям относятся создание интерфейса пользователя (окна, кнопки, меню и др.), настройка контекста рисования (область рисования, использующаяся OpenGL), обработка сообщений от устройств ввода/вывода (клавиатура, мышь и др.), а также работа с файлами. Обычно, каждый оконный менеджер имеет собственную библиотеку-расширение для реализации вышеописанных возможностей, например, WGL в Windows или GLX в X Window System, однако библиотеки GLUT и SDL являются кросс-платформенными, что облегчает перенос написанных приложений на другие платформы. Библиотеки, как GLEW («The OpenGL Extension Wrangler Library») и GLEE («The OpenGL Easy Extension library») созданы для облегчения работы с расширениями и различными версиями OpenGL. Это особенно актуально для программистов в Windows, так как, заголовочные и библиотечные файлы, поставляемые с Visual Studio, находятся на уровне версии OpenGL 1.1. OpenGL имеет только набор геометрических примитивов (точки, линии, многоугольники) из которых создаются все трёхмерные объекты. Порой подобный уровень детализации не всегда удобен при создании сцен. Поэтому поверх OpenGL были созданы более высокоуровневые библиотеки, такие как Open Inventor и VTK. Данные библиотеки позволяют оперировать более сложными трёхмерными объектами, что облегчает и ускоряет создание трёхмерной сцены. Независимость от языка программирования Для подтверждения независимости от языка программирования были разработаны различные варианты привязки (binding) функций OpenGL или полностью перенесены на другие языки. Одним из примеров может служить библиотека Java 3D, которая может использовать аппаратное ускорение OpenGL. Прямая привязка функций реализована в Lightweight Java Game Library[2], которая имеет прямую привязку OpenGL для Java. Sun также выпустила версию Java OpenGL (JOGL), которая предоставляет прямую привязку к Си-функциям OpenGL, в отличие от Java 3D, которая не имеет столь низкоуровневой поддержки. Официальный сайт OpenGL имеет ссылки на привязки для языков Java, Фортран 90, Perl, Pike, Python, Ada, Visual Basic и Pascal.[3] Имеются также варианты привязки OpenGL для языков C++ и C#.[4]

12.Использование функций API Windows. Общие сведения о графических интерфейсах GDI и DirectX. Язык VRML для создания интерактивных трёхмерных миров в Интернет.

GDI (Graphics Device Interface, Graphical Device Interface) — один из трёх основных компонентов или «подсистем», вместе с ядром и Windows API составляющих пользовательский интерфейс (оконный менеджер GDI) Microsoft Windows. GDI — это интерфейс Microsoft Windows для представления графических объектов и передачи их на устройства отображения, такие как мониторы и принтеры. GDI отвечает за отрисовку линий и кривых, отображение шрифтов и обработку палитры. Он не отвечает за отрисовку окон, меню и т. п., эта задача закреплена за пользовательской подсистемой, располагающейся в user32.dll и основывающейся на GDI. GDI схож с классическим QuickDraw у Apple. Одно из наибольших преимуществ использования GDI вместо методов прямого доступа к оборудованию — это возможность расширения функций над различными устройствами. Используя GDI, можно легко рисовать на нескольких разных устройствах, таких как экран или принтер, и достичь практически одинакового отображения на них. Эта возможность лежит в центре всех WYSIWYG приложений для Microsoft Windows. Простые игры, которые не требуют быстрой графики, используют GDI. Однако GDI не может обеспечить качественную анимацию (нет возможности синхронизации с кадровым буфером). Также GDI не хватает растеризации для отрисовки 3D-графики. Современные игры используют DirectX или OpenGL, что даёт программистам доступ к большему количеству аппаратных возможностей.

DirectX — это набор API функций, разработанных для решения задач, связанных с игровым и видеопрограммированием под Microsoft Windows. Наиболее широко используется при написании компьютерных игр. Пакет средств разработки DirectX под Microsoft Windows бесплатно доступен на сайте Microsoft. Зачастую, свежие версии DirectX поставляются вместе с игровыми приложениями, так как DirectX API обновляется достаточно часто, и версия, включённая в ОС Windows зачастую является далеко не самой новой.

VRML — это текстовый формат файлов, где, например, вершины и грани многогранников могут указываться вместе с цветом поверхности, текстурами, блеском, прозрачностью и так далее. URL могут быть связаны с графическими компонентами, таким образом, что веб-браузер может получать веб-страницу или новый VRML-файл из сети Интернет тогда, когда пользователь щёлкает по какому-либо графическому компоненту. Движение, звуки, освещение и другие аспекты виртуального мира могут появляться как реакция на действия пользователя или же на другие внешние события, например таймеры. Особый компонент Script Node позволяет добавлять программный код (например, Java или JavaScript (ECMAScript)) к VRML-файлу. VRML-файлы обычно называются мирами и имеют расширение .wrl (например: island.wrl). Хотя VRML-миры используют текстовый формат они часто могут быть сжаты с использованием алгоритма компрессии gzip для того, чтобы их можно было передавать по сети за меньшее время. Большинство программ трёхмерного моделирования могут сохранять объекты и сцены в формате VRML. Стандарты Для дальнейшей коллективной разработки формата был создан консорциум Web3D. Первая версия VRML была выпущена в ноябре 1994 года. Эта версия была основана на API и файловом формате программной компоненты Open Inventor, изначально разработанной в SGI. Текущая и функционально завершенная версия — VRML97 (ISO/IEC 14772-1:1997). Сейчас VRML вытесняется форматом X3D. Интерфейс прикладного программирования (англ. Application Programming Interface, API [эй-пи-ай]; по-русски чаще произносят [апи́]) — набор готовых констант, структур и функций, используемых при программировании пользовательских приложений и обеспечивающих правильное взаимодействие между пользовательским приложением и операционной системой. API определяет функциональность, которую предоставляет программа (модуль, библиотека), при этом API позволяет абстрагироваться от того, как именно эта функциональность реализована. Если программу (модуль, библиотеку) рассматривать как чёрный ящик, то API — это множество «ручек», которые доступны пользователю данного ящика, которые он может вертеть и дёргать. Программные компоненты взаимодействуют друг с другом посредством API. При этом обычно компоненты образуют иерархию — высокоуровневые компоненты используют API низкоуровневых компонентов, а те, в свою очередь, используют API ещё более низкоуровневых компонентов. По такому принципу построены протоколы передачи данных по Internet. Стандартный протокол Internet (сетевая модель OSI) содержит 7 уровней (от физического уровня передачи пакетов бит до уровня протоколов приложений, подобных протоколам HTTP и IMAP). Каждый уровень пользуется функциональностью предыдущего уровня передачи данных и, в свою очередь, предоставляет нужную функциональность следующему уровню. Важно заметить, что понятие протокола близко по смыслу к понятию API. И то и другое является абстракцией функциональности, только в первом случае речь идёт о передаче данных, а во втором — о построении компьютерных приложений. API библиотеки функций и классов включает в себя описание сигнатур и семантики функций.

Сигнатура функции — часть общего объявления функции, позволяющая средствам трансляции идентифицировать функцию среди других. В различных языках программирования существуют разные представления о сигнатуре функции, что также тесно связано с возможностями перегрузки функции в этих языках. Иногда различают сигнатуру вызова и сигнатуру реализации функции. Сигнатура вызова обычно составляется по синтаксической конструкции вызова функции с учётом сигнатуры области видимости данной функции, имени функции, последовательности фактических типов аргументов в вызове и типе результата. В сигнатуре реализации обычно участвуют некоторые элементы из синтаксической конструкции объявления функции: спецификатор области видимости функции, её имя и последовательность формальных типов аргументов. Например, в языке программирования Си++ простая функция однозначно опознаётся компилятором по её имени и последовательности типов её аргументов, что составляет сигнатуру функции в этом языке. Если функция является методом некоторого класса, то в сигнатуре будет участвовать и имя класса. В языке программирования Java сигнатуру метода составляет его имя и последовательность типов параметров; тип значения в сигнатуре не участвует.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]