資源簡(jiǎn)介
DirectX繪制三維旋轉(zhuǎn)的立方體,立方體使用索引緩存繪制,設(shè)置了簡(jiǎn)單的世界矩陣,投影變換矩陣,視口變換,適合初學(xué)者學(xué)習(xí)繪制三維物體,熟悉簡(jiǎn)單的矩陣的設(shè)置。
代碼片段和文件信息
#include
#include?“d3dx9.h“
#include?“d3d9.h“
#include?
#include?
//將庫文件鏈接到該工程中
#pragma?comment(lib“d3d9.lib“)
#pragma?comment(lib“d3dx9.lib“)
#pragma?comment(lib“dxguid.lib“)
#pragma?comment(lib“winmm.lib“)
#pragma?comment(linker?“/STACK:5000000?“)
#define?SCREEN_WIDTH?800
#define?SCREEN_HEIGHT?600
#define?D3DX_PI?((FLOAT)?3.141592654f)
//定義全局變量
LPDIRECT3D9?g_pD3D?=?NULL;//D3D對(duì)象
LPDIRECT3DDEVICE9?g_pD3DDevice?=?NULL;//D3D設(shè)備對(duì)象
LPDIRECT3DVERTEXBUFFER9?g_pVB?=?NULL;//頂點(diǎn)緩沖區(qū)對(duì)象
LPDIRECT3DINDEXBUFFER9?g_pIB?=?NULL;//索引緩沖區(qū)對(duì)象
ID3DXFont*??????????????g_pFont=NULL;?//字體COM接口??
float???????????????????g_FPS?=?0.0f;?//一個(gè)浮點(diǎn)型的變量,代表幀速率??
wchar_t????????????????g_strFPS[50];?//包含幀速率的字符數(shù)組?
int?size_vertex;
int?size_index;
//函數(shù)聲明
LRESULT?CALLBACK?WndProc(HWND?hwnd?UINT?uMsg?WPARAM?wParam?LPARAM?lParam);
HRESULT?InitD3D(HWND?hwnd?BOOL?bWindow);
HRESULT?InitVBandIB();
HRESULT?InitPolygon(void);
void?Uninit(void);
void?Draw(HWND?hWnd);
void?Update(void);
void?DrawPolygon(void);
void?Matrix_Set(void);
float?Get_FPS();
//繪制圖形--準(zhǔn)備數(shù)據(jù)--設(shè)定FVF
typedef?struct
{
D3DXVECTOR3?vtx;
D3DCOLOR?diffuse;
}VERTEX_2D;
#define?FVF_VERTEX_2D?(D3DFVF_XYZ?|?D3DFVF_DIFFUSE)//?(XYZ是表示三個(gè)坐標(biāo),DIFFUSE表示顏色RHW可能表示2D或者3D)
//VERTEX_2D?g_aVertex[6];
//程序入口
int?WINAPI?WinMain(HINSTANCE?hInstance?HINSTANCE?hPrevInstance?LPSTR?lpCmdLine?int?nCmdShow)
{
HWND?hWnd;
MSG?msg;
//注冊(cè)windows類
WNDCLASSEX?wcex=
{
sizeof(WNDCLASSEX)
CS_CLASSDC
WndProc
0
0
hInstance
NULL
LoadCursor(NULLIDC_ARROW)
(HBRUSH)(COLOR_WINDOW+1)
????NULL
“window“
NULL
};
RegisterClassEx(&wcex);
//創(chuàng)建窗口
hWnd?=?CreateWindowEx(0“window““practice01“WS_OVERLAPPEDWINDOWCW_USEDEFAULTCW_USEDEFAULTSCREEN_WIDTHSCREEN_HEIGHTNULLNULLhInstanceNULL);
//初始化D3D程序
InitD3D(hWndtrue);
if(FAILED(InitD3D(hWndtrue)))
{
return?-1;
}
????//顯示窗口
???ShowWindow(hWndnCmdShow);
???UpdateWindow(hWnd);
//處理消息循環(huán)
while(1)
{
if(PeekMessage(&msgNULL00PM_REMOVE)!=0)
{
if(msg.message?==?WM_QUIT)
{
break;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
Update();
Draw(hWnd);
}
}
//結(jié)束D3D程序
UnregisterClass(“window“wcex.hInstance);
return?(int)msg.wParam;
Uninit();
}
LRESULT?CALLBACK?WndProc(HWND?hWnd?UINT?uMsg?WPARAM?wParam?LPARAM?lParam)
{
switch(uMsg)
{
case?WM_CREATE:
break;
case?WM_LBUTTONDOWN:
SetFocus(hWnd);
break;
case?WM_DESTROY:
PostQuitMessage(0);
break;
}
return?DefWindowProc(hWnduMsgwParamlParam);
}
HRESULT?InitD3D(HWND?hWnd?BOOL?bWindow)
{
D3DPRESENT_PARAMETERS?d3dpp;
D3DDISPLAYMODE?d3ddm;
//獲取D3D對(duì)象接口
g_pD3D?=?Direct3DCreate9(D3D_SDK_VERSION);
if(g_pD3D?==?NULL)
{
return?E_FAIL;
}
//獲取顯示卡設(shè)備的顯示模式
if(FAILED(g_pD3D->GetAdapterDisplayMode(
評(píng)論
共有 條評(píng)論