Since I did't find a complete example for adding a cross axes in a view, here 
is the sample code I roughly implemented. I starded from what Jimmy suggested 
here http://forum.openscenegraph.org/viewtopic.php?t=2205&highlight=axis.



Code:

   ViewerQT* viewerWindow = new ViewerQT;
   osg::Group* root = new osg::Group;
   osg::Camera* camera = createHUD();
   viewerWindow->addSlave(camera, false);
   root->addChild(camera);
   root->addChild(loadedModel);
   viewerWindow->setCameraManipulator(new osgGA::TrackballManipulator);
   viewerWindow->setSceneData(root);
   viewerWindow->show();

osg::Camera* createHUD()
{
   osg::Camera* camera = new osg::Camera;
   camera->setProjectionMatrix(osg::Matrix::ortho2D(-1.5, 17.75, -1.5, 13.86));
   camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
   camera->setClearMask(GL_DEPTH_BUFFER_BIT);
   camera->setRenderOrder(osg::Camera::POST_RENDER);
   camera->setUpdateCallback(new AxisCameraUpdateCallback);

   osg::Node* axes = osgDB::readNodeFile("axes.osg");
   camera->addChild(axes);

   return camera;
}

class AxisCameraUpdateCallback:public osg::NodeCallback
{
public:
    virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
    {
        if(nv->getVisitorType() == osg::NodeVisitor::UPDATE_VISITOR)
        {
            osg::Camera* camera = dynamic_cast<osg::Camera*>(node);
            if (camera)
            {
               osg::View* view = camera->getView();
               if (view && view->getNumSlaves() > 0)
               {
                   osg::View::Slave* slave = &view->getSlave(0);
                   if(slave->_camera.get() == camera)
                   {
                       osg::Camera* masterCam = view->getCamera();
                       osg::Vec3 eye, center, up;
                       masterCam->getViewMatrixAsLookAt(eye, center, up, 30);
                       osg::Matrixd matrix;
                       matrix.makeLookAt(eye-center, osg::Vec3(0, 0, 0), up); 
// always look at (0, 0, 0)
                       camera->setViewMatrix(matrix);
                   }
               }
            }
        }
        traverse(node,nv);
    }
};




------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=29288#29288





_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to