Большой архив статей, книг, документации по программированию, вебдизайну, компьютерной графике, сетям, операционным системам и многому другому
 
<Добавить в Избранное>    <Сделать стартовой>    <Реклама на сайте>    <Контакты>
  Главная Документация Программы Обои   Экспорт RSS E-Books
 
 

   Операционные системы -> Windows -> DirectX


DirectX

Программирование игр для MS-DOS было сложным делом. MS-DOS обеспечивал работу только в текстовом режиме, поэтому создателям игр приходилось самостоятельно реализовывать все функции работы с графикой. Кроме того, нужно было учитывать как можно более широкий круг видео- и звуковых карт, которые могли быть установлены у пользователя, а это очень тяжелая задача, учитывая появление каждый год все новых и новых адаптеров.

В результате большинство игр было рассчитано на режимы VGA (особенно 320х240 при 256 цветах), которые определяли не только разрешение, но и глубину цвета (не более 256 цветов из палитры в 260 тысяч) и частоту обновления экрана (не более 70 герц). Уже тогда видеокарты поддерживали аппаратное выполнение многих функций, таких, как рисование линий и печать текста, но они обычно оставались неиспользованными. В итоге сложилась ситуация, когда пользователям не имело смысла покупать дорогие видеокарты, а производителям, соответственно, их выпускать.

Спецификация VESA несколько улучшила ситуацию - на видеокартах, которые ее поддерживали, стало возможно использовать высокие разрешения и глубину цвета до 24 бит. Но возросший размер экрана потребовал обработки и пересылки в несколько раз большего объема информации, поэтому высокое разрешение использовалось только в относительно спокойных играх, подобных пошаговой стратегии.

Со звуком дела обстояли еще хуже - для него не существовало стандарта, подобного VGA. Даже для звуковых карт, выпущенных одним производителем, нужно было включать в игру различные драйверы. Таким образом, большинство игр поддерживало только около десятка моделей самых распространенных звуковых карт. Причем эти карты стоили в несколько раз дороже, чем аналогичные по возможностям, но менее распространенные. Игр же, поддерживающих многопользовательскую игру, было совсем мало. Для учета различных сетевых протоколов нужно было выполнять слишком много работы. Добавим ко всему вышесказанному еще и 640К барьер в MS-DOS, для преодоления которого использовались специальные расширители памяти.

Чтобы запустить игру под DOS, пользователю приходилось разбираться в особенностях распределения памяти, портах, прерываниях, редактировать файлы autoexec.bat и config.sys и становиться чуть ли не хакером. При этом не было никаких гарантий, что игру вообще удастся запустить. Конечно, такие игры не могли конкурировать с играми для приставок, для запуска которых достаточно было вставить картридж или диск.

Однако, после появления Windows 95 динамичные игры продолжали писать исключительно под DOS. Дело в том, что Windows для вывода графики использует интерфейс GDI. Это очень мощный инструмент. Он позволяет программисту рисовать графические примитивы, выводить текст, заливать области определенным цветом, работать с растрами. Причем GDI совершенно не зависит от железа - в нем можно определять свою систему координат, задавать расстояния в естественных единицах (т.е миллиметрах, дюймах...), работа с ним не отличается даже при работе с другими устройствами вывода, такими, как графопостроитель. GDI автоматически преобразует координаты и цвета. К сожалению, такая независимость и переносимость привела к чрезмерной громоздкости и медлительности графической подсистемы Windows. Под GDI можно написать только простенькие игрушки типа пасьянсов и тетриса.

Все это понимала и корпорация Microsoft. Поэтому примерно через полгода после выхода Win 95 был выпущен GameSDK, который решил все эти проблемы. Со второй версии GameSDK принял привычное для нас название DirectX. Однако, первоначально разработчики игр все еще продолжали писать под DOS - никто не верил, что под Windows возможна быстрая графика. Лишь после выхода игры Virtual Fighter программисты поняли, что под DirectX (DX) можно делать более быстрые и красивые игры, чем для старичка DOSа.

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

API (Application Programming Interface) - это библиотека функций, которая выполняет роль промежуточного звена между приложением и системой. Так, например, GDI тоже API. Эти API реализованы в виде COM-объектов (COM - Component Object Model - составная объектная модель), что позволяет использовать DX вместе с любым современным языком программирования - C, C++, Delphi или даже VisualBasic.

DX содержит два слоя - HAL и HEL. HAL (Hardware Abstraction Layer) преобразует унифицированные функции DX к аппаратным функциям конкретной карты. HAL содержит аппаратно-зависимый код, и потому он пишется производителем карты и устанавливается вместе с драйверами. Именно поэтому нужно устанавливать драйверы только от вашей карты. Если же ваш адаптер не поддерживает требуемых функций на аппаратном уровне, то запрос передается HEL. HEL (Hardware Emulation Layer) пытается программно выполнить запрос, причем делает это наилучшим образом.

Таким образом, создатель игры может не беспокоиться о наличии поддержки конкретных функций у пользователя на аппаратном уровне. Например, если у вас не установлен 3D-акселератор, то трехмерные игры, написанные с использованием DX, будут запускаться, но работать они будут крайне медленно. Даже если игра была написана до появления некоторых устройств, она все равно будет использовать их аппаратные возможности с максимальной выгодой. Это "развязывает руки" разработчикам железа - появляются все более мощные акселераторы и процессоры.

К примеру, для того, чтобы получить выгоду от использования нового расширения команд процессора, подобного MMX, SSE или 3D-Now!, не надо переписывать заново все программы, достаточно выпустить новую версию DX. Кроме того, DX автоматически выполняет все настройки, необходимые для игры. Для того чтобы установить современную игру, достаточно вставить диск, указать тип установки и каталог на жестком диске.

Все это делает Windows настоящей игровой платформой, которая конкурирует на равных с самыми современными игровыми приставками. Но DX не только делает разработку программ аппаратно-независимой, он еще предоставляет программистам множество мощных функций, на реализацию которых потратилось бы очень много времени. Благодаря этому писать игры под DX намного проще.


Базовый слой DX (DX Foundation) состоит из следующих API:

DirectDraw

Этот API предназначен для работы с 2D графикой. Он осуществляет доступ к аппаратным функциям видеокарт. Самой важной особенностью при работе с ним является возможность прямой работы с видеопамятью и видеостраницами. Дело в том, что современным играм приходится обрабатывать поток информации в несколько десятков мегабайт каждую секунду. Процессор и шина, к которой подключена видеокарта, могут не справиться с таким потоком. Поэтому графическая информация (т.е. текстуры, спрайты и дополнительные видеостраницы) хранится прямо в очень быстрой локальной памяти карты. Именно для этого современные видеокарты содержат десятки мегабайт памяти. Такое распределение данных позволяет разгрузить центральный процессор и шину системной платы. DirectDraw может использоваться как в полноэкранном, так и в окошечном режиме.

DirectInput

Обеспечивает ввод данных в реальном времени со всевозможных манипуляторов (клавиатур, мышей, джойстиков, геймпадов). Также этот API позволяет калибровать манипуляторы и настраивать дополнительные кнопки.

DirectPlay

Предоставляет программисту аппаратно-независимый коммуникационный протокол. DirectPlay поддерживает связь по Интернету (TCP-IP), локальной сети (IPX), модему и прямому кабельному соединению. Теперь создать многопользовательскую игру стало намного проще. DirectPlay берет на себя настройку соединения и поиск игровых серверов.

DirectSound

Дает возможность воспроизводить, смешивать, управлять громкостью и стереоэффектами звуков. При этом все перечисленные операции осуществляются без временных задержек, что позволяет легко синхронизировать звуковые эффекты. В состав DirectSound входит еще один API - DirectSound3D. Этот под-API предназначен для создания объемного звучания. Однако для того, чтобы им насладиться, вам нужна специальная 3D-звуковая карта, например, Creative Sound Blaster Live! или Monster Sound MX300 и от 4 акустических систем.

DirectMusic

Этот API позволяет полнее использовать возможности MIDI в играх. Применяя DirectMusic, композиторы могут разрабатывать интерактивные саундтреки, т.е. делать музыкальное сопровождение как в фильмах: в опасных местах звучит громкая и тревожная музыка, во время проигрыша - печальная, а в спокойных местах - тихая.

DirectVoice

Это самый молодой API. Он появился только в DirecX 7.1. С его помощью можно легко осуществлять связь между участниками игры посредством обычного голоса, конечно, при наличии у игроков микрофонов.

Direct3D

Самый мощный и бурно развивающийся API из всех рассмотренных выше. Как понятно из названия, он отвечает за трехмерную графику. Он состоит из API низкого уровня (Immediate Mode), который обеспечивает основные функции 3D-графики и основанного на нем API высокого уровня (Retained Mode). Программирование в Retained Mode намного проще, однако для достижения максимального результата создатели игр обычно пишут свой "движок" над Immediate Mode. Direct3D тесно связан с DirectDraw.
Говоря о Direct3D, нельзя не упомянуть и о конкурирующих 3D API. Это Glade и OpenGL. Glade API может работать только с картами производства 3dfx (Voodoo1 - Voodoo5), но, сейчас 3dfx уже далеко не лидер отрасли, поэтому новых игр, использующих только этот 3D API, практически не пишут. Остановимся подробнее на OpenGL. Он также аппаратно независим, но в отличие от Direct3D может работать не только на платформе Windows. Замечу, что сравнивать OpenGL с DirectX нельзя, его можно сравнивать только с Direct3D. Спор о том, какой же из этих двух API лучше, длится уже несколько лет - каждый имеет свои достоинства и недостатки. Воздержусь от высказывания своего мнения, однако более 90% современных 3D-игр используют Direct3D, во многом благодаря правильной маркетинговой политике Microsoft. Но OpenGL продолжают активно использовать в профессиональных программах 3D-моделирования.


Над базовым слоем DX расположен мультимедийный слой DX - DX Media. Он состоит из нескольких API - DirectShow, DirectAnimation, DirectModel, которые основаны на базовом слое DX. Мультимедийный слой позволяет воспроизводить видео и аудио в различных форматах, синхронизирует и комбинирует различные виды мультимедийных потоков, ускоряет DHTML-скрипты, но в играх он используется мало.

В заключение отвечу на несколько вопросов про DirectX, которые чаще всего задают пользователи:

Стоит ли у меня DirectX?
Если у вас установлен DX, то в папке Windows\System должен находиться файл ddraw.dll, если же его нет, то, соответственно, DX не установлен. Однако это маловероятно, т.к. DX автоматически устанавливается с Windows, начиная с Windows 95 OSR2.

Какой он версии?
В папке Program Files\DirectX\Setup должен находиться ярлык на файл DxDiag.exe. Это полезная диагностическая утилитка, которая сообщает об ошибках, позволяет настраивать производительность DX и протестировать некоторые функции. Запустите ее. В поле DirectX Version будет указана точная версия вашего DX. Если же такого файла нет, значит, версия вашего DX меньше 6.0. В этом случае лучше поискать более новую версию.

Где можно взять последнюю версию?
На диске с любой современной игрой обязательно есть папка DIRECTX с дистрибутивом одной из версий DX. Для того чтобы ее установить, достаточно кликнуть по файлу DxSetup.exe. Однако это может быть не самая последняя версия. Последнюю версию можно совершенно бесплатно скачать с сайта корпорации Microsoft.

Возможно ли использовать DX вместе с WinNT?
В WinNT4.0 можно работать только с версией 3 DirectX. Для этого нужно установить ServicePak3 или выше. В состав Windows2000 входит полная поддержка DX7.



 

 
Интересное в сети
 
10 новых программ
CodeLobster PHP Edition 3.7.2
WinToFlash 0.7.0008
Free Video to Flash Converter 4.7.24
Total Commander v7.55
aTunes 2.0.1
Process Explorer v12.04
Backup42 v3.0
Predator 2.0.1
FastStone Image Viewer 4.1
Process Lasso 3.70.4
FastStone Image Viewer 4.0
Xion Audio Player 1.0.125
Notepad GNU v.2.2.8.7.7
K-Lite Codec Pack 5.3.0 Full


Наши сервисы
Рассылка новостей. Подпишитесь на рассылку сейчас и вы всегда будете в курсе последних событий в мире информационных технологий.
Новостные информеры. Поставьте наши информеры к себе и у вас на сайте появится дополнительный постоянно обновляемый раздел.
Добавление статей. Если вы являетесь автором статьи или обзора на тему ИТ присылайте материал нам, мы с удовольствием опубликуем его у себя на сайте.
Реклама на сайте. Размещая рекламу у нас, вы получите новых посетителей, которые могут стать вашими клиентами.
 
Это интересно
 

Copyright © CompDoc.Ru
При цитировании и перепечатке ссылка на www.compdoc.ru обязательна. Карта сайта.