Bonjour,
Afin de simplifier la gestion des collisions dans mon programme, j'ai décidé de simplement tester si deux bounding box étaient en intersection. En l'ocurence (et en attendant d'améliorer la chose) entre celle du personnage de l'utilisateur et toutes les autres.
Pour cela, je parcoure mon Scenegraph et à j'effectue le test pour tous ceux dont l'id n'est pas à -1 (caméra, lumière, terrain etc...)
Voici le code en question:
for( irr::core::list<irr::scene::ISceneNode*>::ConstIterator iterator = m_pSceneMgr->getRootSceneNode()->getChildren().begin();
iterator != m_pSceneMgr->getRootSceneNode()->getChildren().end();
iterator++)
{
irr::scene::ISceneNode* pTestSceneNode = *iterator;
if( m_pUserSceneNode->getBoundingBox().intersectsWithBox(pTestSceneNode->getBoundingBox()) && pTestSceneNode->getID() != -1)
{
(...)
}
}
Seulement voilà, le test se révèle vrai systématiquement pour tous les nodes de la scène. Je ne comprend pas bien pourquoi.
Question subsidiaire, le test ne s'effectue que pour les descendants directs du RootSceneNode, comment pourrais-je tester également et systématiquement tous les objets de la scène même s'ils sont affiliés à un autre?
Merci d'avance à tous.
Hors ligne
J'ai la solution, il faut utiliser la fonction getTransformedBoundingBox()...
Je pense que cette discussion peut être supprimée, à moins qu'elle n'aide quelqu'un.
Hors ligne