Ogre+Opcode实现碰撞检测

开发环境

  ubuntu11.04,gcc4.5,netbean6.91,ogre1.7.3,OgreOpcode

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

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

如果对原作者造成侵权,请留言,马上删

http://code.google.com/p/the-art-of-grafter/


有时候仅是想用碰撞检测而不是物理引擎,比如在网络游戏中,物理引擎将带来很多困难和效率损失。
本来想自己写一个碰撞检测库,无奈水平不够,写了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有没有发生碰撞,如果发生了执行相应的逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值