Hi Christophe, There is a reason why ViewerBase::updateTraversals() is a virtual function :-)
Basically different applications will have different requirements w.r.t set up and use of the view matrix, most apps they won't be dependant on each other, other applications will have a view matrix that tracks objects in the scene - such as ones use NodeTrackerManipulator for these you have to do update first, then update the camera manipulator, then others like yours want to obtain the view matrix after the camera's view matrix has been set. There is no way you to solve all of these usage models with one code path, so osgViewer simply implements the most common usage model. For your own app you can override the updateTraversals() method, or manually call the camera manipulator before you call updateTraversals() in your frame loop - i,e, while(!viewer.done()) { // break frame down into its separate traversals viewer.advance(); viewer.eventTraversal(); // your custom code for updating the view matrix viewer.updateTraversal(); viewer.renderingTraversals(); } One item to note, is the OSG is designed to allow one to have multiple cameras viewing the same scene graph, which in your instance you're callback will only be called once, but you'll have to track multiple view matrices. If you never use multiple View(s) or multiple slave Camera(s) then this won't be an issue, but it's something worth flagging. Robert. On Tue, May 13, 2008 at 7:33 AM, christophe loustaunau <[EMAIL PROTECTED]> wrote: > Hi, > > In our application, I need to get the cameraViewMatrix in the > updateTraversal. I have done that with an update callback. > But I think I have the ViewMatrix of the last frame, not the current frame, > because of some graphics problems. > > I have look in Viewer::updateTraversal() and I have found that the > updateTraversal is done before the camera matrix is set by the manipulator, > see the code : > > void Viewer::updateTraversal() > { > ...... > if (getSceneData()) > { > getSceneData()->accept(*_updateVisitor); > } > ....... > if (_cameraManipulator.valid()) > { > setFusionDistance( getCameraManipulator()->getFusionDistanceMode(), > > getCameraManipulator()->getFusionDistanceValue() ); > > _camera->setViewMatrix(_cameraManipulator->getInverseMatrix()); > } > ...... > } > > Is this intend ? > I have try to set the camera matrix from the manipulator before the > traversalUpdate and everything works fine. > > I wan't to know if there is resons for this specific order, or if we could > set the camera matrix from the manipulator before the traversalUpdate. If > so, I could submit this change to osg-submissions. > > Regards. > > -- > Christophe Loustaunau. > _______________________________________________ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > _______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org