资源简介

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(

评论

共有 条评论