Программируем игры на DirectX: различия между версиями

Исправил грамматические ошибки.
(Исправил грамматические ошибки.)
</source>
 
Дальше мы должны подключить заголовочные файлифайлы, чтобы компилятор не выдавал ошибки.
 
<source lang="cpp">
//Подключаем заголовчныезаголовочные файлы
#include <windows.h>
#include <d3d9.h>
int g_iWindowWidth = 800; //Ширина окна
int g_iWindowHeight = 600; //Высота окна
bool g_bApplicationState = true; //Состояние приложения (true - работает/false - неработаетне работает)
IDirect3D9 *g_pDirect3D = NULL; //Интерфейс для создания устройства рендеринга
IDirect3DDevice9 *g_pDirect3DDevice = NULL; //Интерфейс устройства рендеринга
if(!RegisterClassEx(&wc)) //Регистрируем класс в Windows
{
Shutdown(); //ОсвобаждемОсвобождем память
MessageBox(NULL,"Can`t register window class","Error",MB_OK|MB_ICONERROR); //Выводим сообщение
return 0; //Завершаем работу приложения
}
 
return DefWindowProc(hWnd,iMsg,wParam,lParam); //Если нету для нас нужных сообщений, пусть это обрабатывает виндовсWindows
}
</source>
HRESULT hr = NULL; //Создаем переменную для записи в неё результатов работы функций
 
D3DDISPLAYMODE DisplayMode; //Структура для получения информации о режиме отображения в виндовсWindows
hr = g_pDirect3D->GetAdapterDisplayMode( //Получаем режим отображения
D3DADAPTER_DEFAULT, //Используем первичную видеокарту
if(FAILED(hr)) //Если не получилось
return false; //ВозвращяемВозвращаем false
 
PresParam.hDeviceWindow = g_hWnd; //Дескриптор окна
PresParam.AutoDepthStencilFormat = DepthFormat; //Формат буфера глубины
PresParam.SwapEffect = D3DSWAPEFFECT_FLIP; //Режим смены кадров
PresParam.BackBufferFormat = DisplayMode.Format;//Устанавливаем формат пикселя определеныйопределенный в виндовсWindows
 
hr = g_pDirect3D->CreateDevice( //Создаем устройство рендеринга
D3DADAPTER_DEFAULT, //Используем первичную видеокарту
D3DDEVTYPE_HAL, //Устройства рендеринга использует возможности видеокарты
g_hWnd, //Дескриптор окна
D3DCREATE_HARDWARE_VERTEXPROCESSING, //Обрабатываем вершиннывершины видеокартой
&PresParam, //Отдаем параметры устройства
&g_pDirect3DDevice); //Создаем устройство рендеринга
if(SUCCEEDED(hr)) //Если получилось
return true; //ВозвращяемВозвращаем true
 
hr = g_pDirect3D->CreateDevice( //Создаем устройство рендеринга
D3DDEVTYPE_HAL, //Устройства рендеринга использует возможности видеокарты
g_hWnd, //Дескриптор окна
D3DCREATE_MIXED_VERTEXPROCESSING, //Обрабатываем вершиннывершины смешано (видеокартой и процессором)
&PresParam, //Отдаем параметры устройства
&g_pDirect3DDevice); //Создаем устройство рендеринга
 
if(SUCCEEDED(hr)) //Если получилось
return true; //ВозвращяемВозвращаем true
 
hr = g_pDirect3D->CreateDevice( //Создаем устройство рендеринга
D3DDEVTYPE_HAL, //Устройства рендеринга использует возможности видеокарты
g_hWnd, //Дескриптор окна
D3DCREATE_SOFTWARE_VERTEXPROCESSING, //Обрабатываем вершиннывершины процесоромпроцессором
&PresParam, //Отдаем параметры устройства
&g_pDirect3DDevice); //Создаем устройство рендеринга
 
if(SUCCEEDED(hr)) //Если получилось
return true; //ВозвращяемВозвращаем true
 
return false; //ВозвращяемВозвращаем false
}
</source>
 
Приступим к написанию функции, которая будет рисовать кадры. У устройства рендеринга есть свои недостатки - потеря устройства. потеря устройства возникает например в случаях когда полноэкранное окно не в фокусе и тдт.д. После того как мы потеряли устройство надо его востановитьвосстановить, чтобы дальше можно было отображать сцену.
 
<source lang="cpp">
D3DCOLOR_XRGB(0,0,0), //Цвет в который очищаем задний буфер, в нашем случае черный
1.0f, //Очищаем буфер глубины, заполнив его единицами
0L); //Этот параметртпараметр игнорируетьсяигнорируется так как не выстовленвыставлен соответсвующийсоответствующий флаг
 
g_pDirect3DDevice->BeginScene(); //Начало сцены
</source>
 
Ну и последняя функция, которая будет освобождать выдуленеуювыделенную память. Освобождать память надо в обратном порядке выделения памяти.
 
<source lang="cpp">
g_hWnd = NULL; //Устанавливаем дескриптор окна в ноль
 
if(!UnregisterClass("Lesson 1",g_hInstance)) //Если не получилось удалить наше зарегестрированоезарегистрированное окно
g_hInstance = NULL; //Устанавливаем дескриптор приложения в ноль
}
Теперь компилируем и смотрим что получилось)
 
Мы написали приложение которое инициализирует Direct3D в оконном режиме, а в полоэкранномполноэкранном режиме мы напишем когда наше приложение будет поддерживать клавиатуру.
 
[[Категория:Компьютерные игры]]
Анонимный участник