设为首页 加入收藏

TOP

Ogre+Opcode实现碰撞检测
2014-11-24 12:00:22 来源: 作者: 【 】 浏览:0
Tags:Ogre Opcode 实现 碰撞 检测

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


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


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有没有发生碰撞,如果发生了执行相应的逻辑。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POSIX线程的创建和取消 下一篇在mini2440上移植使用FFmpeg录像

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)
·[ Linux运维学习 ] (2025-12-26 02:52:27)
·HTTPS 详解一:附带 (2025-12-26 02:20:37)
·TCP/IP协议到底在讲 (2025-12-26 02:20:34)