资源简介
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++ 控制台 扫雷 鼠标输入
相关资源
- 一个基于DirectX的小游戏
- c语言三维线性插值
- 程序:四元数欧拉角旋转向量旋转矩
- VTK三维球体测量
- c语言实现图像的旋转与平移
- 模拟卫星旋转和地球自转
- 实现三维坐标变换、投影变换,C++实
- VC++Spin(旋转)控件用法
- openGL通过点线方式画出立方体并移动
- OPENGL 画颜色渐变六角星+旋转
- 演示一个不断旋转、缩放和移动的正
- 三维布尔运算算法
- NV21图像旋转、平移、缩放操作实现
- OpenGL实现的三维桌球游戏模拟源代码
- 正轴测投影+旋转
- 旋转的风车,使用MFC编写
- 不断旋转、缩放和移动的正三棱锥
- 泡泡堂 DirectX11 Demo
- OpenGL 立体五角星 绘制
- VTK医学图像三维重建
- VC++ OpenGL三维物体建模--雨伞的绘制(
- 基于PCL、VTK的切片法计算三维模型的
- DirectX 9.0 SDK
- 绝对定向mfc源程序
- C++矩阵变换
- 通过多个三维控制点 实现生成Bezier样
- 3DMax 2014 导出.x文件
- Directx修复软件
- 计算机图形学 课程设计 作业
- 旋转编码开关C语言单片机开发
评论
共有 条评论