Jump to: navigation, search

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 );