DirectX 8. Начинаем работу с DirectX Graphics

DirectX 8. Начинаем работу с DirectX Graphics

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

Жанр: Программирование
Серии: -
Всего страниц: 25
ISBN: -
Год издания: Не установлен
Формат: Полный

DirectX 8. Начинаем работу с DirectX Graphics читать онлайн бесплатно

Шрифт
Интервал

GameDev.ru

DirectX 8: Начинаем работу с DirectX Graphics

Автор: voxatu

(пример написан на основе первого "родного" туториала к DirectX SDK 8.0)

Ну, наконец-то мы дошли до самой сути, а именно - до начала работы непосредственно с DirectX! Сейчас напишем вместе прогу, которая создаст класс, окошко, инициализирует объекты Direct3D и… в итоге у нас получится — сами увидите что :-) Советую СКАЧАТЬ ПРИМЕР в архиве и читать дальше, имея исходники перед глазами. Чтобы открыть пример, необходимо сначала разархивировать его в отдельную директорию, затем нажать File->Open Workspace и открыть файл "D3D Init.dsw" из этой директории. Ну… поехали.

Сначала необходимо написать include'ы, описать глобальные переменные, которые мы будем использовать в программе, а также объявить прототипы функций:

>//Включаем все функции, необходимые для работы с D3D.

>// уже включен в этом файле

>#include

>#include //В дальнейшем нам понадобится функция sprintf()

>LPDIRECT3D8 g_pD3D = NULL; //Понадобится нам, чтобы создать D3DDevice


>//Это наше устройство rendering'а (Rendering Device)

>LPDIRECT3DDEVICE8 g_pd3dDevice = NULL;

>WNDCLASSEX wclass;

>//Объявляем прототипы функций

>VOID Init(HWND); //Инициализация D3D

>VOID Render(); //Рендеринг сцены

>VOID Sweep(); //Очистка после выполнения программы

>//Обработка сообщений, поступивших окну

>LRESULT CALLBACK MessageProc(HWND, UINT, WPARAM, LPARAM);

Что же такое Render? "Render" с английского переводится как: "переводить", "просчитывать", "визуализировать". Все объекты, которые находятся на нашей виртуальной сцене, хранятся в памяти в виде отдельных блоков: источники света, каркас, состоящий из вершин (точка в 3-D пространстве), текстуры, и т.д. Но видеокарта не может все это показать на экране, т.к. может вывести только последовательность разноцветных точек. Rendering Device как раз и выполняет эту функцию, т.е. преобразует всю нашу сцену в "понятный" для видеокарты вид.

В своих статьях я не буду переводить некоторые английские термины на русский язык, а буду их "руссифицировать" (например, я не буду переводить "rendering device", как "делательное устройство" или "устройство просчёта", а буду просто говорить "устройство рендеринга" или вообще "девайс для рендеринга" (всякое может случиться %) )). Дело не в том, что я не могу подобрать тому или иному английскому термину русский эквивалент. Просто иногда лучше пользоваться "родными" названиями (мы же не называем "Visual C" Визульным Си =-)). Едем дальше…

В нашей программе будет пять функций: функция WinMain(), Init(), Render(), Sweep() и функция обработки сообщений MessageProc(). Каждая функция представляет собой некий блок программы, который выполняет исключительно свою операцию. Например Init() будет инициализировать Direct3D (в дальнейшем, просто D3D), Render() — рендерить сцену, а Sweep() — производить очистку после выполнения программы. Я постарался, как можно больше упростить программу, поэтому урезал некоторые моменты (например, обработку ошибок, которые могут возникнуть при инициализации). В последующих программах мы будем стараться "честно" учитывать все возможные ошибки и обрабатывать их. Итак, рассмотрим подробнее, что же делают наши функции.

Функция WinMain()

Самая главная функция. Именно с нее начинается выполнение любой программы, написанной под Windows. В нашем случае она делает вот что:

Описываем переменные.

>HWND hWnd; //Handle окна

>MSG msg;

Затем идет настройка параметров класса, регистрация класса в системе и создание окна, представляющего этот класс.

>//Настраиваем параметры класса wclass перед его регистрацией в системе

>wclass.cbSize=sizeof(wndclassex);

>wclass.style=CS_DBLCLKS;

>wclass.lpfnWndProc=&MessageProc;

>//Функция обрабатывающая сообщения

>wclass.cbClsExtra=0;

>wclass.cbWndExtra=0;

>wclass.hInstance=hInst;

>wclass.hIcon=LoadIcon(NULL, IDI_APPLICATION);

>wclass.hCursor=LoadCursor(NULL, IDC_ARROW);

>wclass.hbrBackground=GetSysColorBrush(COLOR_APPWORKSPACE);

>wclass.lpszMenuName=NULL;

>wclass.lpszClassName="InitClass";

>wclass.hIconSm=NULL;


>//Выходим, если не удалось зарегистрировать класс

>if (!RegisterClassEx(&wclass)) return 0;

>//Теперь создадим окно и занесем его handle в hWnd

>hWnd =

> CreateWindow("InitClass", "D3D Init", WS_SYSMENU|WS_OVERLAPPED|WS_MINIMIZEBOX,  100, 100, 420, 300, NULL, NULL, hInst, NULL);

Подробное описание структуры WNDCLASSEX и параметров функции CreateWindow() смотри в статье JM'а "Введение в программирование под Windows". Стоит обратить внимание на то, что мы после всех манипуляций будем иметь в hWnd дескриптор окна, в котором затем сможем отображать нашу сцену.

Теперь обратимся к функции инициализации D3D:

>Init(hWnd);

Остается только показать на экране наше окно

>ShowWindow(hWnd, nCmdShow);

>//Рисуем окошко

>UpdateWindow(hWnd);

и организовать цикл обработки сообщений окну

>while (GetMessage(&msg, NULL, 0, 0)) //Цикл обработки сообщений

>{

> TranslateMessage(&msg);

> DispatchMessage(&msg);

>}

>return (msg.wParam);

Функция Init()

Теперь, когда у нас есть окно, мы готовы к инициализации объекта Direct3D. Зачем он нужен? Как только будет создан объект Direct3D, мы сможем использовать метод IDirect3D8::CreateDevice() для создания устройства Direct3D (предварительно настроив его параметры), т.е. нашего устройства рендеринга. Параметры устройства задаются непосредственно перед его созданием с помощью структуры D3DPRESENT_PARAMETERS, и передаются в метод IDirect3D8::CreateDevice(). Рассмотрим этот процесс подробнее. Итак, создаем объект Direct3D:


Рекомендуем почитать
В круге света

Яркие, современные и необычайно глубокие рассказы отца Александра завораживают читателей с первых строк. В чем секрет автора? В правде. В правде жизни. Он ясно видит то, что мы научились не замечать, – то, что доставляет нам неудобство и беспокоит совесть. Но здесь, в тени нашего внимания, не только боль и страдания. Именно здесь – и несказанная радость, ведущая нас к Свету.На конкурсе изданий «Просвещение через книгу» рассказы Александра Дьяченко были удостоены Диплома I степени.


Непридуманные истории

Священники живут в ином измерении, вернее, на грани измерений. Предстоящих пред Богом в алтаре освещает особый Свет, соприкосновение с Вечностью, а вот за вратами храма начинается мир, кипящий и бурлящий страстями. В рассказах отца Николая нет прямых проповеднических назиданий, но его герои, безусловно, запомнятся навсегда: ведь это люди, которые вселяют веру в добро, в любовь и в Бога. Автор точно передает дух эпохи: гибельные 20–30-е годы, подарившие надежду 80-е, разочарование 90-х и нынешнее, еще не совсем осмысленное время.



Маринисты

Повесть впервые напечатана в 1994 г. в литературном журнале «Юность», №5. Вышла в авторском сборнике: «Улица Вечерних услад», серия «Очарованная душа», издательство «ЭКСМО-Пресс», 1998, Москва.


Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


Геймдизайн. Рецепты успеха лучших компьютерных игр от Super Mario и Doom до Assassin’s Creed и дальше

Что такое ГЕЙМДИЗАЙН? Это не код, графика или звук. Это не создание персонажей или раскрашивание игрового поля. Геймдизайн – это симулятор мечты, набор правил, благодаря которым игра оживает. Как создать игру, которую полюбят, от которой не смогут оторваться? Знаменитый геймдизайнер Тайнан Сильвестр на примере кейсов из самых популярных игр рассказывает как объединить эмоции и впечатления, игровую механику и мотивацию игроков. Познакомитесь с принципами дизайна, которыми пользуются ведущие студии мира! Создайте игровую механику, вызывающую эмоции и обеспечивающую разнообразие.


Обработка событий в С++

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


MFC и OpenGL

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


Симуляция частичной специализации

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


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.