Данный материал взят с сайта old.shatalov.su и является его зеркалом

Создаём компьютерную игру. Создание игр на C++/DirectX

Есть вопросы?
Ошибка на сайте?
рус eng esp
Внимание! Данный сайт не обновляется. Новая версия: shatalov.su

DirectX API

В данном разделе расположены уроки по DirectX 9. Я выбрал именно девятую версию, так как считаю, что полный переход на новые версии Windows произойдёт ещё нескоро. А пока у большинства пользователей установлена операционная система Windows XP, лучше использовать библиотеку DirectX 9, программы на которой прекрасно запускаются и на более новых версиях Windows: Vista и Windows 7.

OpenGL vs. DirectX

В определённый момент любому начинающему программисту приходится выбирать, что учить дальше: DirectX или OpenGL.

Открою страшную тайну, различия между OpenGL и DirectX не такие уж и большие. Графические библиотеки OpenGL и DirectX имеют много общего и предназначены для выполнения одной и той же задачи: вывода виртуального трёхмерного мира на экран монитора.

Преимущества OpenGL

Библиотека OpenGL появилась на три года раньше DirectX - в 1992. Главное преимущество OpenGL - кросплатформенность. Т.е. приложения, написанные под OpenGL, могут работать на разных платформах. Это в теории. На практике для разных платформ приходится писать немного разный код (связанный с особенностями операционной системы, а не OpenGL).

Это самое важное преимущество OpenGL перед DirectX. Т.е. весь код связанный с выводом графики будет работать и в Windows, и в Linux, и на Sony PlayStation 3.

Преимущества DirectX

DirectX изначально создавался корпорацией Microsoft, чтобы переманить разработчиков, делавших игры под DOS, на новую операционную систему Windows 95. Соответственно, программы, написанные на DirectX, будут работать только под управлением различных версий Windows.

Главное преимущество DirectX по сравнению с OpenGL состоит в том, что DirectX содержит сразу несколько библиотек, а не только графическую, как OpenGL. В состав DirectX в разное время входили: Direct3D - основная графическая библиотека, D3DX - вспомогательная графическая библиотека, DirectX Audio - библиотека для работы со звуком, DirectDraw - работа с двухмерной графикой (устарела), DirectShow - видео, DirectX Input - ввод (мышь, клавиатура, джойстики), Direct2D - двухмерная графика, DirectWrite - текст, DirectX Play - сеть, HLSL - язык для написания шейдеров.

Несмотря на такое многообразие, на практике используются не все библиотеки. В основном это: Direct3D, D3DX, HLSL, DirectX Audio.

Остальные библиотеки практически не используются. Вместо DirectPlay лучше использовать сокеты, DirectShow к играм вообще имеет мало отношения (и насколько помню, её убрали из DirectX), а насчёт Direct2D и DirectWrite ещё рано что-нибудь говорить - эти библиотеки появились только в Windows 7 (DirectX 11).

Интересная ситуация обстоит с DirectInput (ввод). Для ввода с мышки и клавиатуры эту библиотеку использовать крайне нежелательно. В своих уроках я рассматриваю DirectInput по двум причинам: ввод с клавиатуры гораздо проще осуществить через DirectInput, чем через асинхронный ввод, предоставляемый Windows; вторая причина состоит в том, что в первой серьёзной программе на сайте (камера) ввод легче сделать, используя DirectInput. Во всех следующих программах я не буду использовать DirectInput. В будущем уроки по DirectInput будут дополнены ещё двумя: в одном ввод будет осуществляться с джойстика, в другом - с руля (с поддержкой force feedback).

Так как в OpenGL тоже есть свой аналог HLSL - GLSL, то у DirectX остаётся только одно серьёзное преимущество - DirectX Audio - это очень мощная библиотека для работы со звуком. Хотя библиотеку D3DX тоже не стоит сбрасывать со счетов. Например, с помощью неё можно за пару минут создать виртуальную камеру (если знать как).

Помимо этого, библиотеки DirectX содержат дополнительный функционал, используемый в консолях фирмы Microsoft - XBox.

И последнее, в DirectX есть встроенный формат для трёхмерных моделей, а в D3DX есть достаточно интерфейсов и функции для обработки подобных файлов. В OpenGL с этим обстоит немного похуже.

OpenGL или DirectX?

В предыдущих двух подразделах я не совсем верно использовал слово "преимущество". Скорее нужно говорить о различиях двух библиотек, а не о том, какая из них лучше. С выводом графики эти две библиотеки справляются одинаково хорошо.

Если вы всё ещё не выбрали, какую библиотеку использовать, у меня есть для вас совет: начинайте изучать ту, чьё название лучше для вас звучит. Не имеет значения, с чего вы начнёте: OpenGL или DirectX.

Кроме того, ничто не мешает использовать сразу две библиотеки: OpenGL для вывода графики и DirecX Audio для вывода звука.

В своих уроках я выбрал рассмотрение именно DirectX. Основная причина - это то, что DirectX состоит из набора классов, в отличие от OpenGL, который представляет собой набор функций. На мой взгляд, ситуация, когда программа строится вокруг одного объекта гораздо более правильная, чем использование несвязанных (на первый взгляд) функций.

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

Возможно, в будущем на сайте появятся два дополнительных раздела: по DirectX 11 и OpenGL 3. А прямо сейчас вы можете приступить к изучению DirectX 9.


DirecX API - содержание

Новые уроки раздела сейчас рассматриваются в рассылке.

1. Установка DirectX SDK. Перейти.
2. Введение в DirectX API. Перейти.
3. Поверхности (surfaces). Перейти.
4. Инициализация Direct3D. Перейти.
5. Инициализация DirectInput. Перейти.
6. Ввод с клавиатуры. перейти.
7. Вершинные буферы. Простая геометрия в Direct3D. Перейти.
8. Индексные буферы. Перейти.
9. Ввод с мышки. Перейти.
10. Преобразования матриц. Перейти.
11. Виртуальная камера. Первая часть. Перейти.
12. Виртуальная камера. Вторая часть. Перейти.
13. Спрайты. Первая часть. Перейти.
14. Формат x. Перейти.
15. FVF. Перейти.
16. Состояния рендеринга. Перейти.
17. Вывод текста в DirectX. Перейти.
18. Программа Клетки. Перейти.
19. Выбор объектов в 3d (Object picking). Перейти.
20. Буфер глубины (Depth buffer). Перейти.
21. Растеризация треугольников. Перейти.
22. Арканоид. Первая часть. Перейти.
22. Арканоид. Вторая часть. Перейти.

Я рекомендую заниматься по разделу Шаг за шагом.