Знакомство с OpenGL
OpenGL (Open Graphics Language) — это интерфейс трехмерной графики, предложенный фирмой SGI (которая ранее называлась Silicon Graphics Incorporated). OpenGL появился в результате переработки специализированного 3D-интерфейса этой фирмы IrisGL на универсальный, независимый от платформы. Данный интерфейс позволяет создавать трехмерные графические изображения независимо от используемых оконных интерфейсов, операционной системы и графических устройств.
В настоящее время разработкой стандарта OpenGL занимается индустриальный консорциум OpenGL Architecture Review Board (ARB), в состав которого входят представители таких фирм, как SGI, Microsoft, Intel, IBM и Digital Equipment.
Версии OpenGL существуют на графических станциях фирмы SGI (под управлением как операционной системы IRIX, так и Windows NT), рабочих станциях фирмы DEC, компьютерах IBM RS/6000 и всех платформах, поддерживаемых операционными системами семейства Microsoft Windows.
OpenGL API
В основе OpenGL лежит библиотека графических функций, предоставляющих разработчику все необходимое для создания и отображения плоских (2D) и пространственных (3D) моделей и анимации. Эта библиотека, содержащая более 100 функций, обеспечивает средства для управления графическими примитивами, выполнения матричных преобразований, задания источников света, теней, управления цветами и т.п. Существует также библиотека функций более высокого уровня, сервисы которой позволяют отображать полигональные трехмерные модели, строить кривые и поверхности на основе NURBS (неоднородных рациональных B-сплайнов) и поддерживают ряд других операций. Отдельные реализации библиотеки OpenGL содержат расширения, специфичные для конкретной операционной системы или аппаратной платформы.
Как мы отметили выше, OpenGL независима от конкретной платформы. Поэтому приложение, созданное, например, для графической станции SGI, может быть перенесено на платформу Windows c минимальными затратами — переписываются только те части кода, которые непосредственно связаны со взаимодействием с оконной системой или операционной системой.
На рис. 1 показано, как ядро OpenGL интегрируется в операционную систему.
Программный интерфейс OpenGL не содержит функций для управления окнами и функции для взаимодействия с пользователем — они исключены для обеспечения максимальной аппаратной независимости библиотеки. Тем не менее программисты могут объединять возможности OpenGL с другими библиотеками или функциями, предоставляемыми ядром той или иной операционной системы.
Следует также отметить, что OpenGL не содержит функций для реализации сложных моделей — только геометрические примитивы типа точек, линий, многоугольников и т.п. При необходимости более сложные модели создаются на базе этих графических примитивов либо с использованием библиотек, расширяющих базовую функциональность OpenGL.
Функции OpenGL доступны практически из любого языка программирования, но большинство примеров и кода в статьях приводится на языке С. В Internet вы сможете найти необходимые интерфейсные модули для Visual Basic, Delphi и других языков. Обратите внимание на то, что фирма Softoholic (http:\\www.softoholic.bc.ca) выпустила компонент OGL ActiveX Control, который реализует всю функциональность OpenGL и доступен из различных языков программирования и сред, поддерживающих компоненты ActiveX. Также существует библиотека расширения OpenGL на языке С++ — OpenInventor.
Аппаратная поддержка
Большое число графических карт с ускорителями и специализированных 3D-карт поддерживает выполнение примитивов OpenGL на аппаратном уровне. Эти карты, а также специализированные процессоры, перечислены в приложении 1.
Основные функции OpenGL
Ниже кратко перечислены основные функции и возможности, реализованные в библиотеке OpenGL. Для удобства некоторые термины приводятся как на русском языке, так и в оригинале.
-
Геометрические примитивы. Позволяют задавать математическое описание объектов. В настоящее время существуют следующие примитивы: точки, линии, многоугольники и растровые изображения (bitmap).
-
Цветное кодирование в формате RGBA (Red-Green-Blue-Alpha) или в режиме индексированных цветов.
-
Просмотр и моделирование позволяют размещать трехмерные объекты на сцене, передвигать камеры вокруг сцены и выбирать требуемый вид (точку обзора), для которого выполняется рендеринг.
-
Текстуры помогают привнести реализм в модели за счет имитации реальных поверхностей (их изображения накладываются поверх «скелета» модели, составленного из многоугольников).
-
Освещение является неотъемлемой частью всей трехмерной графики. OpenGL предоставляет в распоряжение пользователя функции для расчета цвета любой точки — необходимо только описать свойства материала и источники света для той или иной сцены.
-
Двойная буферизация позволяет устранить мерцание при анимации. Каждый следующий кадр анимации строится в отдельном буфере памяти и отображается только по завершении рендеринга.
-
Антиалиасинг(Anti-aliasing) сглаживает «ступенчатые» края цветовых переходов. Антиалиасинг является стандартной техникой в компьютерной графике, и суть ее заключается в изменении цвета и интенсивности точек вблизи линии резкого перехода цветов для уменьшения появления «лестничного эффекта». «Ступенчатые» линии особенно заметны при низком графическом разрешении.
-
Затенение по методу Гуро (Gouraud Shading) — закраска 3D-объектов, при которой сначала рассчитывается освещение вдоль ребер треугольников на основании данных об освещенности вершин, а затем на основании этих данных и направления градиентов изменения цвета закрашивается внутренняя поверхность треугольников.
-
Z-буферизация используется для сохранения информации о «глубине» трехмерного объекта (Z-координаты). Z-буфер используется для определения близости наблюдателя к объекту и удаления невидимых поверхностей.
-
Атмосферные эффекты — туман или дымка делают компьютерные изображения более реалистичными. Без атмосферных эффектов изображения зачастую выглядят нереально резкими и слишком четко очерченными. Fog — это термин, который на самом деле описывает алгоритм моделирования тумана, дымки, загрязнений или просто эффект присутствия воздуха, придавая изображению определенную глубину.
-
Alpha-смешение (Alpha Blending) использует значение Альфа-буфера (информации о прозрачности пикселов) как составляющую расширенного цветового кода растрового изображения в формате RGBA, позволяя комбинировать цвет обрабатываемого фрагмента с цветом точек, которые уже хранятся в буфере изображения. Представьте, например, отрисовку прозрачного голубого стекла перед красной коробкой. Alpha-смешение позволяет моделировать прозрачность стекла таким образом, что часть коробки, которая видна сквозь стекло, будет иметь необходимый в данном случае сиреневый оттенок.
-
Трафаретные планы (Stencil Planes) ограничивают отрисовку на некоторых областях экрана по маске (трафарету).
-
Списки отображения (Display Lists) позволяют сохранять команды отрисовки в некотором списке для дальнейшего рендеринга. При правильном применении такие списки могут заметно повысить скорость и производительность рендеринга.
-
Полиномные вычисления (Polynomial Evaluations) используются для поддержки NURBS-сплайнов. С их помощью можно рисовать плавные кривые через небольшой набор опорных точек, что исключает необходимость сохранять все промежуточные значения.
-
Обратная связь, выделение и выбор (Feedback, Selection, Picking) — эти функции дают возможность создавать приложения, позволяющие пользователю выбирать область экрана или отдельный объект, изображенный на экране. Режим обратной связи позволяет разработчику получать результаты расчетов, полученных при рендеринге.
-
Растровые примитивы — растровые изображения (прямоугольные картинки, состоящие из точек).
-
Операции с пикселами.
-
Различные преобразования: вращение, масштабирование, перемещение, перспективные искажения и т.д.
Заключение
Завершая этот небольшой обзор библиотеки OpenGL, отметим, что она, несомненно, является одной из самых перспективных библиотек трехмерной графики, имеющихся в распоряжении разработчиков. Основное преимущество данной библиотеки — аппаратная и платформная независимость, позволяющая экономить силы разработчиков при создании приложений, работающих на различных платформах.
Отметим, что в качестве дополнения к библиотеке OpenGL существует библиотека GLUT (GL Utility Toolkit), которая обеспечивает более простую интеграцию OpenGL с конкретным оконным интерфейсом — X11, Windows, Motif и т.п. Использование этой библиотеки не только скрывает от разработчика нюансы программирования того или иного интерфейса, но и делает приложение независимым от платформы.
Большое количество приложений поддерживает работу с библиотекой OpenGL. Некоторые из них перечислены в приложении 2.
КомпьютерПресс 7'1999