void GameState::CreateGeom()
{
Ogre::SceneManager::MovableObjectIterator it = m_pSceneMgr->getMovableObjectIterator("Entity");//m_pSceneMgr管理的实体列表,“SceneNode”是遍历所有的场景结点
while(it.hasMoreElements())//遍历整个列表
{
Ogre::String _name = it.getNext()->getName();
Ogre::Entity *ent = m_pSceneMgr->getEntity(_name);
Ogre::SceneNode *node = ent->getParentSceneNode();
if(_name == "track")
{
OgreOde::EntityInformer ei(ent);//EntityInformer???
OgreOde::TriangleMeshGeometry *_track = ei.createStaticTriangleMesh(mWorld, mWorld->getDefaultSpace());//返回三角形网格几何体
ent->setUserAny(Ogre::Any(_track));//???
}
else
{
OgreOde::Body *body = new OgreOde::Body(mWorld);
node->attachObject(body);
Ogre::AxisAlignedBox aab = ent->getBoundingBox();
Ogre::Vector3 size = aab.getSize()*node->getScale();
Ogre::Real radius = (size.x>size.z)?size.z/2.0f:size.x/2.0f;
OgreOde::BoxMass mass(0.05,size);
mass.setDensity(1.0f,size);
OgreOde::Geometry *geom = (OgreOde::Geometry *)new OgreOde::BoxGeometry(size,mWorld,mWorld->getDefaultSpace());
geom->setName(_name);
node->showBoundingBox(true);
body->setMass(mass);
geom->setBody(body);
ent->setUserAny(Ogre::Any(geom));
}
}
}