D3DX Transformation & Orientation
lecture3
D3DXMath
Direct3DX Mathematical Functions
D3DInit
DirectX9 Installation
1. DirectX9 SDK (Feb 2010)을 다운 받아 설치해 주어야합니다.
File Name:DXSDK_Feb10.exe
Version:9.28.1886
Date Published:2/5/2010
Language:English
Download Size:554.6 MB
2. Visual Studio .NET 2008이 설치된 디렉토리의 Include와 Lib 경로 연결하기
실행파일 디렉토리에 C:\Program Files\Microsoft DirectX SDK (February 2010)\Utilities\bin\x86 추가됨
포함파일 디렉토리에 C:\Program Files\Microsoft DirectX SDK (February 2010)\Include 추가됨
라이브러리파일 디렉토리에 C:\Program Files\Microsoft DirectX SDK (February 2010)\Lib\x86 추가됨
3. 셋팅이 모두 끝나면, 프로젝트를 Win32 Project로 생성 (File->New->Project, 템플렛에서 Win32->Win32 Project를 선택하고 <your project name>을 넣는다)하고, 아래의 소스를 넣어 컴파일 실행해 봅니다.
/****************************************************************
* shows the user how to setup a windowed direct3d application
* which clears the window to a blue color
****************************************************************/
// include directx9
#include <windows.h>
#include <d3d9.h>
// global variables
HINSTANCE hInst; // application instance
HWND wndHandle; // application window handle
LPDIRECT3D9 pD3D; // the Direct3D Object
LPDIRECT3DDEVICE9 pd3dDevice; // the Direct3D Device
////////////////////////////////////////////// forward declarations
bool initWindow(HINSTANCE hInstance);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
// DirectX functions
bool initDirect3D();
void render(void);
/*********************************************************************
* WinMain
*********************************************************************/
int WINAPI WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine, int nCmdShow)
{
if (!initWindow(hInstance))
{
MessageBox(NULL, “Unable to create window”, “ERROR”, MB_OK);
return false;
}
if (!initDirect3D())
{
MessageBox(NULL, “Unable to init Direct3D”, “ERROR”, MB_OK);
return false;
}
// Main message loop:
MSG msg;
ZeroMemory( &msg, sizeof(msg) );
while( msg.message!=WM_QUIT )
{
if( PeekMessage( &msg, NULL, 0U, 0U, PM_REMOVE ) )
{
TranslateMessage( &msg );
DispatchMessage( &msg );
}
else
{
render();
}
}
// release the device and the direct3D object
if( pd3dDevice != NULL)
pd3dDevice->Release();
if( pD3D != NULL)
pD3D->Release();
return (int) msg.wParam;
}
/*********************************************************************
* initWindow
*********************************************************************/
bool initWindow(HINSTANCE hInstance)
{
WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = 0;
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = NULL;
wcex.lpszClassName = “DirectXExample”;
wcex.hIconSm = 0;
RegisterClassEx(&wcex);
// create the window
wndHandle = CreateWindow(“DirectXExample”,
“DirectXExample”,
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT,
CW_USEDEFAULT,
640,
480,
NULL,
NULL,
hInstance,
NULL);
if (!wndHandle)
return false;
ShowWindow(wndHandle, SW_SHOW);
UpdateWindow(wndHandle);
return true;
}
/*********************************************************************
* WndProc
*********************************************************************/
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
switch (message)
{
case WM_DESTROY:
PostQuitMessage(0);
break;
}
return DefWindowProc(hWnd, message, wParam, lParam);
}
/*********************************************************************
* initDirect3D
* initializes direct3D
*********************************************************************/
bool initDirect3D()
{
pD3D = NULL;
pd3dDevice = NULL;
// create the directX object
if( NULL == ( pD3D = Direct3DCreate9( D3D_SDK_VERSION ) ) )
{
return false;
}
// fill the presentation parameters structure
D3DPRESENT_PARAMETERS d3dpp;
ZeroMemory( &d3dpp, sizeof(d3dpp) );
d3dpp.Windowed = TRUE;
d3dpp.SwapEffect = D3DSWAPEFFECT_DISCARD;
d3dpp.BackBufferFormat = D3DFMT_UNKNOWN;
d3dpp.BackBufferCount = 1;
d3dpp.BackBufferHeight = 480;
d3dpp.BackBufferWidth = 640;
d3dpp.hDeviceWindow = wndHandle;
// create a default directx device
if( FAILED( pD3D->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_REF, wndHandle,
D3DCREATE_SOFTWARE_VERTEXPROCESSING,
&d3dpp, &pd3dDevice ) ) )
{
return false;
}
return true;
}
/*********************************************************************
* render
*********************************************************************/
void render(void)
{
// check to make sure we have a valid Direct3D Device
if( NULL == pd3dDevice )
return;
// Clear the backbuffer to a blue color
pd3dDevice->Clear( 0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB(0,0,255), 1.0f, 0 );
// Present the backbuffer contents to the display
pd3dDevice->Present( NULL, NULL, NULL, NULL );
}
4. 이때, d3d9.lib d3dx9.lib winmm.lib 라이브러리 링크를 걸어줍니다.
5. 컴파일/링크 (Build)(F7)후 실행(Debug)(F5)시켜서 파란색화면의 윈도우가 뜨면 완성된 것입니다.