问一下关于一个函数返回的问题

lava555 2009-05-08 09:40:17
有一个如下函数:

//-----------------------------------------------------------------------------
// 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;
}

其中类CAnimMesh的定义如下:
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);
};



在实现Xfile类的.cpp文件里create代码如下:
//-----------------------------------------------------------------------------
// 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;
}


问题:在主函数里怎么接收在HRESULT CAnimMesh::LoadFromXFile(WCHAR *strFileName)里返回的边界球值??
即:
//计算框架对象的边界球
V_RETURN(D3DXFrameCalculateBoundingSphere(m_pFrameRoot, &m_vObjectCenter, &m_fObjectRadius));

是不是要定义一个callback函数??比如以下两个函数:
bool CALLBACK IsDeviceAcceptable( D3DCAPS9* pCaps, D3DFORMAT AdapterFormat, D3DFORMAT BackBufferFormat, bool bWindowed, void* pUserContext );//定义

DXUTCreateDevice( D3DADAPTER_DEFAULT, true, 640, 480,
IsDeviceAcceptable, ModifyDeviceSettings );///这个在主函数里

主函数:
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();
}

求教~~!!


...全文
207 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lava555 2009-05-09
  • 打赏
  • 举报
回复
我不是匈牙利人
kiffa 2009-05-09
  • 打赏
  • 举报
回复
原来匈牙利现在还是有人用的。。。我还以为早灭绝了呢。。。
lava555 2009-05-09
  • 打赏
  • 举报
回复
你是做模型动画的?
dengfei007 2009-05-08
  • 打赏
  • 举报
回复
太长了吧。。慢慢看ing
liliangbao 2009-05-08
  • 打赏
  • 举报
回复
帮顶~
lucaca 2009-05-08
  • 打赏
  • 举报
回复

嘻嘻,lz和我同行啊~~
信念 2009-05-08
  • 打赏
  • 举报
回复
楼主也太懒了,坚定完毕。。。
lava555 2009-05-08
  • 打赏
  • 举报
回复
不是。我试过在主函数里调用过 对象->m_pAnimMesh->m_fObjectRadius和对象->m_pAnimMesh->m_vObjectCenter.x/y/z来测试碰撞检测。怎么不管用??就是两个m_vObjectCenter的距离与两个对象的半径之和的大小对比。不起作用啊
VCRWX 2009-05-08
  • 打赏
  • 举报
回复
分值有点少,呵呵

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧