Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KG / КГ_10глава.doc
Скачиваний:
110
Добавлен:
26.05.2014
Размер:
584.19 Кб
Скачать

Глава 10

Графическая библиотека OpenGL

Библиотека OpenGL (Open Graphic Library), разработанная фирмой Silicon Graphics, стала индустриальным стандартом. Интерфейс OpenGL поддержи­вается многими операционными системами для разнообразных аппаратных платформ — от персональных компьютеров до сверхмощных суперкомпью­теров. Важным аспектом является также поддержка интерфейса OpenGL производителями аппаратных графических акселераторов. Поэтому OpenGL позволяет достаточно просто создавать быстродействующие графические программы и часто используется разработчиками компьютерных игр, напри-" мер, Quake. Библиотека OpenGL поддерживается в операционной системе Windows, начиная с Windows 95 версии OSR 2, — были добавлены соответ­ствующие модули DLL, а также включены несколько функций и структур данных в API Win32.

Интерфейс OpenGL реализован в виде набора функций, которые можно ис­пользовать в прикладных программах. Известно также расширение для OpenGL — библиотека классов Open Inventor.

Разработка графических программ OpenGL для среды Windows подобна про­граммированию графики GDI функций API, которое мы рассмотрели в гла­вах 5—8. Однако есть особенности, некоторые из которых мы изучим. Для получения более подробных сведений можно порекомендовать литературные источники— прежде всего, это документация Windows SDK [61]. В значи­тельной мере этот источник был использован в книге [25].

Быстродействие графических программ, использующих OpenGL, существен­но зависит от видеоадаптера. Аппаратная реализация всех базовых функций OpenGL — залог высокого быстродействия. В настоящее время многие ви­деоадаптеры содержат специальный графический процессор (один или не­сколько) для поддержки функции графики. Кроме того, что видеоадаптер должен аппаратно выполнять все базовые функции OpenGL (такие как пре­образования координат, расчеты освещения, наложение текстур, отсечение,

вывод полигонов), для достижения высокого быстродействия должен быть установлен специальный драйвер. Драйверы типа ICD (Installable Client Driver) обеспечивают интерфейс, способствующий эффективному использо­ванию аппаратных возможностей видеоадаптера. Другой тип драйвера— MCD — устанавливается обычно тогда, когда не все функции поддержаны аппаратно, и в этом случае они выполняются программно центральным про­цессором, что существенно медленнее.

Рассмотрим создание программ OpenGL на языке С, C++ в среде Windows. В главе 6 при рассмотрении графики GDI мы определили ключевой мо­мент — это создание контекста графического устройства (device context)., Графика OpenGL в этом плане похожа— необходимо сначала создать кон­текст, который здесь назван контекстом отображения (rendering context), и направить текущий вывод графики на него. Потом следует закрыть этот контекст, освободить память.

Будем программировать в стиле программ studEx предыдущих глав данной книги. Этот стиль заключается в непосредственном вызове функций API Windows без каких-либо посредников типа MFC (или иных подобных биб­лиотек). Во-первых, это уменьшает выполняемый код (поскольку каждому посреднику нужно платить — вот только здесь за что?), а во-вторых, позво­лит нам более детально ознакомиться с OpenGL как таковой. Дадим общую схему программы OpenGL.

1. Создание окна программы. Здесь необходимо обязательно установить стиль окна ws_clipchildren и ws_clipsiblings . Это осуществляется зада­нием значений аргументов функции createwindow.

2. После создания окна можно открывать контекст отображения. Рекомен­дуется открытие этого контекста делать во время обработки сообщения

WM_CREATE.

3. Чтобы создать контекст отображения, сначала необходимо открыть кон­текст окна (hdc), например, функцией GetDC.

4. Для выяснения характеристик контекста отображения устанавливаем со­ответствующие значения полей структуры pixelformatdescriptor и вызы­ваем функцию choosePixeiFormat. Эта функция возвращает номер пиксел-ного формата, который можно использовать. Если это номер 0, то созда­ние нужного контекста отображения невозможно.

5. Вызовом функции setPixelFormat задаем соответствующий пикселный формат в контексте hdc

6. На основе контекста hdc создаем контекст отображения hgirc вызовом функции wglCreateContext. Для переадресации текущего вывода графики

OpenGL В hglrc Необходимо Вызывать функцию wglMakeCurrent.

7. В ходе работы программы выводим графические объекты в текущий кон­текст отображения. Графический вывод можно осуществлять во время об­работки сообщения wm_paint или других сообщений. Для этого использу­ются функции для работы с графическими примитивами OpenGL.

8. Перед закрытием окна программы необходимо закрыть все открытые кон­тексты отображения. Также следует закрыть все контексты графического устройства. Это можно сделать в ходе обработки сообщения wmdestroy ВЫЗОВОМ функций ReleaseDG И wglDeleteContext.

Чтобы использовать библиотеку OpenGL, в среде разработки программ на С и C++ необходимо подключить соответствующие файлы заголовков. Напри­мер, в среде Borland C++ 5.02 для этого достаточно включить в текст про­граммы строки:

Соседние файлы в папке KG