//-----------------------------------【程序说明】----------------------------------------------
// 程序名称:005
// 2016年8月 by UltramanGaia520
// 描述:DirectX游戏开发之3D角色动起来
//------------------------------------------------------------------------------------------------
//-----------------------------------【宏定义部分】--------------------------------------------
// 描述:辅助宏
//------------------------------------------------------------------------------------------------
#define WINDOW_TITLE _T("GAIA By UltramanGaia ") //窗口标题
//-----------------------------------【头文件包含部分】---------------------------------------
// 描述:包含头文件
//------------------------------------------------------------------------------------------------
#include <d3d9.h>
#include <d3dx9.h>
#include <tchar.h>
#include <time.h>
#include <vector>
#include "Input.h" //获取输入信息的类
#include "Camera.h" //虚拟摄像机的类
#include "Terrain.h" //地形的类
#include "AllocateHierarchy.h" //骨骼动画的类
#include "D3DUtil.h"
#include "Character.h"
using namespace std;
//-----------------------------------【库文件包含部分】---------------------------------------
// 描述:包含库文件
//------------------------------------------------------------------------------------------------
#pragma comment(lib,"d3d9.lib")
#pragma comment(lib,"d3dx9.lib")
#pragma comment(lib, "dinput8.lib")
#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)
*/
//-----------------------------------【全局变量声明部分】-------------------------------------
// 描述:全局变量声明
//----------------------------------------------------------------------------------------------
bool g_isFullscreen = false; //是否全屏
int WINDOW_WIDTH = 1366; //默认窗口宽度
int WINDOW_HEIGHT = 768; //默认窗口高度
bool g_Destroying = false;
Character* g_pCharacter;
DWORD g_currentTrack = DWORD(0);
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; //全局光照
Input* g_pDInput = NULL; //Input类的指针
Camera* g_pCamera = NULL; //摄像机类的指针
Terrain* g_pTerrain = NULL; //地形类的指针
//和骨骼动画相关的全局变量
LPD3DXFRAME g_pFrameRoot = NULL;
CAllocateHierarchy* g_pAllocateHier = NULL;
LPD3DXANIMATIONCONTROLLER g_pAnimController = NULL;
bool g_LMBDown = false; // GUI中,鼠标左键是否按下
int g_MouseX = 0;
int g_MouseY = 0; //鼠标坐标
//-----------------------------------【全局函数声明部分】-------------------------------------
// 描述:全局函数声明
//------------------------------------------------------------------------------------------------
LRESULT CALLBACK WndProc( HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam ); //窗口过程处理函数
HRESULT Direct3D_Init(HWND hwnd,HINSTANCE hInstance); //Direct3D初始化函数
bool ObjectsFor3D_Init(); //3D游戏渲染资源初始化函数
void Direct3D_Render( HWND hwnd,float fTimeDelta); //Direct3D渲染函数
void Direct3D_Update( HWND hwnd,float fTimeDelta); //Direct3D更新函数
void Direct3D_CleanUp( ); //清理COM接口对象
float Get_FPS(); //计算帧速率函数
void HelpText_Render(HWND hwnd); //显示帮助信息函数
void GUICallback(int id, int state); //GUI界面回调函数
void MainMsgLoop(HWND hwnd); //主消息循环
//-----------------------------------【WinMain( )函数】--------------------------------------
// 描述:Windows应用程序入口函数
//------------------------------------------------------------------------------------------------
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nShowCmd)
{
//设计窗口类
WNDCLASSEX wndClass={0} ;
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); //从本地加载ico图标
wndClass.hCursor = LoadCursor( NULL, IDC_ARROW ); //窗口类的光标句柄。
wndClass.hbrBackground=(HBRUSH)GetStockObject(GRAY_BRUSH);
wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = _T("WindowsClassForGAIA"); //窗口类的名字。
//注册窗口类
if( !RegisterClassEx( &wndClass ) )
return -1;
//创建窗口
HWND hwnd = CreateWindow( _T("WindowsClassForGAIA"),WINDOW_TITLE,
WS_POPUP, CW_USEDEFAULT, CW_USEDEFAULT, WINDOW_WIDTH, //WS_POPUP没有标题栏,比较好看
WINDOW_HEIGHT, NULL, NULL, hInstance, NULL );
//Direct3D资源的初始化
if (!(S_OK==Direct3D_Init (hwnd,hInstance)))
{
MessageBox(hwnd, _T("Direct3D资源初始化失败!"), _T("错误信息窗口"), 0);
}
PlaySound(L"GameMedia\\Tracy Bush - Echoes(Exclusive Track).wav", NULL, SND_FILENAME | SND_ASYNC|SND_LOOP); //循环播放背景音乐
if(!g_isFullscreen)
{
MoveWindow(hwnd,30,50,WINDOW_WIDTH,WINDOW_HEIGHT,true); //调整窗口位置
}
ShowWindow( hwnd, nShowCmd ); //ShowWindow函数显示窗口
//进行DirectInput类的初始化
g_pDInput = new Input();
g_pDInput->Init(hwnd,hInstance,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE,DISCL_FOREGROUND | DISCL_NONEXCLUSIVE); //前台,非独占模式
ObjectsFor3D_Init();
UpdateWindow(hwnd); //对窗口进行更新
//消息循环过程
MainMsgLoop(hwnd);
//注销窗口类
UnregisterClass(_T("WindowsClassForGAIA"), wndClass.hInstance);
return 0;
}
//-----------------------------------【MainMsgLoop( )函数】----------------------------------
// 描述:主消息循环函数
//-----------------------------------------------------------------------------------------------
void MainMsgLoop(HWND hwnd)
{
MSG msg = { 0 };
while( msg.message != WM_QUIT )
{
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 ); //发送消息给窗口程序。
}
if(!g_Destroying) //如果窗口已经在销毁中了,就不要更新渲染了
{
Direct3D_Update(hwnd,fTimeDelta); //画面的更新
Direct3D_Render(hwnd,fTimeDelta); //画面的渲染
}
}
}
}
//-----------------------------------【Direct3D_Init( )函数】----------------------------------
// 描述:Direct3D初始化函数
//------------------------------------------------------------------------------------------------
HRESULT Direct3D_Init(HWND
UltramanGaia6
- 粉丝: 29
- 资源: 4
最新资源
- c语言大丰收游戏源码.zip
- 财务数据分析-基于行业内公司财务报表的横向对比与综合分析
- c语言地空对战游戏.zip
- SpringCloudAlibaba 技术栈-Sentinel-Sentinel 控制台
- 基于springboot的母婴商城源码(java毕业设计完整源码+LW).zip
- c语言电子时钟程序.zip
- 基于springboot的高校心理教育辅导设计与实现源码(java毕业设计完整源码+LW).zip
- c语言对对碰游戏源码.zip
- c语言对自己电脑系统测试.zip
- c语言俄罗斯方块.zip
- c语言盒子接球游戏源码.zip
- 基于springboot的蜗牛兼职网的设计与实现源码(java毕业设计完整源码+LW).zip
- c语言黑白棋ai游戏源码.zip
- 新能源铲运机能耗模型及其仿真验证
- 基于CLUSTERFORMER的通用视觉模型研究
- 2024-2025学年数学建模期末课程论文指导
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈