//-----------------------------------【程序说明】----------------------------------------------
// 【Visual C++】游戏开发系列配套源码五十二 浅墨DirectX教程二十 骨骼动画来袭(一)
// VS2010版
// 2013年4月 Create by 浅墨
// 背景音乐素材出处: 最终幻想 Eternal Love (Short Version)
// 人物模型素材出处:《诛仙》 陆雪琪
// 程序配套博文链接:http://blog.csdn.net/zhmxy555/article/details/8832812
// 更多内容请访问浅墨的博客:http://blog.csdn.net/zhmxy555
// 浅墨的新浪微博: @浅墨_毛星云
//------------------------------------------------------------------------------------------------
//-----------------------------------【宏定义部分】--------------------------------------------
// 描述:定义一些辅助宏
//------------------------------------------------------------------------------------------------
#define WINDOW_WIDTH 932 //为窗口宽度定义的宏,以方便在此处修改窗口宽度
#define WINDOW_HEIGHT 700 //为窗口高度定义的宏,以方便在此处修改窗口高度
#define WINDOW_TITLE _T("【致我们永不熄灭的游戏开发梦想】浅墨DirectX教程二十 骨骼动画来袭(一)博文配套示例程序 by浅墨") //为窗口标题定义的宏
//-----------------------------------【头文件包含部分】---------------------------------------
// 描述:包含程序所依赖的头文件
//------------------------------------------------------------------------------------------------
#include <d3d9.h>
#include <d3dx9.h>
#include <tchar.h>
#include <time.h>
#include "DirectInputClass.h"
#include "CameraClass.h"
#include "SkyBoxClass.h"
#include "SnowParticleClass.h"
#include "AllocateHierarchyClass.h"
//-----------------------------------【库文件包含部分】---------------------------------------
// 描述:包含程序所依赖的库文件
//------------------------------------------------------------------------------------------------
#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")
// 地板的顶点结构
struct CUSTOMVERTEX
{
FLOAT _x, _y, _z;
FLOAT _u, _v ;
CUSTOMVERTEX(FLOAT x, FLOAT y, FLOAT z, FLOAT u, FLOAT v)
: _x(x), _y(y), _z(z), _u(u), _v(v) {}
};
#define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ | D3DFVF_TEX1)
//-----------------------------------【全局变量声明部分】-------------------------------------
// 描述:全局变量的声明
//------------------------------------------------------------------------------------------------
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; //世界矩阵
D3DLIGHT9 g_Light; //全局光照
DInputClass* g_pDInput = NULL; //DInputClass类的指针实例
CameraClass* g_pCamera = NULL; //摄像机类的指针实例
SkyBoxClass* g_pSkyBox=NULL; //天空盒类的指针实例
SnowParticleClass* g_pSnowParticles = NULL; //雪花粒子系统的指针实例
//四个和骨骼动画相关的全局变量
LPD3DXFRAME g_pFrameRoot = NULL;
D3DXMATRIX* g_pBoneMatrices = NULL;
CAllocateHierarchy* g_pAllocateHier = NULL;
LPD3DXANIMATIONCONTROLLER g_pAnimController = NULL;
LPDIRECT3DVERTEXBUFFER9 g_pFloorVBuffer = NULL; //地板顶点缓存对象
LPDIRECT3DTEXTURE9 g_pFloorTexture = NULL; //地板纹理对象
//-----------------------------------【全局函数声明部分】-------------------------------------
// 描述:全局函数声明,防止“未声明的标识”系列错误
//------------------------------------------------------------------------------------------------
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);
//-----------------------------------【WinMain( )函数】--------------------------------------
// 描述: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, WINDOW_WIDTH,
WINDOW_HEIGHT, NULL, NULL, hInstance, NULL );
//Direct3D资源的初始化,调用失败用messagebox予以显示
if (!(S_OK==Direct3D_Init (hwnd,hInstance)))
{
MessageBox(hwnd, _T("Direct3D初始化失败~!"), _T("浅墨的消息窗口"), 0); //使用MessageBox函数,创建一个消息窗口
}
PlaySound(L"GameMedia\\Eternal Love (Short Version).wav", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //循环播放背景音乐
MoveWindow(hwnd,200,10,WINDOW_WIDTH,WINDOW_HEIGHT,true); //调整窗口显示时的位置,窗口左上角位于屏幕坐标(200,10)处
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;
}
//-----------------------------------【WndProc( )函数】--------------------
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
[D3Ddemo20 by 浅墨].rar (59个子文件)
D3Ddemo20 by浅墨
Release
bd378f0.bmp 192KB
9622210.bmp 768KB
353bd50.bmp 384KB
GameMedia
snow4.jpg 37KB
Eternal Love (Short Version).wav 8.7MB
wood.jpg 639KB
rightaw2.jpg 33KB
backaw2.jpg 27KB
snow3.jpg 51KB
icon.ico 167KB
snow6.jpg 36KB
snow1.jpg 36KB
frontaw2.jpg 35KB
leftaw2.jpg 26KB
topaw2.jpg 14KB
snow5.jpg 45KB
snow2.jpg 45KB
heighmap.raw 117KB
D3Ddemo20.pdb 555KB
D3Ddemo20.exe 30KB
9496a70.bmp 384KB
lxq.X 5.25MB
D3Ddemo20.sln 894B
D3Ddemo20.suo 13KB
D3Ddemo20
SkyBoxClass.cpp 6KB
AllocateHierarchyClass.h 3KB
SnowParticleClass.cpp 6KB
bd378f0.bmp 192KB
D3Ddemo20.vcxproj.filters 2KB
9622210.bmp 768KB
353bd50.bmp 384KB
AllocateHierarchyClass.cpp 16KB
CameraClass.cpp 10KB
GameMedia
snow4.jpg 37KB
Eternal Love (Short Version).wav 8.7MB
wood.jpg 639KB
rightaw2.jpg 33KB
backaw2.jpg 27KB
snow3.jpg 51KB
icon.ico 167KB
snow6.jpg 36KB
snow1.jpg 36KB
frontaw2.jpg 35KB
leftaw2.jpg 26KB
topaw2.jpg 14KB
snow5.jpg 45KB
snow2.jpg 45KB
heighmap.raw 117KB
CameraClass.h 2KB
SkyBoxClass.h 1KB
DirectInputClass.cpp 4KB
main.cpp 26KB
D3Ddemo20.vcxproj 4KB
D3Ddemo20.vcxproj.user 143B
D3DUtil.h 848B
9496a70.bmp 384KB
SnowParticleClass.h 2KB
DirectInputClass.h 1KB
lxq.X 5.25MB
共 59 条
- 1
浅墨_毛星云
- 粉丝: 4w+
- 资源: 80
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页