Современные стандарты и интерфейсы программирования компьютерной графики

Одним из наиболее известных графических интерфейсов является OpenGL. Этот интерфейс в виде библиотеки графических функций представляет собой открытый стандарт, разработанный и утвержденный в 1992 г. девятью фирмами, среди которых были Digital Equipment Corp., Evans & Sutherland, Hewlett Packard Co., IBM Corp., Intel Corp., Silicon Graphics Inc., Sun Microsystems и Microsoft. В основу стандарта легла библиотека IRIS GL, разработанная фирмой Silicon Graphics Inc. Этот стандарт поддерживается многими операционными системами (в том числе и Windows), а также производителями графических акселераторов.

Другим известным графическим интерфейсом является DirectX с подсистемой трехмерной графики Direct3D, а также подсистемой DirectDraw, которая обеспечивает, в частности, непосредственный доступ к видеопамяти. Этот интерфейс разработан Microsoft и предназначен только для Windows.

В отличие от OpenGL, который сразу разрабатывался для функционирования с графическими ускорителями, Direct3D был изначально ориентирован на программный рендеринг. Кроме того, Direct3D фактически не является стандартом в строгом смысле этого слова – это лишь некоторый интерфейс, объявленный и полностью контролируемый компанией Microsoft.

Известны также другие разработки графических интерфейсов для видеоадаптеров. Например, интерфейс Glide, разработанный 3Dfx для графических видеоадаптеров семейства Voodoo (следует заметить, что компания 3Dfx недавно прекратила свое существование как изготовитель видеоадаптеров).

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

На сегодняшний день для персональных компьютеров существует два таких интерфейса: OpenGL, уже более 10 лет являющийся стандартом, и Direct3D, предложенный и поддерживаемый компанией Microsoft.

OpenGL представляет собой открытый процедурный интерфейс к видеоадаптеру, позволяющий легко задавать объекты в пространстве и операции над ними.

С самого начала OpenGL разрабатывался как эффективный, аппаратно- и платформенно-независимый интерфейс. Он не включает в себя специальных команд, привязанных к какой-либо конкретной операционной системе. Для выполнения операций работы с окнами и организации ввода-вывода существуют дополнительные библиотеки.

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

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

Работа с OpenGL основывается на модели клиент-сервер. Приложение выступает в роли клиента - оно генерирует команды, а сервер OpenGL выполняет их.

Библиотека OpenGL поддерживает различные палитровые режимы, позволяет работать в режимах непосредственного задания цвета High Color и True Color.

Для облегчения работы с OpenGL, и в частности работы с окнами и вводом, удобно использовать библиотеку glut. Эта кросс-платформенная библиотека позволяет легко создавать переносимые приложения, использующие OpenGL. Библиотека glut (OpenGL Utility Toolkit) является прозрачным интерфейсом для написания переносимых программ, использующих OpenGL и взаимодействующих с оконной системой. Она позволяет писать программы на ряде языков, включая C++, Delphi.

Для рисования геометрических объектов OpenGL организует несколько буферов: буфер изображения (фрейм-буфер), буфер глубины (z-буфер), буфер трафарета и аккумулирующий буфер.

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

Все геометрические примитивы задаются в терминах вершин. Каждая вершина задается набором чисел.

OpenGL работает с однородными координатами (x, y, z, w). Если координата z не задана, то она полагается равной 0. Если координата w не задана, то она полагается равной единице.

В процессе построения изображения координаты вершин подвергаются различным преобразованиям (видовым, проектирования, перспективного деления и др.). В OpenGL существуют две матрицы для преобразования координат точки: матрица моделирования (modelview matrix) и матрица проектирования (projection matrix). Первая служит для задания положения объекта и его ориентации, а вторая отвечает за выбранный способ проектирования. Кроме того, существует матрица преобразования текстурных координат (texture matrix). Имеется набор различных процедур, умножающих текущую матрицу (моделирования или проектирования) на матрицу выбранного геометрического преобразования. Если последовательно указано несколько преобразований, то в результате текущая матрица будет последовательно умножена на матрицы соответствующих преобразований.

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

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

Линия или заполненная грань может быть нарисована одним цветом (плоское закрашивание) или путем интерполяции цветов в вершинах (закрашивание методом Гуро).

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



[1] Примеры (рис. 17 и 18) взяты из источника [12], с.112-113.








Дата добавления: 2015-11-20; просмотров: 1304;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

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

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.006 сек.