资源简介
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++ 控制台 扫雷 鼠标输入
相关资源
- 基于STM32F103ZET6控制舵机旋转(ts90a/
- 三维点云边界提取
- 基于OSG的三维河流的可视化研究——
- 基于极大似然估计的三维定位算法
- 三维重建 特征点提取 立体匹配
- 三维地形显示代码
- 三维点云的圆柱面拟合
- 使用OpenGL实现多个小球在密闭空间内
- VTK三维可视化读取RAW数据的c++源代码
- vc++和OpenGL实现三维地形实时动态显示
- MFC实现简易画图程序
- C++实现利用OpenGL实现三维绘图
- VC6.0三维画图画三维球,立方体,矩形
- MFC 单文档 实现opengl 三维旋转 缩放
- MFC+OpenGL三维建模与动画显示
- MFC绘制的移动小车,包含了图形的平
- VS2010中MFC利用TeeChart控件实现画三维图
- 三维重建VC++
- 24位BMP图像用C++实现平移、旋转、镜像
- VC++ OpenGL三维地形漫游
- OpenGL实现三维地形实时动态显示
- MFC 图像处理之几何运算 图像平移旋转
- 大地坐标与三维坐标转换
- 《Visual C++ OpenGL DirectX三维动画编程宝
- 图像按任意角度旋转C++
- 纯mfc绘图制做三维仿真图形魔方
- VS2010MFC利用TeeChart绘制瀑布图三维图
- C语言实现图像的旋转缩放裁切
- vc++三维点云数据的读取与显示
- VC C++数字图像处理实验程序
评论
共有 条评论