Hi Andrew,
You will need a separate camera for just rendering the 3D Axis. And implement a
update callback for the camera.
Something like this:
Code:
class AxisCameraUpdateCallback:public osg::NodeCallback
{
public:
/** Callback method called by the NodeVisitor when visiting a node.*/
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 && camera->getView()->getNumSlaves() > 0)
{
osg::View::Slave* slave = &camera->getView()->getSlave(0);
if(slave->_camera.get() == camera)
{
osg::Camera* masterCam = camera->getView()->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);
}
}
}
// note, callback is responsible for scenegraph traversal so
// they must call traverse(node,nv) to ensure that the
// scene graph subtree (and associated callbacks) are traversed.
traverse(node,nv);
}
};
Code:
m_Camera->setUpdateCallback(new AxisCameraUpdateCallback); // setup update
callback, so we can update it's view matrix
Cheers,
Jimmy
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=17604#17604
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org