среда, 1 апреля 2009 г.

Создаём компьютерную игру. Выпуск 10.




Установка DirectX SDK

Доброго времени суток. Вы читаете десятый выпуск рассылки "Создаём компьютерную игру".

Для тех, кто только присоединился:
Узнать чем мы здесь занимаемся, Вы можете, изучив архив. В общих чертах узнать о целях рассылки можно в первом выпуске или в разделе "О сайте" на сайте рассылки.

Сегодня мы проигнорируем изучение C++, выпуск будет посвящён установке DirectX SDK 2008.

В выпуске используются картинки. Для правильного отображения выпуска, необходимо чтобы в вашей почтовой программе был включён показ картинок. Сами картинки берутся с сайта рассылки. Общий размер всех картинок - 66 килобайт

На протяжении последних девяти выпусков, Вы изучали язык программирования высокого уровня C++. Скорее всего у Вас возник ряд вопросов по теме рассылки. И самый главный из них: как, используя изученный материал, начать создавать свою игру? В этом выпуске я попытаюсь ответить на него. По крайней мере, Вы узнаете теорию. Практикой же мы займёмся позже.

До сих пор наши программы работали в досовской консоли. При этом мы использовали язык C++.

C++ - это основа. Не зная этого языка, Вы не сможете создать какую-нибудь игру. Конечно адепты Паскаля, Бейсика или Фортрана (если такие есть :)) могут возразить, что на этих языка тоже можно создавать о-го-го какие игры!!! Только о-го-го какими, они были для середины восьмидесятых. Тогда, да, они выглядели очень круто.

Сейчас я расскажу Вам очень важную вещь. Она простая, и возможно Вы её уже знаете. По крайней мере, если бы кто-нибудь объяснил мне это лет десять назад, возможно вся моя жизнь сложилась бы по-другому.

Итак: "у компьютеров есть слои" (С) Шрек. :)

Извините, не сдержался.

У компьютеров есть уровни. Самый низкий уровень - уровень физических элементов (транзисторы и провода), Самый высокий (из тех, что мы пока знаем) - это язык C++. Именно поэтому он называется языком высокого уровня. Между этими уровнями расположено ещё несколько: микроархитектурный уровень (на этом уровне идёт общение с процессором), уровень операционной системы, уровень языка ассемблера (ассемблер - язык низкого уровня).

Когда мы начинаем выполнение программы, команды на языке C++ переводятся на более низкие уровни. На самом нижнем уровне эти команды выполняются непосредственно электрическим сигналом. Одна команда более высокого уровня может состоять из нескольких команд более низкого.

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

В конце восьмидесятых - начале девяностых не существовало (точнее они ещё не получили широкого распространения) более высоких абстракций (уровней) чем язык программирования. В нашем случае - это C. Все приложения писались на языке высокого уровня: Pascal, C, Fortran. Создание графики и графических приложений происходило непосредственно на языке высокого уровня.

Тут что надо заметить! Большинство языков программирования высокого уровня обладают примерно равными возможностями. Будь то Pascal, Java или С++. Понятно, что у некоторых этих возможностей побольше, у других поменьше. Но у них много общего: у всех есть циклы и ветвления, функции, переменные.

Ходят слухи, что изучить C++ намного сложнее, чем Pascal или другие языки программирования. Надеюсь, что читая выпуски рассылки, Вы убедились, что это не так.

На мой взгляд, распространённое мнение о сложности C++ - это результат наглой и бессовестной диверсии со стороны адептов Delphi! На самом деле Pascal намного сложнее в изучении. Вы только подумайте, они вместо скобочек { } используют begin и end!!!

Когда появились видеоускорители, программистам приходилось писать отдельный код для каждого!!! Зайдите в любой интернет-магазин торгующий видеокартами и представьте, что Вам пришлось бы писать отдельный код для каждой видеокарты. В общем, перед программистами появилась серьёзная проблема.

В середине девяностых начала очень быстро распространяться операционная система Windows. Первоначально Windows была написана на C (не на C++, нет. Т.е. там не было классов). Windows до сих пор использует часть старого кода. Когда мы начнём создавать приложения под Windows, мы познакомимся с ещё более высоким уровнем - WinAPI (Windows API). WinAPI используют все приложения под Windows.

WinAPI (API - Application Programming Interface. Интерфейс программирования приложений) - представляет собой набор функций и структур, написанных на C.

В Windows использовалась (и используется) своя система вывода графики. Называется она - GDI (расшифровывается как Graphical Device Interface - интерфейс графического устройства, а не Global Defence Initiative как мог подумать особо проницательный читатель).

GDI в силу особенностей WinAPI не годилась для создания игр. Потому что GDI - оооочеееень меееедлеееннаааааяяя. Разработчики игр не спешили создавать игры под Windows, им было привычнее работать под старой доброй DOS.

И тогда Microsoft создаёт DirectX. Первая версия была полным отстоем. Но время шло, и DirectX становился всё более надёжным. В новой операционной системе Windows 7 уже будет доступна одиннадцатая версия.

Мы будем разбирать примеры для девятой версии. Отличия между девятой и десятой существенные. Возможно, в будущем мы рассмотрим и десятую, хотя скорее всего, сразу перейдём на одиннадцатую.

Что же из себя представляет DirectX. Это высокоуровневая API, которая написана на С++, с использованием технологии COM (Component Object Model - компонентная модель объектов. Мы её кратко рассмотрим). DirectX предназначена для работы с драйверами видеокарт. Для каждой видеокарты создаются драйвера (язык команд, которые понимает видеокарта). Программисту больше не нужно писать отдельный код для каждого драйвера каждой видеокарты. Ему нужно только знать API DirectX. Всю низкоуровневую работу (взаимодействие с драйверами) берёт на себя DirectX.

Справедливости ради, нужно сказать, что существует ещё одна популярная библиотека - OpenGL. Принцип работы - примерно тот же: программист работает с API, а сама OpenGl работает с драйверами. Неоспоримое преимущество OpenGL - мультиплатформенность. Т.е. OpenGL будет работать на всех операционных системах. DirectX работает только на Windows. Преимущества DirectX мы рассмотрим позднее (а они есть и они, на мой взгляд, гораздо существеннее).

Для того чтобы запускать программы использующие DirectX, Вам необходим так называемый Redistributable package (можно найти на любом диске с какой-нибудь игрой).

Чтобы писать приложения, использующие DirectX, нужно скачать DirectX SDK (Software Development Kit - набор инструментов разработки приложений).

У Вас на выбор два варианта установки:

1. Скачивание DirectX SDK с сайта Microsoft. При этом Вы скачаете полный вариант со всеми примерами, документацией и дополнительными инструментами. Размер архива - примерно 500 мегабайт. При установке, DirectX SDK займёт больше гигабайта.

2. Скачивание DirectX SDK с сайта рассылки. При этом Вы скачаете урезанный мной вариант, в котором я оставил только библиотечные и заголовочные файлы и один пример. Размер архива - 2,6 мегабайта (два с половиной мегабайта!!!). Что называется, прочувствуй разницу! При установке, DirectX SDK займёт двадцать семь мегабайт.

Установку DirectX мы рассматриваем именно сейчас, чтобы Вы успели найти и установить полную версию DirectX SDK до того как мы приступим к изучению DirectX. Если же, совсем никак не получится установить полную версию, у Вас всегда есть запасной вариант :)

Установка с сайта Microsoft

Заходим на домашнюю страницу DirectX.

Домашняя страница DirectX

И щёлкаем на ссылку - March 2009 DirectX SDK Now Available

Откроется страница, с которой можно скачать последнюю на данный момент версию DirectX SDK - от семнадцатого марта.

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

Итак, нажимаете на кнопку Continue. Затем с вашего компьютера будет взята информация об операционной системе. И если у Вас стоит лицензионная Windows, Вы сможете скачать DirectX SDK.

DirectX   SDK

У меня пока не было возможности скачать мартовскую версию. Процесс установки описан для ноябрьского релиза, но думаю отличий в процессе установки немного.

Кстати, в мартовской версии добавлены технические обзоры двух новых технологий, которые будут использоваться в DirectX 11: Direct2D и DirectWrite. Если знаете английский, обязательно посмотрите соответствующие разделы в MSDN: Direct2d и DirectWrite. Я когда готовил выпуск, два часа в документации просидел. Жалко, что протестировать не удалось. Думаю, в будущем мы обязательно будем обсуждать данные технологии в рассылке.

Кто собирается скачивать ноябрьскую SDK, переходите по ссылке. Щёлкаем по кнопке Download.

Далее откроется ещё одна страница и появится диалог сохранения файла.

После скачивания установочного файла, запускаем его. Дальнейший процесс щёлканья на кнопку "Next" я проиллюстрирую картинками:

Установка DirectX SDK

Далее начнётся установка.

Установка с сайта рассылки

Тут всё намного проще и быстрее. Заходите на хоршо известный Вам сайт, ищете страничку: "установка DirectX SDK". На этой страничке находится ссылка на архив. Загружаете этот файл на свой компьютер и распаковываете. У себя я распаковал архив в корневой каталог диска D. В итоге установочная папка выглядит так: D:\directx\

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

После установки

Напоследок давайте посмотрим, как оно работает.

Для того чтобы во время выполнения программы работали библиотеки DirectX, в программу нужно включить соответствующие заголовочные файлы. Кроме того необходимы библиотечные файлы. Что это такое? Мы с ними пока не сталкивались. Как мы знаем, в заголовочных файлах хранятся объявления функций. Тела функций обычно хранятся в другом месте. В статье "Многофайловые программы" мы хранили тела функции в отдельных исходных файлах. В случае если Вы приобретаете библиотеку функций и классов у кого-нибудь, Вы получаете заголовочные файлы (где хранятся объявления) и библиотечные файлы (где хранятся определения). Библиотечные файлы имеют расширение .lib.

В данный момент IDE не знает о существовании DirectX. Нам нужно сообщить, где IDE должна искать заголовочные и библиотечные файлы.

Откройте пункт меню Tools - Options (Сервис - Параметры).

Создание трёхмерных   компьютернхы игр с нуля

В левой части открывшегося окна выберите Projects and Solutions - VC++ Directories (Проекты и решения -> Директории VC++):

Создание трёхмерных компьютернхы игр с нуля

В правой части в выпадающем списке Show directories for (Показать директории для:) выберите Include files (Включаемых файлов, за точное имя пункта на русском не ручаюсь, он там второй). Затем из инструментов выберите New Line (Новая строка) или щёлкните Ctrl+Ins. Для более наглядной иллюстрации смотрите картинку. Появится новая строка. Щёлкните на кнопку с тремя точками в конце строки

Откроется окно выбора директории. Перейдите в папку, где у Вас установлен DirectX. И выберите папку Include.

Теперь в выпадающем списке (где Вы выбирали Include files) выберите Library files (библиотечные файлы) и повторите операцию добавления строки. Только теперь выберите папку Lib/x86 если у Вас 32-ух разрядная операционная система или Lib/x64 если 64-ёх разрядная.

Нажимаем OK. Теперь IDE знает, где искать заголовочные и библиотечные файлы.

Запуск приложения

Теперь открываем проект File - Open - Project/Solution или щёлкаем Ctrl+Shift+O.

Если вы загружали SDK с сайта Microsoft, то пример находится в папке (D:\directx - папка, куда я установил свою версию):D:\directx\Samples\C++\Direct3D\Tutorials\Tut01_CreateDevice

Если Вы загружали SDK с сайта рассылке, проект можно найти по адресу (D:\directx - папка, куда я установил свою версию): D:\directx\Samples\Tut01_CreateDevice

В папке лежат два решения: для Visual C++ 2005 и для Visual C++ 2008. Выберите нужное Вам решение.

Теперь нажимаем Ctrl+Alt+F7 и F5.

Вот она!!! Первая программа использующая DirectX.

Прежде чем закрывать IDE, давайте взглянем на код.

В обозревателе решений выберите файл CreateDevice.cpp. Если Вы бегло просмотрите весь файл, то скорее всего ничего не поймёте.

Как это ни удивительно :), но структура программы очень похожа на то, что мы уже создавали: директивы #include, функции InitD3D(), CleanUp(), Render(), MsgProc().

Функция wWinMain - аналог main. С неё начинается выполнение программы в Windows.

В строках объявления переменных:
LPDIRECT3D9 g_pD3D = NULL; // Used to create the D3DDevice
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; // Our rendering device

Встречаются новые типы. На самом деле они переопределены с помощью typedef (который мы уже рассматривали) из стандартных типов.

Кое-что нам не знакомо:
g_pD3D->CreateDevice
Здесь, g_pD3D - объект, а CreateDevice() - метод. Почему используется синтаксис -> вместо привычной для нас точки мы узнаем в следующем выпуске.

Да, здесь используется много новых типов, много новых функций, но всё же за всей этой мишурой можно угадать уже привычный (надеюсь, что это действительно так) для нас C++.

На сегодня всё. Надеюсь, что данный выпуск был Вам интересен. Если это так, порекомендуйте рассылку друзьям!

Ведущий - Роман.
Если у вас есть вопросы, пишите на e-mail: el_rey2007@bk.ru

P.S.: Если вы читаете данный выпуск через месяц или более после выхода, пожалуйста, загляните на сайт рассылки, там вы найдёте исправленную и дополненную информацию из выпуска.




Сообщить о нарушении данной рассылкой правил Сервиса
Отписаться : Нажмите и отправьте это письмо

Комментариев нет:

Отправить комментарий