Funktioniert das?
Code:
smgr->getSceneNodesFromType(scene::ESNT_UNKNOWN, nodes); // Find all nodes
Ich glaub fast nicht.
Versuch mal folgende Funktion statdessen
Code:
void registerCollision(irr::scene::ISceneNode* node, irr::scene::IMetaTriangleSelector * meta, irr::scene::ISceneManager* smgr)
{
irr::scene::ITriangleSelector * selector = 0;
switch(node->getType())
{
case irr::scene::ESNT_CUBE:
printf("cube");
break;
case irr::scene::ESNT_ANIMATED_MESH:
// Because the selector won't animate with the mesh,
// and is only being used for camera collision, we'll just use an approximate
// bounding box instead of ((scene::IAnimatedMeshSceneNode*)node)->getMesh(0)
selector = smgr->createTriangleSelectorFromBoundingBox(node);
printf("Anim. MEsh");
break;
case irr::scene::ESNT_MESH:
case irr::scene::ESNT_SPHERE: // Derived from IMeshSceneNode
selector = smgr->createTriangleSelector(((irr::scene::IMeshSceneNode*)node)->getMesh(), node);
printf("MEsh");
break;
case irr::scene::ESNT_TERRAIN:
selector = smgr->createTerrainTriangleSelector((irr::scene::ITerrainSceneNode*)node);
printf("Terrain");
break;
case irr::scene::ESNT_OCT_TREE:
selector = smgr->createOctTreeTriangleSelector(((irr::scene::IMeshSceneNode*)node)->getMesh(), node);
printf("octree");
break;
default:
// Don't create a selector for this node type
printf("defaul");
break;
}
if(selector)
{
// Add it to the meta selector, which will take a reference to it
meta->addTriangleSelector(selector);
// And drop my reference to it, so that the meta selector owns it.
selector->drop();
}
irr::core::list<irr::scene::ISceneNode*>::ConstIterator it = node->getChildren().begin();
while (it != node->getChildren().end())
{
registerCollision(*it, meta, smgr);
++it;
}
}
And the use it like this instead of line 33-85:
Code:
registerCollision(smgr->getRootSceneNode(), meta, smgr);