SNIPPET:射線查詢、固定terrain中相機高度
創建查詢器
mRaySceneQuery = mSceneMgr->createRayQuery(Ray());
銷毀查詢器
mSceneMgr->destroyQuery(mRaySceneQuery);
mRaySceneQuery = mSceneMgr->createRayQuery(Ray());
銷毀查詢器
mSceneMgr->destroyQuery(mRaySceneQuery);
1
// The ray scene query pointer
2
Ogre::RaySceneQuery *mRaySceneQuery;
3
// Setup the scene query
4
Ogre::Vector3 camPos = mCamera->getPosition();
5
Ogre::Ray cameraRay(Ogre::Vector3(camPos.x, 5000.0f, camPos.z), Ogre::Vector3::NEGATIVE_UNIT_Y);
6
mRaySceneQuery->setRay(cameraRay);
7
8
// Perform the scene query
9
Ogre::RaySceneQueryResult &result = mRaySceneQuery->execute();
10
Ogre::RaySceneQueryResult::iterator itr = result.begin();
11
// Get the results, set the camera height
12
if (itr != result.end() && itr->worldFragment)
13
{
14
Ogre::Real terrainHeight = itr->worldFragment->singleIntersection.y;
15
//if ((terrainHeight + 10.0f) > camPos.y)
16
mCamera->setPosition( camPos.x, terrainHeight + 10.0f, camPos.z );
17
}
// The ray scene query pointer2
Ogre::RaySceneQuery *mRaySceneQuery;3
// Setup the scene query4
Ogre::Vector3 camPos = mCamera->getPosition();5
Ogre::Ray cameraRay(Ogre::Vector3(camPos.x, 5000.0f, camPos.z), Ogre::Vector3::NEGATIVE_UNIT_Y);6
mRaySceneQuery->setRay(cameraRay);7

8
// Perform the scene query9
Ogre::RaySceneQueryResult &result = mRaySceneQuery->execute();10
Ogre::RaySceneQueryResult::iterator itr = result.begin();11
// Get the results, set the camera height12
if (itr != result.end() && itr->worldFragment)13
{14
Ogre::Real terrainHeight = itr->worldFragment->singleIntersection.y;15
//if ((terrainHeight + 10.0f) > camPos.y)16
mCamera->setPosition( camPos.x, terrainHeight + 10.0f, camPos.z );17
}


