Ubuntu 11.04,gcc 4.5,netbean 6.91,ogre 1.7.3,OgreOpcode
OgreOpcode和例子的netbean工程,動態鏈接庫已上傳 ,
由於都做了些小改動,人也有點懶,就不提供原始鏈接了。
Ogre+Opcode實現碰撞檢測源碼下載
免費下載地址在 http://linux.linuxidc.com/
用戶名與密碼都是www.linuxidc.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有沒有發生碰撞,如果發生了執行相應的邏輯。