现在的位置: 首页 > 综合 > 正文

最简单的Ogre系列之五——AABB场景查询

2013年08月22日 ⁄ 综合 ⁄ 共 1828字 ⁄ 字号 评论关闭

在球体场景查询的基础上,增加了AABB场景查询,并给与了碰撞次数的显示。

需要设置的全局变量是

int mCollisionNumber;

// OgreBites
OgreBites::ParamsPanel* mCollisionPanel;

下面的函数是设置碰撞次数的显示

//-------------------------------------------------------------------------------------
void Ogre_Rigid_Simple::SetupWidgets()
{
	// Display the SdkTrays caption and value
	Ogre::FontManager::getSingleton().getByName("SdkTrays/Caption")->load();
    Ogre::FontManager::getSingleton().getByName("SdkTrays/Value")->load();

	// Create name and value for query results
	Ogre::StringVector names;
	names.push_back("Collision");
	char value[256];
	sprintf(value, "%d", mCollisionNumber);

	// Create a params panel to display the query results
	mCollisionPanel = mTrayMgr->createParamsPanel(OgreBites::TL_BOTTOMRIGHT, "Collisions", 130, names);
	mCollisionPanel->setParamValue(0, value);
}

下面的函数是根据AABB进行场景查询

//-------------------------------------------------------------------------------------
void Ogre_Rigid_Simple::SceneQueryByAABB()
{
	// Setup AABB scene query for the dynamic node
	Ogre::AxisAlignedBoxSceneQuery* pQuery=mSceneMgr->createAABBQuery(mDynamicModel->getWorldBoundingBox());
	pQuery->setQueryMask(1);
	// Execute this query
	Ogre::SceneQueryResult QResult=pQuery->execute();
	// Iterate objects in the query results
	for (Ogre::SceneQueryResultMovableList::iterator iter = QResult.movables.begin(); iter != QResult.movables.end();++iter)
	{
		Ogre::MovableObject* pObject=static_cast<Ogre::MovableObject*>(*iter);
		if(pObject)
		{
			if(pObject->getMovableType()=="Entity")
			{
				Ogre::Entity* ent = static_cast<Ogre::Entity*>(pObject);

				if(ent->getName()==mDynamicModel->getName())
				{
					continue;
				}
				else
				{
				    // Set the collision number
					mCollisionNumber++;
					char value[256];
					sprintf(value, "%d", mCollisionNumber);
					mCollisionPanel->setParamValue(0, value);

					// Scale the dynamic node if the name of the entity is "StaticModel"
					mDynamicNode->scale(1.0002f,1.0002f,1.0002f);
					break;
				}
			}
		}
	}
}

下面是程序的运行截图

Updata 2012-06-15

扩展了Debug Drawing,可以对包围盒的形状、颜色进行改变,下图是将包围盒设为红色。

抱歉!评论已关闭.