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

32 篇文章 2 订阅
32 篇文章 1 订阅

在球体场景查询的基础上,增加了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,可以对包围盒的形状、颜色进行改变,下图是将包围盒设为红色。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值