protected override bool FrameEnded(FrameEvent e) { if (!base.FrameEnded(e)) { return(false); } SetDebugCaption(0, string.Format("Camera Location: ({0}, {1}, {2}) ", mCamera.GetPosition().x, mCamera.GetPosition().y, mCamera.GetPosition().z)); SetDebugCaption(1, string.Format("Camera Orientation: ({0}, {1}, {2}, {3}) ", mCamera.GetOrientation().x, mCamera.GetOrientation().y, mCamera.GetOrientation().z, mCamera.GetOrientation().w)); Vector3 p = mCamera.GetPosition(); p.y = 3000.0f; mRay.setOrigin(p); SetDebugCaption(2, string.Format(" ray at : ({0}, {1}, {2}) ", mRay.getOrigin().x, mRay.getOrigin().y, mRay.getOrigin().z)); SetDebugCaption(3, ""); mRaySceneQuery.setRay(mRay); RaySceneQueryResult qryResult = mRaySceneQuery.execute(); if (qryResult.Count > 0) { float newY = -999.0f; foreach (RaySceneQueryResultEntry qryEntry in qryResult) { if (newY < qryEntry.distance) { newY = qryEntry.distance; } } if (newY != -999.0f) { newY = 3000.0f - newY; p = mCamera.GetPosition(); p.y = newY + 5.0f; mCamera.SetPosition(p.x, p.y, p.z); SetDebugCaption(3, string.Format(" intersect at : ({0}, {1}, {2}) ", p.x, p.y, p.z)); } } return(true); }