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, Москва.


Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

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


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

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


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

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


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

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