Ogre-获取场景中的所有实体

在Ogre中,有时候,可能需要对场景中的所有实体进行处理,我们可以通过以下的方式来获取场景中的所有实体。

我们采用递归函数,遍历根节点,获取所有子节点及其上所附加的实体,将获取的所有实体存放在一个向量集合中。

void getAllEntity(Ogre::SceneNode* rootNode, std::vector<Ogre::Entity*>& entityVec)
{  
    if (!rootNode)  
        return;  
    else  
    {  
        unsigned short numChildren = rootNode->numChildren();  
        for (unsigned short nodeIndex = 0; nodeIndex < numChildren; ++nodeIndex)  
        {  
            Ogre::SceneNode* childNode = (Ogre::SceneNode*)rootNode->getChild(nodeIndex);  
            unsigned short numEntity = childNode->numAttachedObjects();  
            for (unsigned short entityIndex = 0; entityIndex < numEntity; ++entityIndex)  
            {  
                Ogre::Entity* ent = (Ogre::Entity*)childNode->getAttachedObject(entityIndex);  
                entityVec.push_back(ent);  
            }  

            getAllEntity(childNode, entityVec);  
        }  

    }         
}


Written on April 15, 2014