Ogre3D:Snippets
(Redirected from Ogre3D Snippets)
Raycasting
float srcx = float( arg.state.X.abs ) / Ogre::Real(vp->getActualWidth()); float srcy = float( arg.state.Y.abs ) / Ogre::Real(vp->getActualHeight()); // out of viewport if ( srcx < 0 || srcx > 1 || srcy < 0 || srcy > 1 ) { return true; } Ogre::Ray r = mCamera->getCameraToViewportRay( srcx, srcy ); Ogre::RaySceneQuery* rquery = mSceneMgr->createRayQuery( r ); rquery->setSortByDistance( true ); Ogre::RaySceneQueryResult rresults = rquery->execute(); Ogre::SceneNode* newovered = 0; Ogre::Real newd; if ( rresults.size() > 0 ) { newovered = rresults[0].movable->getParentSceneNode(); newd = rresults[0].distance; } // if ( newovered == groundNode ) newovered = 0; overed = newovered; if ( overed != 0 ) { Ogre::Quaternion ho = overed->getPosition().getRotationTo( r.getPoint( newd ) ); overed->setOrientation( ho ); // cout << r.getOrigin().x << " / " << r.getOrigin().y << " / " << r.getOrigin().z << endl; // cout << overed->getPosition().x << " / " << overed->getPosition().y << " / " << overed->getPosition().z << endl; } mSceneMgr->destroyQuery( rquery );