Пусть вы уже нашли где-то DirectX 8.1 и его SDK. Если вы хотите научиться сами создавать простейшее пустое приложение или в вашем SDK нет мастера создания, то вам сюда. Я предполагаю, что вы уже имеете опыт создания приложений для Windows без использования MFC.
Если нет, то может быть вам следует посмотреть различные статьи по этой теме.
Итак. Создайте проект, присоедините к нему d3d8.lib (в настройках проекта), перейдите в его главный файл и найдите функцию WinMain. Добавьте в нее примерно это:
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, MsgProc, 0L, 0L,
GetModuleHandle(NULL), NULL, NULL, NULL, NULL,"Lession", NULL };
RegisterClassEx( &wc );
HWND hWnd = CreateWindow( " Lession ", "Lession 1",
WS_OVERLAPPEDWINDOW, 100, 100, 300, 300,
GetDesktopWindow(), NULL, wc.hInstance, NULL );
Этот участок кода стандартен почти для всех Win32 прилжоений. После создания окна необходимо создать устройство Direct3D. Для этого создайте функцию, например, InitD3D(HWND hWnd). В нее включите следующий код:
g_pD3D = Direct3DCreate8( D3D_SDK_VERSION );
Перед этим лучше добавить LPDIRECT3D8 g_pD3D в начало програмы после #include. Функчия Direct3DCreate8() возвращает указатель на интерфейс IDirect3D8. Следующий шаг – получение доступного D3D устройства:
D3DDISPLAYMODE d3ddm;
g_pD3D->GetAdapterDisplayMode( D3DADAPTER_DEFAULT, &d3ddm );
Дальше необходимо определить настройки вашего 3D приложения с помощью структуры D3DPRESENT_PARAMETERS:
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE; // ваше приложение исполняется в окне
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = d3ddm.Format; // формат заднего буфера берется стандартным
Последний кусок кода в этой функции – завершение создание Direct3d устройства, создание устройства рендеринга. Поместите в начало файла определение LPDIRECT3DDEVICE8 g_pd3dDevice, а следующий код – в InitD3d().
g_pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, hWnd,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &g_pd3dDevice );
В этой функции параметр D3DDEVTYPE_HAL указывает на то, что используется аппаратное ускорение. hWnd характеризует текущее окно приложения. g_pd3dDevice – новое устройство рендеринга. D3DCREATE_SOFTWARE_VERTEXPROCESSING указывает на то, что используется программная обработка вершин.
Если видеокарта поддерживает аппаратую обработку вершин, установите D3DCREATE_HARDWARE_VERTEXPROCESSING для увеличения производительности.
Следующий шаг – создание функции обработки системных сообщений. Опять же найдите функцию WinMain(), добавьте в нее во-первых вызов функции InitD3D и показ окна:
InitD3D( hWnd );
ShowWindow( hWnd, SW_SHOWDEFAULT );
Window( hWnd );
А во-вторых нужно добавить код получения системных сообщений:
MSG msg;
while( GetMessage( &msg, NULL, 0, 0 ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
Как только вы сделали это, можно создать функцию обработки сооющений:
LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_DESTROY:
PostQuitMessage( 0 );
return 0;
case WM_PAINT:
Render();
ValidateRect( hWnd, NULL );
return 0;
}
return DefWindowProc( hWnd, msg, wParam, lParam );
}
Данная функция при получении сообщения о выходе завершает приложение, а при получении сообщения о перерисовке окна она выполняет функцию Render(), о которой будет рассказано ниже.
Кстати, вместо WM_PAINT можно использовать WM_TIMER или что-нибудь еще. Теперь самое гланое (почти) – функция рендеринга. Создайте функцию Render и добавьте в нее следующий код:
g_pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
Эта функция очищает экран и заполняет его синим (в данном случае) цветом. После этого необходимо начать процедуру рендеринга:
g_pd3dDevice->BeginScene();
и закончить ее:
g_pd3dDevice->EndScene();
В этой программе нет никаких элементов, которые нужно было бы рендерить, но если бы они были, их нужно было бы размещать между началом и концом рендеринга. Т.к. рендеринг производится на задний буффер, его необходимо отобразить на передний (экран):
g_pd3dDevice->Present( NULL, NULL, NULL, NULL );
Теперь вам надо добавить в программу код, который будет отвечать за уничтожение всего того, что вы создали. Для этого найдите WinMain() и припишите перед return 0 следующее:
if(g_pd3dDevice != NULL)
g_pd3dDevice->Release();
if( g_pD3D != NULL)
g_pD3D->Release();
Вот вроде бы и все. После сборки приложения вы увидите синее окно. Это будет означать, что вы все сделали правильно. Но помните, что это очень нудный вариант создатия программы, т.к. есть очень легкий способ – AppWizard.