OgreOde——遍历场景中所有的实体(Entity)

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));
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值