Je me demande s'il y a des avantages si j'utilise plusieurs instances de Ogre::RaySceneQuery
pour la même scène. Ou s'il y a des choses qui nécessitent sa propre instance spéciale?Y a-t-il des raisons de créer plusieurs instances de Ogre :: RaySceneQuery pour la même scène?
Répondre
Habituellement, vous n'exécutez qu'une seule requête à la fois, il n'est donc pas nécessaire d'utiliser une nouvelle instance RSQ à chaque fois.
Même si vous effectuez plusieurs types de requêtes, vous devez attribuer un nouveau rayon au RSQ à chaque fois, il n'y aura donc aucune différence si vous utilisez une ou plusieurs instances.
Habituellement le code ressemble à ceci:
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
Pour chaque nouveau rayon que vous voulez vous tester devez donner RSQ le nouveau rayon. Habituellement, les rayons dépendent de certaines coordonnées (le joueur, la caméra, ...) et vous devez mettre à jour les rayons à chaque itération.
Si vous avez un rayon statique , un rayon qui ne dépend pas de quelque chose et sera le même vecteur chaque itération, vous pouvez enregistrer l'appel à setRay(Ogre::Ray)
si vous utilisez une autre instance RSQ pour ce rayon spécifique seulement, mais je doute que ce sera un énorme coup de pouce de performance ou même perceptible que vous avez encore à exécuter la requête.
Il y a un autre point à considérer: les masques de requête.
Chaque entité peut avoir un masque binaire qui détermine si elle peut être frappée par une requête de rayon.
Supposons que vous avez cette structure
enum QueryFlags {
FRIENDS = 1<<0;
FOES = 1<<1;
}
et chaque image que vous voulez tester si quelque chose a frappé un ami et/ou un ennemi. Il y a quelques possibilités:
Vous pouvez vérifier pour les deux à la fois avec mRaySceneQuery->setQueryMask(FRIENDS | FOES)
et vérifier chaque résultat récupéré s'il s'agit d'un ami ou d'un ennemi.
Vous pouvez execute
deux requêtes, une pour FRIENDS
et une seconde pour le FOES
.
Vous pouvez utiliser deux RSQ, un pour les amis et un second pour l'ennemi. De cette façon, vous enregistrez un appel à setQueryMask
chaque fois. Comme ci-dessus je doute que cela donne un gain de performance significatif, mais je préfère la dernière option.
- 1. Sérialisation d'une scène OGRE
- 2. Créer plusieurs instances de même OCX
- 3. Plusieurs instances de la même option?
- 4. ActionScript: Ajout de plusieurs instances du même fichier swf à la scène
- 5. getMock - plusieurs instances de la même classe
- 6. Affichage de plusieurs instances de même forme?
- 7. Création de plusieurs instances de la même activité?
- 8. Comment créer un fichier .mesh avec OGRE?
- 9. AS3: éviter plusieurs instances de même classe
- 10. OGRE - Plusieurs fenêtres - Fenêtre de rendu et fenêtre de menu
- 11. Créer deux instances de la même base de données Neo4j
- 12. plusieurs formulaires pour différentes instances de la même classe d'objet sur la même page dans Rails
- 13. PHP/XSLT plusieurs instances de la même chaîne quertys
- 14. Service Windows: plusieurs instances de la même classe de service?
- 15. Créer des instances de la fonction
- 16. Même chemin logique pour plusieurs instances de ColdFusion
- 17. BroadcastReceiver créer plusieurs instances de TelephonyManager
- 18. Afficher plusieurs instances du même div
- 19. Android IntentService - empêche plusieurs instances de la même requête
- 20. Plusieurs instances (2) de Zend_Auth
- 21. Déployer plusieurs instances de la même application sur JBoss
- 22. Comptage des instances de la même entrée de champ
- 23. Plusieurs instances de jQuery sur la même page
- 24. Plusieurs instances de l'application
- 25. Placer plusieurs instances de la même image générées par javascript
- 26. Raisons derrière le ciblage de plusieurs frameworks?
- 27. Android: éviter plusieurs instances de la même activité?
- 28. Placez dynamiquement des instances de MovieClip sur scène (AS3)
- 29. Plusieurs instances de la même fenêtre WPF et ViewModel
- 30. Créer des instances de modèles variadique
Vous n'aurez pas à payer pour les frais généraux d'initialisation plusieurs fois. Je doute que ce soit vraiment important. Je ne m'inquiéterais pas à moins d'avoir des problèmes de mémoire ou de performance – Jay