Опубликован: 08.07.2007 | Уровень: специалист | Доступ: платный
Лекция 2:

Двумерная графика с использованием Direct3D

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
Аннотация: В данной лекции рассматриваются принципы работы с двухмерной графикой с использованием графической библиотеки Direct3D. Рассмотрены также примеры обращения к интерфейсам Direct3D с помощью C++ и Pascal, основные принципы работы с примитивами и методы их применения

Библиотека DirectX

С ростом производительности персональных компьютеров и появлением видеоакселераторов нового поколения трехмерная графика быстро распространилась в большинстве сфер жизни пользователей: дома, в малом и среднем офисе, игровых залах. Одновременно с развитием новых технологий ускорения видеоизображения началось на первый взгляд скрытое, но ожесточенное сражение производителей чипсетов, видеокарт и программного обеспечения по завоеванию любви и признания конечного пользователя. Кроме этой конкурентной борьбы присутствует еще и более глобальная – признание одного из промышленных стандартов большинством разработчиков компьютерных игр и производителями графических видеокарт. Объектом борьбы в данном случае выступает один из прикладных программных интерфейсов ( API – Application Programming Interfaces ). На данный момент среди общего числа подобных API остались только две графические библиотеки, которые можно рассматривать как основные – DirectX корпорации Microsoft и OpenGL – компании Silicon Graphics.

DirectX – совокупность технологий, разработанных корпорацией Microsoft с целью превратить Windows в оптимальную платформу для мультимедийных приложений и компьютерных игр с полноцветной графикой, видео, трехмерной анимацией и объемным звуком. История появления технологии DirectX уходит к 1995 году, когда под пристальное внимание корпорации попала британская компания RenderMorphics с небольшим проектом, представленным на обычной выставке. Этот проект умел отображать неплохие трехмерные объекты в реальном времени на обычном персональном компьютере, доступном каждому. После приобретения данной компании, Microsoft приступает к разработке графической библиотеки под Windows 95. Данная разработка вылилась в создание нового API, который дал разработчикам игр более прямой доступ до аппаратного обеспечения, увеличив тем самым производительность игр под Windows. В данном тексте речь будет идти о девятой версии DirectX.

Вообще, DirectX – набор API функций, предоставляющий низкоуровневый интерфейс к аппаратным средствам (ускорители 3D графики, звуковые и сетевые платы) персонального компьютера. Этот набор функций позволяет не привязываться жестко к тем или иным аппаратным средствам и не требует написания аппаратно-зависимого кода (если аппаратные средства не поддерживают каких-либо возможностей, то они эмулируются на программном уровне).

DirectX представляет собой набор следующих основных компонент:

  • DirectX Graphics (компонент, который управляет всем графическим выводом; этот API предоставляет функции для работы с 2D и 3D рисованием)
  • DirectInput (компонент, включающий поддержку (API) таких устройств ввода как клавиатура, мышь, джойстик)
  • DirectPlay (компонент, поддерживающий работу с коммуникационной средой (сетью); не зависит от сетевого протокола и метода соединения)
  • DirectSound (компонент, позволяющий микшировать звук в реальном времени и предоставляющий прямой доступ к звуковой карте)
  • DirectShow (компонент для работы с новой периферией – цифровыми фото и видеокамерами)

Технология COM

DirectX API базируется на технологии COM ( Component Object Model ) – компонентная модель объектов. Основная идея технологии COM заключается в работе с указателями на виртуальную таблицу функций. COM объект это обычный DLL файл, который зарегистрирован в системе. Доступ к COM объектам осуществляется через так называемые интерфейсы. Один COM объект может содержать в себе несколько интерфейсов. Один интерфейс представляет собой набор функций, объединенных общим назначением. Любой COM объект содержит в себе (наследуется от) интерфейс IUnknown.

Интерфейс IUnknown обеспечивает два базовых свойства COM-объектов:

  1. Подсчет количества обращений к объекту
  2. Способность запрашивать другие интерфейсы

При помощи интерфейса IUnknown можно определить, какие еще интересующие вас интерфейсы поддерживаются объектом. Схематично подход работы технологии COM можно представить следующей блок-схемой.


Основной принцип работы с технологией COM выражается следующими постулатами:

  1. Имеется указатель на таблицу интерфейсов;
  2. Каждая ячейка содержит указатели на методы того или иного интерфейса в отдельности;
  3. Вызов нужного метода напрямую невозможен.

Для того чтобы вызвать необходимый метод, программист должен проделать следующие шаги:

  1. Создать объект;
  2. Получить указатель на соответствующий интерфейс;
  3. Используя данный указатель вызвать нужный метод.

На языке C++ данный механизм вызова метода может быть реализован так:

// создали объект и получили указатель на интерфейс IDirect3D9
pd3d = Direct3DCreate9 (…);

// вызвали метод CreateDevice полученного интерфейса (IDirect3D9)
pd3d -> CreateDevice (…);

Механизм интерфейсов имеет обратную совместимость, т.е. приложения, которые используют объекты, например, DirectX7, будут работать и с DirectX9. Следует особо отметить, что разработка приложений для DirectX может вестись с использованием языков высокого уровня: Visual Basic, C++, C#, Pascal (Delphi).

Процесс взаимодействия приложения с видеокартой может быть описан следующей блок-схемой:


Архитектура DirectX в своей работе предусматривает так называемый уровень абстрагирования аппаратных средств – HAL ( Hardware Abstraction Layer ), который функционирует как промежуточное звено между программным обеспечением и аппаратурой, позволяя разработчикам обращаться к тем или иным компонентам, не зная их марки, модели и других деталей. В результате чего такой уровень абстракции оборудования позволяет настроить работу при любом аппаратном обеспечении. Особо следует отметить, что драйверы устройств (видео-, звуковых и сетевых карт) обычно создаются (пишутся) самими производителями оборудования.

< Лекция 1 || Лекция 2: 123456 || Лекция 3 >
Денис Баканов
Денис Баканов
Россия, г. Кострома
Паулус Шеетекела
Паулус Шеетекела
Россия, ТГТУ, 2010