这一期详细分析我在前面发布的那个Havok实例的代码。运行效果和代码下载请参看我之前的一篇文章《物理引擎Havok的一个简单实例(使用Ogre渲染)》。最新的代码可以在这里下载:http://code.google.com/p/ogrehavok/downloads/list
在例子中,我用了开源的Ogre作为渲染引擎。如果你想撇开图形渲染,只看Havok模拟的代码,可以参看Havok中自带的一个实例StandAloneDemos。
一、类HavokSystem
例子中类HavokSystem封装了Havok初始化和运行代码。它初始化基本库和多线程模拟,并创建物理世界。声明如下:
class HavokSystem
{
public:
HavokSystem(void);
~HavokSystem(void);
//创建hkpWorld
virtual bool createHavokWorld(hkReal worldsize);
//初始化VDB
virtual bool InitVDB();
//创建物理场景
virtual void createPhysicsScene();
void setGroundSize(hkReal x,hkReal y,hkReal z);
void setGroundPos(hkReal x,hkReal y,hkReal z);
//step simulation
virtual void simulate();
void setup();
//Physics
hkpWorld* m_World;
protected:
//成员变量
hkPoolMemory* m_MemoryManager;
hkThreadMemory* m_ThreadMemory;
char* m_StackBuffer;
int m_StackSize;
//多线程相关
hkJobThreadPool* m_ThreadPool;
int m_TotalNumThreadUsed;
hkJobQueue* m_JobQueue;
//VDB相关
hkArray<hkProcessContext*> m_Con