65,210
社区成员
发帖
与我相关
我的任务
分享
//-----------------------------------------------------------------------------
// Desc: 从文件加载蒙皮网格模型
//-----------------------------------------------------------------------------
HRESULT CAnimMesh::LoadFromXFile(WCHAR *strFileName)
{
HRESULT hr;
//根据文件名, 从指定的路经查找文件
WCHAR strPath[MAX_PATH];
DXUTFindDXSDKMediaFileCch( strPath, sizeof(strPath) / sizeof(WCHAR), strFileName );
//从.X文件加载层次框架和动画数据
V_RETURN(D3DXLoadMeshHierarchyFromX(strPath, D3DXMESH_MANAGED, m_pd3dDevice,
m_pAlloc, NULL, &m_pFrameRoot, &m_pAnimController));
//计算框架对象的边界球
V_RETURN(D3DXFrameCalculateBoundingSphere(m_pFrameRoot, &m_vObjectCenter, &m_fObjectRadius));
return S_OK;
}
class CAnimMesh
{
private:
CAllocateHierarchy* m_pAlloc;
LPDIRECT3DDEVICE9 m_pd3dDevice;
LPD3DXFRAME m_pFrameRoot;
public:
D3DXVECTOR3 m_vObjectCenter;
float m_fObjectRadius;
BOOL m_bPlayAnim;
LPD3DXANIMATIONCONTROLLER m_pAnimController;
private:
HRESULT LoadFromXFile(WCHAR* strFileName);
VOID UpdateFrameMatrices( LPD3DXFRAME pFrameBase, LPD3DXMATRIX pParentMatrix );
VOID DrawFrame(LPD3DXFRAME pFrame);
VOID DrawMeshContainer(LPD3DXMESHCONTAINER pMeshContainerBase, LPD3DXFRAME pFrameBase);
public:
HRESULT Create(LPDIRECT3DDEVICE9 pD3DDevice, WCHAR* strFileName);
HRESULT Render(D3DXMATRIXA16* matWorld, double fElapsedAppTime);
HRESULT Destory();
public:
CAnimMesh();
virtual ~CAnimMesh();
};
#pragma once
#include "AnimMesh.h"
class Xfile
{
private:
CAnimMesh* m_pAnimMesh; //动画网格模型
D3DXMATRIXA16 m_matWorld; //世界矩阵
Xfile *next;
public:
D3DXVECTOR3 m_vCurPos; //当前位置
float m_fVelocity; //运动速度
float m_fFangxiangJue; //
float m_fFuyangJue; //方向角
float m_fCeqingJue;
bool m_bMoving; //标志喷洒车是否处于运动状态
//bool m_bQianPen; //标志喷洒车是否前喷
//bool m_bHouPen; //标志喷洒车是否后喷
public:
HRESULT Create(LPDIRECT3DDEVICE9 pd3dDevice, WCHAR* strFileName,Xfile *next);
HRESULT Restore(LPDIRECT3DDEVICE9 pd3dDevice);
HRESULT Render(LPDIRECT3DDEVICE9 pd3dDevice, float fTimePerFrame=0.0f ,float scalex=1.0f,float scaley=1.0f,float scalez=1.0f);
HRESULT Invalidate();
HRESULT Destroy();
//构造函数与析构函数
Xfile(void);
~Xfile(void);
};
//-----------------------------------------------------------------------------
// Desc: 加载网格对象, 创建喷洒粒子系统
//-----------------------------------------------------------------------------
HRESULT Xfile::Create( LPDIRECT3DDEVICE9 pd3dDevice, WCHAR* strFileName,Xfile *n)
{
HRESULT hr = S_OK;
next=n;
////创建喷洒车网格模型对象
m_pAnimMesh = new CAnimMesh();
V_RETURN(m_pAnimMesh->Create(pd3dDevice, strFileName));
////创建喷洒粒子系统对象
//m_pSprayParticles = new CParticleSystem(500,2000);
//m_pSprayParticles->Create(pd3dDevice);
return hr;
}INT WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int )
{
//为Debug配置启用运行时内存检查功能
#if defined(DEBUG) | defined(_DEBUG)
_CrtSetDbgFlag( _CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF );
#endif
//设置回调函数
DXUTSetCallbackDeviceCreated( OnCreateDevice );
DXUTSetCallbackDeviceReset( OnResetDevice );
DXUTSetCallbackDeviceLost( OnLostDevice );
DXUTSetCallbackDeviceDestroyed( OnDestroyDevice );
DXUTSetCallbackMsgProc( MsgProc );
DXUTSetCallbackKeyboard( KeyboardProc );
DXUTSetCallbackFrameRender( OnFrameRender );
DXUTSetCallbackFrameMove( OnFrameMove );
//应用程序相关的初始化
InitApp();
//初始化DXUT, 创建窗口, 创建Direct3D设备对象
DXUTInit( true, true, true );
DXUTSetCursorSettings( true, true );
DXUTCreateWindow( L"实验" );
DXUTCreateDevice( D3DADAPTER_DEFAULT, true, 640, 480,
IsDeviceAcceptable, ModifyDeviceSettings );
//进入消息循环和场景渲染
DXUTMainLoop();
//在此进行应用程序相关的清除工作
return DXUTGetExitCode();
}