Ogre+Opcode实现碰撞检测


开发环境

Ubuntu 11.04,gcc 4.5,netbean 6.91,ogre 1.7.3,OgreOpcode

OgreOpcode和例子的netbean工程,动态链接库已上传  ,

由于都做了些小改动,人也有点懒,就不提供原始链接了。

Ogre+Opcode实现碰撞检测源码下载

免费下载地址在 http://linux.bkjia.com/

用户名与密码都是www.bkjia.com

具体下载目录在 /pub/开源游戏及代码/Ogre+Opcode实现碰撞检测/

内附:
OgreOpcode的源码和动态链接库
学习例子的netbean工程

有时候仅是想用碰撞检测而不是物理引擎,比如在网络游戏中,物理引擎将带来很多困难和效率损失。
本来想自己写一个碰撞检测库,无奈水平不够,写了3天都未成雏形。
只好去找个巨人的肩膀来站站,于是找到了opcode和其ogre封装OgreOpcode。
但opcode资料少得可怜,OgreOpcode多年未更新,代码居然还有语法错误,更别说编译其工程了。
花了半天来修修补补,终于编译OgreOpcode成功。
接下来最大的问题是学习OgreOpcode的使用,自带的例子错误一大堆。
对于小白来说,没有一个可以运行的例子简直是灾难,更甚于没有文档。
放狗搜放毒搜,终于找到一份靠谱的,运行成功。

先说下代码流程:
(1)创建场景物体

(2)CollisionManager* mCollisionMgr = new CollisionManager(mSceneMgr);
   创建碰撞管理器,在碰撞检测开始前需要用来做一些初始化工作
   
(3)mCollisionContext = mCollisionMgr->createContext("testContext");
   创建CollisionContext,这是在碰撞检测时使用的
   
(4)mCollisionMgr->addCollClass("charactor");
   mCollisionMgr->addCollType("charactor", "charactor", COLLTYPE_EXACT);
   添加碰撞类型,可当作给碰撞物体分组。
   
(5)EntityCollisionShape *shape = CollisionManager::getSingletonPtr()->createEntityCollisionShape(entName);
   shape->load(mSceneMgr->getEntity(entName));
   CollisionObject* pCollisionObject = mCollisionContext->createObject(entName);
   pCollisionObject->setCollClass(strCollClass.data());
   pCollisionObject->setShape(shape);
   mCollisionContext->addObject(pCollisionObject);
   给场景物体添加碰撞外壳并添加到碰撞计算中
   
(6)在每一帧中调用
   pCollContext->visualize(true, true, true, true, true, true);
   用于显示线框显示的碰撞外壳,类似于bullet中的debug draw。
   pCollContext->collide(timeDelta);
   执行碰撞检测。
 
(7)if (pCollContext->getAttachedObject("robot")->hasCollisions()){...}
   在每一帧中查询robot有没有发生碰撞,如果发生了执行相应的逻辑。

相关内容