Навигация по сайту: home файлы ссылки уроки, примеры форум |
Уроки, примерыУрок 1Создание устройства.Пусть вы уже нашли где-то 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 ); UpdateWindow( 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. P.S. Исходники примера здесь |
урок 1 урок 2 урок 3 урок 4 |