我不知道是否有任何好處,如果我使用Ogre::RaySceneQuery
多個實例相同的場景。或者如果有什麼事情需要它自己的特殊實例?是否有理由爲同一場景創建Ogre :: RaySceneQuery的多個實例?
1
A
回答
1
通常,您一次只能執行一個查詢,因此不需要每次都使用新的RSQ實例。
即使您正在進行多種類型的查詢,您也必須每次給RSQ一個新的射線,所以如果您使用一個或多個實例進行此操作,則不會有任何區別。
通常的代碼看起來是這樣的:
Ogre::SceneManager* mSceneMgr;
Ogre::Ray ray; //whatever you want to query
Ogre::RaySceneQuery* mRaySceneQuery = mSceneMgr->createRayQuery(Ogre::Ray());
mRaySceneQuery->setRay(ray);
Ogre::RaySceneQueryResult &result = mRaySceneQuery->execute();
//loop through the result
對於你想測試你必須給RSQ新線每一個新的射線。通常光線依賴於一些座標(玩家,相機......),並且每次迭代都必須更新光線。
如果你有一個靜態射線,它不依賴於某種東西可以彼此相同矢量和每一次迭代如果使用其他RSQ實例這個特殊光線,你可以保存呼叫setRay(Ogre::Ray)
曙光只是,但我懷疑這將是一個巨大的性能提升,甚至可以引起注意,因爲你仍然需要執行查詢。
還有一點你應該考慮:查詢掩碼。
每個實體都可以擁有一個二進制掩碼,用於確定是否可以通過射線查詢命中。
讓我們假設你有這樣的結構
enum QueryFlags {
FRIENDS = 1<<0;
FOES = 1<<1;
}
,每幀你想測試,如果有什麼東西砸的朋友和/或敵人。有以下幾種可能性:
您可以一次檢查mRaySceneQuery->setQueryMask(FRIENDS | FOES)
並檢查每個檢索結果,如果它是朋友或敵人。
您可能execute
有兩個查詢,一個用於FRIENDS
,另一個用於FOES
。
你可以使用兩個RSQ,一個給朋友,另一個給敵人。這樣您每次都可以撥打setQueryMask
。如上所述,我懷疑這會帶來顯着的性能提升,但我更喜歡最後的選擇。
相關問題
- 1. 處理黃瓜情景實例爲一個場景
- 2. 是否可以創建一個Matlab實例作爲管理員?
- 3. dlopen是否創建多個庫實例?
- 4. OGRE場景的序列化
- 5. 是否創建了一個實例?
- 6. 是否有一個call_user_func()等同於創建一個新的類實例?
- 7. 可能用KIF創建一個具有多個示例的場景大綱?
- 8. 是否可以使用循環創建同一個組件的多個實例?
- 9. 是否有可能在pyserial中創建serial.Serial()的多個實例?
- 10. 創建多個相同的OCX實例
- 11. startService()是否創建一個新的Service實例或使用現有的實例?
- 12. docker-compose爲同一圖像創建多個實例
- 13. 創建一個經理類的實例
- 14. 是否有可能建立Ninject綁定創建同一個類的多個實例?
- 15. 是否有任何理由使用一個DataContext實例,而不是幾個?
- 16. 是否可以在同一個類中創建一個類的實例?
- 17. 是否有理由擁有多個reactiveValues()?
- 18. factory_girl是否有辦法獲取attributes_for併爲同一實例元素創建?
- 19. Akka是否同時運行同一事件的多個實例?
- 20. 從一種形式創建同一型號的多個實例
- 21. 創建一個對象[多個相同的實例]
- 22. 創建同一個FileSystemWatcher的多個實例
- 23. 實例離開場景後清理?
- 24. 的Django的ModelForm創建多個實例具有不同的ForeignKeys
- 25. OOP - 如果一個類創建一個類的實例,該實例是否也成爲一個對象?
- 26. 此代碼是否創建該函數的多個實例?
- 27. 創建具有不同參數的類的多個實例
- 28. 在實體框架中創建實體容器的多個實例是否創建多個連接
- 29. 創建同一類型的新實例作爲另一個intsance
- 30. NSTimer - 創建多個實例
您將不必多次支付初始化開銷。我懷疑這確實很重要。除非你有內存或性能問題,否則我不會擔心 – Jay