Ogre射线场景查询

昨晚在看中级教程二的时候,发现VS2005竟然总是无法在我输入.后显示成员列表,并且我自己补全后,还提示我并没有该成员函数。我左看看代码,右看看代码,觉得总是没错。幸好Ogre还是开源的,我顺着类一个个往上翻,更加无比的确认了自己的是对的,冒着“万般”的危险按下了F5,结果程序通过了……

事后一想,这个是用到了C++里的反射机制。这个我不是太了解,曾经在老师带的一个项目里接触过,但那是老师负责,自己也放过了自己,所以到现在也还是不懂。大意应该就是直到运行的时候才确定那个容器里的对象是什么类的实例化对象吧。所以那会vs2005没法提示,也自己补全了也会发出警告。我想,05里面可能没能很好的支持反射。所以,等这次自学完后,要换系统了。

不过,通过这个东西,了解到了Ogre里的射线,场景查询等,确实不错。做笔记如下吧。

1.创建射线场景查询对象,记得最后销毁
mRaySceneQuery = mSceneMgr->createRayQuery(Ray());
销毁的代码是 mSceneMgr->destroyQuery(mRaySceneQuery);

2.设置要查询的射线,下面代码是以摄像机竖直向下的射线对场景进行查询
Vector3 camPos = mCamera->getPosition();
Ray cameraRay(Vector3(camPos.x, 5000.0f, camPos.z), Vector3::NEGATIVE_UNIT_Y);
mRaySceneQuery->setRay(cameraRay);

3.执行场景查询
RaySceneQueryResult &result = mRaySceneQuery->execute();
这样,result中就保存了查询的结果。
RaySceneQueryResult 定义如下:
typedef std::vector RaySceneQueryResult;
这是一个查询结构的列表,列表的每个条目定义如下:

struct _OgreExport RaySceneQueryResultEntry
{
/// Distance along the ray
Real distance;
/// The movable, or NULL if this is not a movable result
MovableObject* movable;

/// The world fragment, or NULL if this is not a fragment result
SceneQuery::WorldFragment* worldFragment;

/// Comparison operator for sorting
bool operator < (const RaySceneQueryResultEntry& rhs) const { return this->distance < rhs.distance;

}
};

 

原文地址:http://www.beyondc.cn/ogre-ray-scene-query.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值