Загрузка...
 
Печать
Кодим 3D FPS DX9

Intro




Что и чем будем кодить

3D-шутер (или 3D-стрелялка) от первого лица - самый популярный жанр компьютерных игр на ПК. Наиболее известные игры, созданные в этом жанре: Doom, Quake, Unreal, Serious Sam, FEAR, серия Call of Duty и др. Во всех этих играх мы управляем персонажем, который скрыт, но видны только его руки, держащие оружие. Всё происходящее мы видим,как бы его глазами, что позволяет более полно погрузиться в атмосферу игры. Суть любого 3D-шутера - массовый отстрел врагов, постоянно нападающих со всех сторон.
Для тех, кому не нравятся такие игры (например из-за излишней жестокости или однообразия):
  • Любой 3D-шутер можно переделать в игру другого жанра, добавив соответствующий функционал. Легендарная игра Half-Life, основанная на переработанном движке Quake, - яркое тому подтверждение.
  • Начинать программирование трёхмерных игр лучше, всё же, с 3D-шутеров. Так как этот жанр является фундаментальным для всех других жанров трёхмерных игр.

Язык программирования и API:

  • Язык программирования: С++.
В терминологии Microsoft будем создавать "неуправляемый" (unmanaged) код. Классическая версия языка для создания приложений под 32-битные версии операционных систем (далее "ОС") MS Windows XP/Vista/7/8. Также создаются и успешно работают под 64-битными (х64) версиями этих ОС в так называемом "режиме совместимости" (compatibility mode).
  • Графичесий API: MS DirectX 9 .
MS DirectX распространяется в двух видах:
  • MS DirectX Runtime library (т.н. "библиотека времени выполнения"; необходима для запуска игр на ПК; включена по-умолчанию во все версии ОС MS Windows Vista/7)
  • MS DirectX SDK (Software Development Kit, набор для разработки ПО).

В данном курсе:

  • В режиме "Шаг за шагом" мы рассмотрим все стадии программирования 3D-игры. Пройдя весь курс до конца, вы обнаружите, что им можно пользоваться в том числе как справочным пособием.
  • Создадим так называемый "каркас" (framework), который позднее может быть использован при создании других игр (в программировании это называется "рефакторинг"). В том числе других жанров. По ходу повествования каркас будет "обрастать" всевозможными "фишками".
  • Обязательно коснёмся теории стейтов (states), подробно расскажем об игровом конвейере (pipeline) и о менджменте ресурсов (модели, сцены, звуки и т.д.).
  • В конце курса на базе собственноручно созданного движка мы создадим демо-версию FPS-игры, вполне играбельную и готовую к дальнейшему масштабированию (добавлению уровней и контента).
Весь курс делится на 2 основные части:1
  • Создание Проекта движка;
  • Создание Проекта игры (в виде исполняемого файла с расширением .exe и прилагаемых ресурсов).
В течение всей 1 части курса мы будем создавать игровой движок (от англ "engine" - двигатель, движок), который "физически" будет выглядеть как Проект в MS Visual C++, конечной целью которого станет компиляция статической LIB-библиотеки.
Закрыть
noteПримечание

Формат LIB является внутренним форматом MS Visual C++. Файлы .lib, как правило, применяются только внутри интегрированной среды программирования (ИСР, IDE). Статические LIB-библиотеки являются хорошим способом повторного использования кода. Вместо того чтобы каждый раз реализовывать одни и те же подпрограммы для обеспечения той или иной функциональности в каждом создаваемом приложении, их можно создать единожды и затем вызывать из приложений. Код, подключенный из статической LIB-библиотеки, становится частью вашего приложения — для использования кода не нужно устанавливать еще какой-либо файл.
ъ
После своей компиляции LIB-библиотека будет добавлена в Проект игры, который позднее создадим в том же Решении (так, начиная c MS Visual Studio 2005, теперь зовётся рабочее пространство "workspace"), что и движок. Таким образом, одно Решение будет содержать 2 Проекта: Engine (Проект движка) и Game (Проект игры). Это придаст исходному коду чёткую структуру, повысит читабельность, сделает его более инкапсулированным.
Во 2 части курса на основе разработанного движка, мы создадим игру (демо-версию игры), которая "физически" будет выглядеть как 1 файл приложения Windows с расширением .exe. В общем виде файловую структуру будущей игры можно представить так:
Исполняемый ("стартовый") файл игры (файл с расширением .exe) Является обычным приложением Win32. Содержит функционал игры (порядок загрузки ресурсов, смена стейтов, активация видеовставок и т.д.). Обычно на него указывает ярлык, размещаемый на Рабочем столе Windows.
Ресурсы игры Изображения (текстуры, заставки), звуки, модели, локации и т.д. Как правило, аккуратно разложены по папкам внутри каталога с игрой (maps, textures, sounds и т.д.).

Полученный после компиляции исполняемый файл игры, в принципе, автономен и без труда запустится на любом компьютере под управлением ОС Windows и установленным DirectX Runtime (при условии, что видеоадаптер поддерживает DirectX 9). Таким образом, получив от IDE исполняемый файл игры, про остальные библиотеки и заголовки можно забыть, бережно перенеся exe-шник и его ресурсы из каталога с Проектом в новый каталог (папку) на жёстком диске с названием игры. Именно эту папку ты затем заархивируешь, перенесёшь на флэшку и будешь с гордостью показывать своё творение на компьютерах друзей. (Собственно, для чего всё и затевалось.))
В начальных главах мы "пробежимся" по основам языка программирования C++ и затронем принципы объекто-ориентированного программировани вцелом. Курс составлен в том числе для новичков, но знать хотя бы азы программирования всё же очень желательно.
Вообще, программированием движка игры с чистого листа, как правило, никто не занимается, так как это самый долгий и трудоёмкий процесс. Для создания крупных коммерческих проектов обычно используют готовые игровые движки (Unreal Engine, Cry Engine, Ogre, Irrlicht и др.) или собственные наработки в данной области. Но чтобы как следует разобраться во всей этой игрокодинговой "кухне", необходимо начать всё буквально "с нуля". Также это нужно, чтобы чётко понимать, что где "лежит" и откуда взялось. Наша цель - чёткий, хорошо структурированный код, в котором его автор может, при необходимости, менять абсолютно всё, что посчитает нужным. Приготовьтесь к головокружительному путешествию в мир программирования 3D-графики. И запаситесь терпением: объём информации для запоминания будет просто огромным! Компьютерные игры - самые сложные программные приложения. Да и Microsoft DirectX является низкоуровневым API, а не игровым движком. Что также не делает жизнь игрокодера проще.

Нам потребуется:

ПК Intel x86-совместимый компьютер с установленной ОС MS Windows 7, 8. Под Win10 не тестилось, но в теории тоже всё должно работать. Компьютер должен без труда "крутить" 3D-приложения под DirectX 9, увидевшем свет ещё в 2004 году. Современные видеокарты также без труда его "подхватят" (в DirectX заложена обратная совместимость версий. Т.е. библиотеки DirectX 10 и DirectX 11 подойдут для запуска игр, созданных под DirectX 9.
Microsoft Visual Studio 2010 Express Официально бесплатный (для некоммерческого использования) пакет из четырёх интегрированных сред разработки приложений (ИСР или IDE) от Microsoft. Включает в себя: Visual C# 2010 Express, Visual C++ 2010 Express, Visual Web Developer 2010 Express, Visual Basic.NET 2010 Express. Все IDE сильно заточены под разработку .NET приложений, но в Visual C++ можно также создавать классические win32 программы. На 15.01.2019 найти Microsoft Visual Studio 2010 Express на сайте самой Microsoft нереально. Берём здесь: http://allpcworld.com/download-visual-studio-2010-express-free/g.(external link) ISO-образ. 694 Мб. Формат ISO-образов изначально создавался для записи на CD/DVD-диски. Запиши образ с помощью встроенной в Windows программы записи дисков или сторонних программ (IMG Burning Rom, CDBurnerXP и др.). Классические ISO-образы легко открывались и извлекались с помощью архиватора WinRAR. Но в данном случае образ создан в стандарте UDF и WinRar не поможет. Если чистых дисков нет или не на чем записывать, помогут программы CD Daemon Tools (функционала бесплатной версии будет достаточно) или Alcohol 120% Free. Обе программы создают в системе виртуальный (программный) DVD-привод, позволяя "смонтировать" скачанный ISO-образ прямо с жёсткого диска, и пользоваться им как обычным DVD-диском, вставленным в виртуальный привод. Запускаем Проводник, щёлкаем по виртуальному приводу и запускаем программу установки из предварительно смонтированного ISO-образа (setup.exe). Во время первого запуска любой IDE из состава MSVS она запросит регистрационный ключ, который теоретически можно получить, бесплатно зарегистрировавшись на сайте Microsoft. Но на практике ссылка на ключ в самой MS Visual Studio 2010 уже сейчас (04.07.2015) не работает, а на сайте Microsoft сам чёрт ногу сломит. Так что вводим эти ключи: VC# 2010 Express: PQT8W-68YB2-MPY6C-9JV9X-42WJV VC++ 2010 Express: 6VPJ7-H3CXH-HBTPT-X4T74-3YVY7 VWD 2010 Express: CY8XP-83P66-WCF9D-G3P42-K2VG3 VB.NET 2010 Express: 2KQT8-HV27P-GTTV9-2WBVV-M7X96
Microsoft Windows SDK for Windows 7 and.NET Framework 4 Ставится автоматом вместе с MS Visual C++ 2010. Набор необходимых заголовков, библиотек, документации и утилит для создания приложений под ОС Windows 7. Существуют SDK и для других ОС Windows. На него, в частности, опирается MS Visual Studio при разработке приложений в том числе под DirectX. Поэтому данная версия Microsoft Windows SDK идёт в наборе с MS Visual Studio 2010. Содержит в себе такие важные заголовки, как windows.h, windowsx.h, winnt.h. Без них большинство примеров DirectX SDK 8 просто не станут компилироваться. Берём здесь: https://www.microsoft.com/en-us/download/details.aspx?id=8279.(external link) Объём прибл. 3 Мб (веб-инсталлятор).
Microsoft DirectX SDK 9 Набор необходимых библиотек, документации и утилит для создания приложений с использованием DirectX. Вышел в свет в 2004 г. До сих пор активно применяется разработчиками инди-игр и специализированных приложений. Берём здесь: https://softfamous.com/directx-9-sdk/download(external link). Объём прибл. 572 Мб. Скачанный архив распаковываем в любую папку на жёстком диске и запускаем Setup.exe.
Microsoft DirectX SDK 8.1 Ряд компонентов, которые мы будем использовать, давно признан компанией Майкрософт устаревшими. В частности, в последних версиях DirectX SDK нет ни слова о DirectMusic и DirectSound, т.к. они о были объединены в DirectAudio (XAudio). В связи с эти настоятельно рекомендуем скачать и держать на компьютере в распакованном виде DirectX SDK 8 версии, впервые вышедшей в свет аж в 2001 году. И, несмотря на то, что Майкрософт не считает нужным хранить у себя на сайте подобную "ересь", восьмой SDK всё ещё можно найти в гугле по запросу DX81SDK_FULL.EXE. Также ссылки на него встречаются на форумах разработчиков инди-игр и даже на торрент-трекерах. Вот одна из ссылок для скачивания: http://old-dos.ru/index.php?page=files&mode=files&do=show&id=2629.(external link) Объём прибл. 164 Мб. Скачанный архив распаковываем в любую папку на жёстком диске и запускаем Setup.exe.
GUIDGEN Генератор GUID-идентификаторов. Раньше шёл в наборе с MS Visual C++ 6.0. В современных версиях MS Visual С++ Express его нет. Берём здесь: https://marketplace.visualstudio.com/items?itemName=AndrewLArnott.GuidGen20(external link), либо пользуемся онлайн-сервисами вроде https://www.guidgen.com(external link) .

Напомним, что из всего набора MS Visual Studio 2010 нам нужна только MS Visual C++ 2010. При желании её нетрудно найти в Интернете в виде отдельного приложения.

Источники


1. Young V. Programming a Multiplayer FPS in DirectX 9.0. - Charles River Media, 2005


ДАЛЕЕ ==> Кодим 3D FPS DX9. 1.1 Проектируем движок

Последние изменения страницы Воскресенье 03 / Июль, 2022 10:45:55 MSK

Последние комментарии wiki

No records to display

Search Wiki Page

Точное совпадение

Категории

|--> C#
|--> C++