Стандарт OpenGL
Сейчас трёхмерные изображения можно увидеть везде,
начиная от компьютерных игр и заканчивая системами моделирования в
реальном времени. Раньше, когда трёхмерная графика существовала
только на суперкомпьютерах, не существовало единого стандарта в
области графики. Все программы писались или с "нуля", или же с
использованием накопленного опыта, но в каждой программе
реализовывались свои методы для отображения графической
информации.
С приходом мощных процессоров и графических ускорителей
трёхмерная графика стала реальностью для персональных компьютеров.
Но в тоже время производители программного обеспечения столкнулись с
серьёзной проблемой - это отсутствие каких-либо стандартов, которые
позволяли писать программы, независимые от оборудования и
операционной системы. Одним из первых таких стандартов, существующий
и по сей день является OpenGL.
Ещё в 1982 году в Стенфордском университете была
разработана концепция графической машины, на основе которой фирма
Silicon Graphics в своей рабочей станции Silicon IRIS реализовала
конвейер рендеринга. Таким образом была разработана графическая
библиотека IRIS GL. На основе библиотеки IRIS GL, в 1992 году был
разработан и утверждён графический стандарт OpenGL. Его создатели -
это крупнейшие фирмы-разработчики как оборудования, так и
программного обеспечения: Silicon Graphics Inc., Microsoft, IBM
Corporation, Sun Microsystems Inc., Digital Equipment Corporation,
Evans & Sutherland, Hewlett-Packard Corporation, Intel
Corporation и Intergraph Corporation.
OpenGL переводится как Открытая Графическая Библиотека
(Open Graphics Library), это означает, что OpenGL - это открытый и
мобильный стандарт. Программы, написанные с помощью OpenGL можно
переносить практически на любые платформы, получая при этом
одинаковый результат, будь это графическая станция или
суперкомпьютер. OpenGL освобождает программиста от написания
программ для конкретного оборудования. Если устройство поддерживает
какую-то функцию, то эта функция выполняется аппаратно, если нет, то
библиотека выполняет её программно.
Что же представляет из себя OpenGL? С точки зрения
программиста OpenGL - это программный интерфейс для графических
устройств, таких как графические ускорители. Он включает в себя
около 150 различных команд, с помощью которых программист может
определять различные объекты и производить рендеринг. Говоря более
простым языком, вы определяете объекты, задаёте их местоположение в
трёхмерном пространстве, определяете другие параметры (поворот,
масштаб, ...), задаёте свойства объектов (цвет, текстура, материал,
...), положение наблюдателя, а библиотека OpenGL позаботится о том
чтобы отобразить всё это на экране. Поэтому можно сказать, что
библиотека OpenGL является только воспроизводящей (Rendering), и
занимается только отображением 3Д обьектов, она не работает с
устройствами ввода (клавиатуры, мыши). Также она не поддерживает
менеджер окон.
OpenGL имеет хорошо продуманную внутреннюю структуру и
довольно простой процедурный интерфейс. Несмотря на это с помощью
OpenGL можно создавать сложные и мощные программные комплексы,
затрачивая при этом минимальное время по сравнению с другими
графическими библиотеками.
В некоторых библиотеках OpenGL (например, под X
Windows) имеется возможность изображать результат не только на
локальной машине, но также и по сети. Приложение, которое
вырабатывает команды OpenGL называется клиентом, а приложение,
которое получает эти команды и отображает результат - сервером.
Таким образом можно строить очень мощные воспроизводящие комплексы
на основе нескольких рабочих станций или серверов, соединённых
сетью.
Основные возможности OpenGL
-
Геометрические и растровые примитивы, на основе которых
строятся все объекты. Из геометрических примитивов библиотека
предоставляет: точки, линии, полигоны. Из растровых: битовый
массив (bitmap) и образ (image);
-
Использование В-сплайнов для рисования кривых по опорным
точкам.
-
Видовые и модельные преобразования, с помощью которых можно
располагать обьекты в пространстве, вращать их, изменять форму, а
также изменять положение камеры из которой ведётся наблюдение.
-
Работа с цветом. OpenGL предоставляет программисту возможность
работы с цветом в режиме RGBA (красный-зелёный-синий-альфа) или
используя индексный режим, где цвет выбирается из палитры.
-
Удаление невидимых линий и поверхностей. Z-буферизация.
-
Двойная буферизация. OpenGL предоставляет как одинарную так и
двойную буферизацию. Двойная используется для того, чтобы
устранить мерцание при мультипликации, т.е. изображение каждого
кадра сначала рисуется во втором (невидимом) буфере, а потом,
когда кадр полностью нарисован, весь буфер отображается на
экране.
-
Наложение текстуры. Позволяет придавать объектам
реалистичность. На объект, например шар, накладывается текстура
(просто какое-то изображение), в результате чего наш объект теперь
выглядит не просто как шар, а как разноцветный мячик.
-
Сглаживание. Позволяет скрыть ступенчатость, что свойственна
растровым дисплеям. Сглаживание изменяет интенсивность и цвет
пикселей около линии, при этом линия смотрится на экране без
всяких зигзагов.
-
Освещение. Позволяет задавать источники света, их расположение,
интенсивность и т.д.
-
Атмосферные эффекты (туман, дым, ...). Всё это также позволяет
придать объектам или сцене реалистичность, а также "почувствовать"
глубину сцены.
-
Прозрачность объектов.
-
Использование списков изображений.
Дополнительные библиотеки OpenGL
Несмотря на то, что библиотека OpenGL предоставляет
практически все возможности для моделирования и воспроизведения
трёхмерных сцен, некоторые из функций, которые требуются при работе
с графикой, отсутствуют в стандартной библиотеке OpenGL. Например,
чтобы задать положение и направление камеры, с которой будет
наблюдаться сцена, нужно самому рассчитывать модельную матрицу, а
это далеко не все умеют. Поэтому для OpenGL существуют, так
называемые, вспомогательные библиотеки.
Первая из этих библиотек называется GLU. Эта библиотека уже стала стандартом и
поставляется вместе с главной библиотекой OpenGL. В состав этой
библиотеки вошли более сложные функции, например для того чтобы
определить цилиндр или диск потребуется всего одна команда. Также в
библиотеку вошли функции для работы со сплайнами, реализованы
дополнительные операции над матрицами и дополнительные виды
проекций.
Следующая библиотека, также широко используемая - это
GLUT. Это также независимая от платформы
библиотека. Она реализует не только дополнительные функции OpenGL,
но и предоставляет функции для работы с окнами, клавиатурой и
мышкой. Для того чтобы работать с OpenGL в конкретной операционной
системе (например, Windows или X Windows), надо провести некоторую
предварительную настройку и эта предварительная настройка зависит от
конкретной операционной системы. С библиотекой GLUT всё намного
упрощается, буквально несколькими командами можно определить окно, в
котором будет работать OpenGL, определить прерывание от клавиатуры
или мышки и всё это не будет зависеть от операционной системы.
Библиотека предоставляет также некоторые функции, с помощью которых
можно определять некоторые сложные фигуры, такие как конусы,
тетраэдры, и даже можно с помощью одной команды определить
чайник!
Есть ещё одна библиотека похожая на GLUT, называется
она GLAUX. Это библиотека разработана фирмой
Microsoft для операционной системы Windows. Она во многом схожа с
библиотекой GLUT, но немного отстаёт от неё по своим возможностям. И
ещё один недостаток заключается в том, что библиотека GLAUX
предназначена только для Windows, в то время как GLUT поддерживает
очень много операционных систем.
Существуют и другие дополнительные библиотеки для
OpenGL. Все они добавляют что-то своё или ориентированы на какую-то
платформу. Например, существует такая библиотека как GLX - это расширение для X Windows, позволяющее
использовать в X Windows OpenGL. GLX предоставляет не только
локальный рендеринг, но и рендеринг по сети.
Альтернативы OpenGL
Хотя библиотека OpenGL и считается одной из лучших
библиотек как для профессионального применения, так и для игр, у неё
существуют и конкуренты.
Одним из главных конкурентов считается Direct3D из пакета DirectX,
разработанный фирмой Microsoft. Direct3D создавался исключительно
для игровых приложений. Если сравнивать эти две библиотеки, то
нельзя сказать, что одна из них лучше, а другая хуже, у каждой
библиотеки имеются свои особенности. Например, если сравнивать их в
плане переносимости программ с одной платформы на другую, то
Direct3D будет работать только на Intel платформах под управлением
операционной системы Windows, в то время программы, написанные с
помощью OpenGL можно успешно перенести на такие платформы как Unix,
Linux, SunOS, IRIX, Windows, MacOS и многие другие.
А вот в плане объектно-ориентированного подхода OpenGL
уступает Direct3D. OpenGL работает по принципу конечного автомата,
переходя из одного состояния в другое, совершая при этом какие-то
преобразования. Ещё одним преимуществом Direct3D является поддержка
дешёвого оборудования, OpenGL же поддерживается не на всех
графических картах, но для профессиональных ускорителей OpenGL
является стандартом де-факто. И ещё, OpenGL легче чем Direct3D для
изучения основ графики, OpenGL можно применять например для
начального изучения трёхмерной графики.
GLide до недавнего времени тоже
являлся довольно широко используемым стандартом для игровых
приложений. Этот стандарт создала фирма 3Dfx и библиотека GLide
создавалась исключительно для видео ускорителей фирмы 3Dfx Voodoo и
была оптимизирована исключительно под них. GLide является более
низкоуровневым по отношению к OpenGL и по своим командам похож на
него. GLide мало чем отличается от OpenGL по своим возможностям, за
исключением некоторых функций, которые специально предназначались
для Voodoo ускорителей. Но к сожалению 3Dfx отказалась от этого
стандарта, передав его в руки разработчиков открытого программного
обеспечения.
Есть ещё несколько библиотек, среди них можно отметить
Heidi. Heidi это библиотека или, даже лучше
сказать, драйвер для визуализации трёхмерных сцен, используемый
только в 3D Studio Max и только под Windows NT.
Стоит также отметить совместную разработку двух
гигантов - Microsoft и Silicon Graphics - в области стандартизации
компьютерной графики. Этот проект носит название Fahrenheit и сейчас находится в стадии
разработки.
Заключение
Заканчивая вводный рассказ про OpenGL хочется подвести
некоторые итоги. Итак OpenGL представляет собой единый стандарт для
разработки трёхмерных приложений, сочетает в себе такие качества как
мощь и в то же время простоту. Мультиплатформенность позволяет без
труда переносить программное обеспечение с одной операционной
системы в другую. OpenGL предоставляет вам в распоряжение всю мощь
аппаратных возможностей, которые вы имеете на данном компьютере и
при написании программ вам не нужно будет беспокоится о конкретных
деталях используемого оборудования, за вас побеспокоится драйвер
OpenGL. OpenGL прекрасно подходит как для профессионалов так и для
новичков в области компьютерной
графики.
|