|
|
发表于 2006-12-22 00:45:00
|
显示全部楼层
Re:[求助]OGRE实体点选问题(包围盒的方法不好用)
官方标准的办法是通过查询的mask 只要在放入的实体中和查询时候使用相同的mask就可以直接检出。
下面的代码把两个灯光都设置为相同的mask,然后在查询的时候让场景只返回灯光的实体
const unsigned int LIGHT_QUERY_MASK = 0x00000001
Light* light1 = mSceneMgr->createLight(“Light1”);
Light* light2 = mSceneMgr->createLight(“Light2”);
light1->setPosition(12, 12, 12);
light2->setPosition(5, 5, 5);
light1->setQueryFlags(LIGHT_QUERY_MASK);
light2->setQueryFlags(LIGHT_QUERY_MASK);
AxisAlignedBoxSceneQuery* lightQuery = mSceneMgr->createAABBQuery(
AxisAlignedBox(0,0,0,10,10,10),LIGHT_QUERYMASK);
// 查询出空间内的灯光。
SceneQueryResult& results = lightQuery->excute();
// 迭代查询结果;可能只返回一个,可能是上面创建的light2。
// 迭代的类型是可移动对象类型
SceneQueryResultMovableList::iterator it = results.movalbles.begin();
for(; it != results.moveables.end(); it++)
{
// 激活我们所有的灯光
assert(((*it)->getQueryFlags() & LIGHT_QUERY_MASK) != 0);
//执行对灯光的操作。
}
// 结束后销毁场景查询
mSceneMgr->destroyQuery(lightQuery);
|
|