ogre場景查詢 簡單學習

2021-06-19 21:07:24 字數 2047 閱讀 8309

一.簡要概述:

在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裡實現,除少數類外...