歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> Linux編程

Ogre+Opcode實現碰撞檢測

開發環境

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有沒有發生碰撞,如果發生了執行相應的邏輯。

Copyright © Linux教程網 All Rights Reserved