这个框架其实基本是抄自一位老兄 shangguanwaner的博客的,他的博客上有四篇写得非常好的文章和源代码,很适合新手学习(本文将于文章最后提供下载链接与引用链接)
当然,我也是兴冲冲地去下了,但是下来就发现了因为这位老兄使用的havok sdk库估计是6.0版左右的,所以和我们最新版的还是有点差别的.....于是改造就此开始,我也是尝试了一晚上加一早上才完全成功的......(关于源码的剖析请去婉儿兄的blog查看吧,相信大家已经百度出来了)
第一步 头文件与内存类:
首先关于附加依赖项(lib)..就不用说了,头文件本来也应该问题不大的,奈何版本更新了,有一部分的名字或是路径变了,这个大家稍微思考下再搜索下应该问题也不大,不过一个大问题就马上出现了,在下过来的代码中有一个类叫什么hkPoolMemory,但是似乎根本找不到类似的头文件,文档中连类也找不到,怎么办..?
后来找到个老外的文件,发现只要把原来的
hkPoolMemoey* m_MemoryManager;
改为一个新的内存管理类-----
hkMemoryRouter* m_MemoryManager;
即可.....这个头文件的位置为 #include
然后其初始化方法也相应改为
m_MemoryManager=hkMemoryInitUtil::initDefault();
同时系统的函数也变了 hkResult a=hkBaseSystem::init(m_MemoryManager,errorReport);
这个内存管理类似乎是无视不同线程对内存进行统一管理的,因此把代码中关于thread memory的部分也全删掉
比如 m_ThreadMemory = new hkThreadMemory(m_MemoryManager); 删掉
同理,关于stack memory的也全删掉......比如 m_ThreadMemory->setStackArea(0,0);,删掉
不要忘了m_MemoryManager是不用removeReference的,也删掉......
第二步 法向出错?:
似乎改造完成了,不过马上就进入了第二步
开始跑...哎,怎么出错了?发现是一个很奇怪的什么 InvalidAxis问题,一看文档好像是方向没有初始化,导致其法向的长度为0..因此在每个创建rigidbody的函数前都加上句 ci.m_rotation=hkQuaternion(0,0,1,0);,就是定义好它的朝向(方向可自设)。
第三步 程序运行性能:
呼呼,终于解决了,开始跑,却发现按了一下 “1” 但是几乎跑不起来,极卡.....为啥.?后来想想估计是DEBUG和Release版本之间的区别,那位博主发给我们的是release版的程序,自然快多了..于是我也试试release,果然很流畅...所以想在debug版本下跑得欢的同志们,改一下源代码中那个生成1000个立方体的三层循环,去掉一层只生成100个就自然能跑了...ok了,似乎就了结了...
不过似乎还是有问题的,比如我把生成立方体的循环改成生成球,不知道为什么就出错了....继续改造吧
下一步是真正的加点自己的东西进去....
其实我觉得大家应该都有了,不过出于完整性的考虑,就放个链接吧
Havok官方最新下载地址:http://software.intel.com/sites/havok/
Ogre下载地址: http://www.ogre3d.org/download/
框架源码下载地址:http://code.google.com/p/ogrehavok/downloads/list
shangguanwaner的博客:http://blog.csdn.net/shangguanwaner/archive/2009/02/10/3875471.aspx