一.簡要概述:
在ogre中場景查詢主要使用scenequery及其子類。場景查詢主要有三中:rayscenequery即射線場景查詢;regionscenequery即區域場景查詢;intersectionscenequery即相交場景查詢;而regiontionscenequery又分為:spherescenequery, axisalignedboxscenequery和 planeboundedvolumelistscenequery;
二.有關查詢應用
1.axisalignedboxscenequery
這個東西是碰撞檢測的基礎,和它類似的還有obb(有向包圍盒),由於obb建立複雜,所以ogre採用了aabb。
最簡單的碰撞檢測:
通過ogre::scenenode::_getworldaabb()可以取得這個葉子節點的aabb(ogre::axisalignedbox),ogre::axisalignedbox封裝了對aabb的支援,該類的成員函式ogre::axisalignedbox::intersects()可以判斷乙個aabb和"球體、點、面以及其他面"的相交情況(碰撞情況)。
m_spherenode 樹的葉子,掛了乙個"球"
m_cubenode 樹的葉子,掛了乙個"正方體"
axisalignedbox spbox = m_spherenode->_getworldaabb();
axisalignedbox cbbox = m_cubenode->_getworldaabb();
if(spbox.intersects(cbbox))
乙個簡單例子**:
2.區域查詢:
簡單的講就是,查詢某一區域中有什麼東西,分為aabb、球體、面查詢。
// 建立乙個球體查詢,這裡的100是m_spherenode掛著的那個球體的半徑
spherescenequery * pquery = m_scenemgr->createspherequery(sphere(m_spherenode->getposition(),100));
// 執行這個查詢
scenequeryresult qresult = pquery->execute();
// 遍歷查詢列表找出範圍內的物體
for (ogre::scenequeryresultmovablelist::iterator iter = qresult.movables.begin(); iter != qresult.movables.end(); ++iter) }
} }
乙個簡單的應用例子**:
#include
class collionframelistener:public exampleframelistener
bool framestarted(const frameevent& evt)}}
}m_node->translate(vector3(-10,0,0)*evt.timesincelastframe);
return exampleframelistener::framestarted(evt);}};
void createframelistener()
};int main()
3.相交查詢:
遍歷所有的物件,找到一對一對的相交物體(廢話呀,相交當然至少兩個物體)。
// 建立相交檢測
intersectionscenequery* pisquery = m_scenemgr->createintersectionquery();
// 執行查詢
intersectionscenequeryresult qresult = pisquery->execute();
// 遍歷查詢列表找出兩個相交的物體
for (scenequerymovableintersectionlist::iterator iter = qresult.movables2movables.begin(); iter != qresult.movables2movables.end(); ++iter) }
4.射線查詢:
乙個簡單例項**:
Ogre射線場景查詢
昨晚在看中級教程二的時候,發現vs2005竟然總是無法在我輸入.後顯示成員列表,並且我自己補全後,還提示我並沒有該成員函式。我左看看 右看看 覺得總是沒錯。幸好ogre還是開源的,我順著類乙個個往上翻,更加無比的確認了自己的是對的,冒著 萬般 的危險按下了f5,結果程式通過了 事後一想,這個是用到了...
ogre射線場景查詢
1.建立射線場景查詢物件,記得最後銷毀 mrayscenequery mscenemgr createrayquery ray 銷毀的 是 mscenemgr destroyquery mrayscenequery 2.設定要查詢的射線,下面 是以攝像機豎直向下的射線對場景進行查詢 vector3 ...
OGRE的學習資源簡單總結
首先是wikipedia的介紹 官方 官網介紹 about 特性列表 about features 開發者對ogre評價 about testimonials download sdk 每個類的宣告和實現都放在單獨的原始檔中,classname.h裡宣告,classname.cpp裡實現,除少數類外...