資源簡介
DirectX繪制三維旋轉的立方體,立方體使用索引緩存繪制,設置了簡單的世界矩陣,投影變換矩陣,視口變換,適合初學者學習繪制三維物體,熟悉簡單的矩陣的設置。
代碼片段和文件信息
#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對象
LPDIRECT3DDEVICE9?g_pD3DDevice?=?NULL;//D3D設備對象
LPDIRECT3DVERTEXBUFFER9?g_pVB?=?NULL;//頂點緩沖區對象
LPDIRECT3DINDEXBUFFER9?g_pIB?=?NULL;//索引緩沖區對象
ID3DXFont*??????????????g_pFont=NULL;?//字體COM接口??
float???????????????????g_FPS?=?0.0f;?//一個浮點型的變量,代表幀速率??
wchar_t????????????????g_strFPS[50];?//包含幀速率的字符數組?
int?size_vertex;
int?size_index;
//函數聲明
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();
//繪制圖形--準備數據--設定FVF
typedef?struct
{
D3DXVECTOR3?vtx;
D3DCOLOR?diffuse;
}VERTEX_2D;
#define?FVF_VERTEX_2D?(D3DFVF_XYZ?|?D3DFVF_DIFFUSE)//?(XYZ是表示三個坐標,DIFFUSE表示顏色RHW可能表示2D或者3D)
//VERTEX_2D?g_aVertex[6];
//程序入口
int?WINAPI?WinMain(HINSTANCE?hInstance?HINSTANCE?hPrevInstance?LPSTR?lpCmdLine?int?nCmdShow)
{
HWND?hWnd;
MSG?msg;
//注冊windows類
WNDCLASSEX?wcex=
{
sizeof(WNDCLASSEX)
CS_CLASSDC
WndProc
0
0
hInstance
NULL
LoadCursor(NULLIDC_ARROW)
(HBRUSH)(COLOR_WINDOW+1)
????NULL
“window“
NULL
};
RegisterClassEx(&wcex);
//創建窗口
hWnd?=?CreateWindowEx(0“window““practice01“WS_OVERLAPPEDWINDOWCW_USEDEFAULTCW_USEDEFAULTSCREEN_WIDTHSCREEN_HEIGHTNULLNULLhInstanceNULL);
//初始化D3D程序
InitD3D(hWndtrue);
if(FAILED(InitD3D(hWndtrue)))
{
return?-1;
}
????//顯示窗口
???ShowWindow(hWndnCmdShow);
???UpdateWindow(hWnd);
//處理消息循環
while(1)
{
if(PeekMessage(&msgNULL00PM_REMOVE)!=0)
{
if(msg.message?==?WM_QUIT)
{
break;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
else
{
Update();
Draw(hWnd);
}
}
//結束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對象接口
g_pD3D?=?Direct3DCreate9(D3D_SDK_VERSION);
if(g_pD3D?==?NULL)
{
return?E_FAIL;
}
//獲取顯示卡設備的顯示模式
if(FAILED(g_pD3D->GetAdapterDisplayMode(
- 上一篇:C++圖書管理系統代碼
- 下一篇:C++ 控制臺 掃雷 鼠標輸入
評論
共有 條評論