//*****************************************************************************************
//
//【Visual C++】游戏开发笔记系列配套源码五十 浅墨DirectX教程十八 雪花飞扬:实现唯美的粒子系统
// VS2010版
// 2013年 3月31日 Create by 浅墨
//图标素材出处: VAMPIRE_SWEETIE
//背景音乐素材出处:魔兽争霸3 暗夜精灵战斗曲
//人物模型素材出处:英雄无敌6
//源码配套博文链接:http://blog.csdn.net/zhmxy555/article/details/8744805
//更多内容请访问我的博客: http://blog.csdn.net/zhmxy555
//
//*****************************************************************************************
//*****************************************************************************************
// Desc: 宏定义部分
//*****************************************************************************************
#define SCREEN_WIDTH 932 //为窗口宽度定义的宏,以方便在此处修改窗口宽度
#define SCREEN_HEIGHT 700 //为窗口高度定义的宏,以方便在此处修改窗口高度
#define WINDOW_TITLE _T("【Visual C++】游戏开发笔记系列配套示例程序五十 浅墨DirectX教程十八 雪花飞扬:实现唯美的粒子系统") //为窗口标题定义的宏
//*****************************************************************************************
// Desc: 头文件定义部分
//*****************************************************************************************
#include <d3d9.h>
#include <d3dx9.h>
#include <tchar.h>
#include <time.h>
#include "DirectInputClass.h"
#include "CameraClass.h"
#include "TerrainClass.h"
#include "SkyBoxClass.h"
#include "SnowParticleClass.h"
//*****************************************************************************************
// Desc: 库文件定义部分
//*****************************************************************************************
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")
#pragma comment(lib, "dinput8.lib") // 使用DirectInput必须包含的库文件,注意这里有8
#pragma comment(lib,"dxguid.lib")
#pragma comment(lib, "winmm.lib")
//*****************************************************************************************
// Desc: 全局变量声明部分
//*****************************************************************************************
LPDIRECT3DDEVICE9 g_pd3dDevice = NULL; //Direct3D设备对象
LPD3DXFONT g_pTextFPS =NULL; //字体COM接口
LPD3DXFONT g_pTextAdaperName = NULL; // 显卡信息的2D文本
LPD3DXFONT g_pTextHelper = NULL; // 帮助信息的2D文本
LPD3DXFONT g_pTextInfor= NULL; // 绘制信息的2D文本
float g_FPS= 0.0f; //一个浮点型的变量,代表帧速率
wchar_t g_strFPS[50] ={0}; //包含帧速率的字符数组
wchar_t g_strAdapterName[60] ={0}; //包含显卡名称的字符数组
D3DXMATRIX g_matWorld; //世界矩阵
LPD3DXMESH g_pMesh = NULL; // 网格对象
D3DMATERIAL9* g_pMaterials= NULL; // 网格的材质信息
LPDIRECT3DTEXTURE9* g_pTextures = NULL; // 网格的纹理信息
DWORD g_dwNumMtrls = 0; // 材质的数目
LPD3DXMESH g_cylinder = NULL; //柱子网格对象
D3DMATERIAL9 g_MaterialCylinder; //柱子的材质
D3DLIGHT9 g_Light; //全局光照
DInputClass* g_pDInput = NULL; //DInputClass类的指针实例
CameraClass* g_pCamera = NULL; //摄像机类的指针实例
TerrainClass* g_pTerrain = NULL; //地形类的指针实例
SkyBoxClass* g_pSkyBox=NULL; //天空盒类的指针实例
SnowParticleClass* g_pSnowParticles = NULL; //雪花粒子系统的指针实例
//*****************************************************************************************
// Desc: 全局函数声明部分
//*****************************************************************************************
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam );
HRESULT Direct3D_Init(HWND hwnd,HINSTANCE hInstance);
HRESULT Objects_Init();
void Direct3D_Render( HWND hwnd,FLOAT fTimeDelta);
void Direct3D_Update( HWND hwnd,FLOAT fTimeDelta);
void Direct3D_CleanUp( );
float Get_FPS();
void HelpText_Render(HWND hwnd);
//*****************************************************************************************
// Name: WinMain( )
// Desc: Windows应用程序入口函数
//*****************************************************************************************
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)
{
//开始设计一个完整的窗口类
WNDCLASSEX wndClass={0} ; //用WINDCLASSEX定义了一个窗口类,即用wndClass实例化了WINDCLASSEX,用于之后窗口的各项初始化
wndClass.cbSize = sizeof( WNDCLASSEX ) ; //设置结构体的字节数大小
wndClass.style = CS_HREDRAW | CS_VREDRAW; //设置窗口的样式
wndClass.lpfnWndProc = WndProc; //设置指向窗口过程函数的指针
wndClass.cbClsExtra = 0;
wndClass.cbWndExtra = 0;
wndClass.hInstance = hInstance; //指定包含窗口过程的程序的实例句柄。
wndClass.hIcon=(HICON)::LoadImage(NULL,_T("GameMedia\\icon.ico"),IMAGE_ICON,0,0,LR_DEFAULTSIZE|LR_LOADFROMFILE); //从全局的::LoadImage函数从本地加载自定义ico图标
wndClass.hCursor = LoadCursor( NULL, IDC_ARROW ); //指定窗口类的光标句柄。
wndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH); //为hbrBackground成员指定一个灰色画刷句柄
wndClass.lpszMenuName = NULL; //用一个以空终止的字符串,指定菜单资源的名字。
wndClass.lpszClassName = _T("ForTheDreamOfGameDevelop"); //用一个以空终止的字符串,指定窗口类的名字。
if( !RegisterClassEx( &wndClass ) ) //设计完窗口后,需要对窗口类进行注册,这样才能创建该类型的窗口
return -1;
HWND hwnd = CreateWindow( _T("ForTheDreamOfGameDevelop"),WINDOW_TITLE, //喜闻乐见的创建窗口函数CreateWindow
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, SCREEN_WIDTH,
SCREEN_HEIGHT, NULL, NULL, hInstance, NULL );
//Direct3D资源的初始化,调用失败用messagebox予以显示
if (!(S_OK==Direct3D_Init (hwnd,hInstance)))
{
MessageBox(hwnd, _T("Direct3D初始化失败~!"), _T("浅墨的消息窗口"), 0); //使用MessageBox函数,创建一个消息窗口
}
PlaySound(L"GameMedia\\NightElf1.wav", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //循环播放背景音乐
MoveWindow(hwnd,200,10,SCREEN_WIDTH,SCREEN_HEIGHT,true); //调整窗口显示时的位置,窗口左上角位于屏幕坐标(200,0)处
ShowWindow( hwnd, nShowCmd ); //调用Win32函数ShowWindow来显示窗口
UpdateWindow(hwnd); //对窗口进行更新,就像我们买了新房子要装修一样
//进行DirectInput类的初始化
g_pDInput = new DInputClass();
g_pDInput->Init(hwnd,hInstance,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE);
//消息循环过程
MSG msg = { 0 }; //初始化msg
while( msg.message != WM_QUIT ) //使用while循环
{
static FLOAT fLastTime = (float)::timeGetTime();
static FLOAT fCurrTime = (float)::timeGetTime();
static FLOAT fTimeDelta = 0.0f;
fCurrTime = (float)::timeGetTime();
fTimeDelta = (fCurrTime - fLastTime) / 1000.0f;
fLastTime = fCurrTime;
if( PeekMessage( &msg, 0, 0, 0, PM_REMOVE ) ) //查看应用程序消息队列,有消息时将队列中的消息派发出去。
{
TranslateMessage( &msg ); //将虚拟键消息转换为字符消息
DispatchMessage( &msg ); //该函数分发一个消息给窗口程序。
}
else
{
Direct3D_Update(hwnd,fTimeDelta); //调用更新函数,进行画面的更新
Direct3D_Render(hwnd,fTimeDelta); //调用渲染函数,进行画面的渲染
}
}
UnregisterClass(_T("ForTheDreamOfGameDevelop"), wndClass.hInstance);
return 0;
}
//*****************************************************************************************
// Name: WndProc()
// Desc: 对窗口消息进行处理
//*****************************************************************************************
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ) //窗口过程函数WndProc
{
switch( message ) //switch语句开始
{
case WM_PAINT: // 客户区重绘消息
Direct3D_Render(hwn
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
零资源分下载,分享精神至上~ 新加入雪花飞扬天气粒子系统,非常唯美。 其中的3D人物模型出自英雄无敌6,背景音乐为暗夜精灵战斗曲。 一个综合型的Direct3D示例程序的4.0版。 用键盘上W,A,S,D,I,J,K,L,↑,↓,←,→12个键加上鼠标在美丽的三维空间中翱翔。包括了Direct3D初始化,DirectInput输入处理,顶点缓存,光照与材质,文字输出,颜色,纹理贴图,四大变换,网格模型,X文件载入等等知识(当然还有默认被开启的深度缓存),以及地形系统模拟,三维天空模拟,粒子系统。 源码的配套博文是 《【Visual C++】游戏开发五十 浅墨DirectX教程十八 雪花飞扬:实现唯美的粒子系统》 ,文章地址为http://blog.csdn.net/zhmxy555/article/details/8744805, 点击Release文件夹下的exe文件可以直接看到运行效果,运行需要DirectX运行库的支持。报缺少D3D的DLL系列错误的童鞋们请google/百度一下 “DirectX 9.0c runtime”,下载并装个最新版的。 报缺少MVCR100D.Dll错误的朋友们去下一个安装就可以了,或者直接点击sln打开工程再次编译一次。 如果是想调试并运行源代码,但是报错了,请去下载最新版DirectX SDK并进行DirectX开发环境的配置。 编写环境:VS2010 我的博客地址是http://blog.csdn.net/zhmxy555,源码结合配套文章一起看效果更佳。 希望能和大家一起交流,共同学习,共同进步。
资源推荐
资源详情
资源评论
收起资源包目录
D3Ddemo18 by浅墨.rar (55个子文件)
D3Ddemo18 by浅墨
D3Ddemo18.sln 894B
D3Ddemo18
angle.X 1.09MB
CameraClass.h 2KB
SkyBoxClass.cpp 6KB
TerrainClass.h 2KB
D3Ddemo18.vcxproj.user 143B
510b66d8.bmp 3MB
CameraClass.cpp 10KB
SnowParticleClass.cpp 6KB
TerrainClass.cpp 8KB
main.cpp 26KB
GameMedia
TropicalSunnyDayUp2048.png 3.94MB
TropicalSunnyDayBack2048.png 3.82MB
TropicalSunnyDayRight2048.png 3.56MB
icon.ico 132KB
heighmap.raw 117KB
snow5.jpg 45KB
TropicalSunnyDayFront2048.png 3.6MB
snow4.jpg 37KB
terrainstone.jpg 507KB
NightElf1.wav 20.92MB
snow3.jpg 51KB
snow1.jpg 36KB
snow2.jpg 45KB
TropicalSunnyDayLeft2048.png 3.49MB
snow6.jpg 36KB
D3Ddemo18.vcxproj 4KB
D3DUtil.h 737B
DirectInputClass.h 1KB
SkyBoxClass.h 1KB
DirectInputClass.cpp 4KB
SnowParticleClass.h 2KB
10e74fa0.bmp 384KB
D3Ddemo18.vcxproj.filters 2KB
D3Ddemo18.suo 26KB
Release
angle.X 1.09MB
510b66d8.bmp 3MB
D3Ddemo18.exe 42KB
D3Ddemo18.pdb 811KB
GameMedia
TropicalSunnyDayUp2048.png 3.94MB
TropicalSunnyDayBack2048.png 3.82MB
TropicalSunnyDayRight2048.png 3.56MB
icon.ico 132KB
heighmap.raw 117KB
snow5.jpg 45KB
TropicalSunnyDayFront2048.png 3.6MB
snow4.jpg 37KB
terrainstone.jpg 507KB
NightElf1.wav 20.92MB
snow3.jpg 51KB
snow1.jpg 36KB
snow2.jpg 45KB
TropicalSunnyDayLeft2048.png 3.49MB
snow6.jpg 36KB
10e74fa0.bmp 384KB
共 55 条
- 1
浅墨_毛星云
- 粉丝: 4w+
- 资源: 80
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页