Ubuntu 11.04,gcc 4.5,netbean 6.91,ogre 1.7.3,OgreOpcode
OgreOpcode和例子的netbean工程,动态链接库已上传 ,
由于都做了些小改动,人也有点懒,就不提供原始链接了。
Ogre+Opcode实现碰撞检测源码下载
用户名与密码都是
具体下载目录在 /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有没有发生碰撞,如果发生了执行相应的逻辑。