Hi Robert, I didn't understand your answer.
I use OSG 3.0.1 but I tried with 3.4.0.-rc8 and the behavior is the same.
Moreover updateTraversal() of CompositeViewer is basically the same for these
versions.
Anyway we are probably talking of a slightly different scenario: I have a slave
camera which update callback needs an up to date viewer master camera's view
matrix. In this case, as you told me, since the master camera matrix is updated
(with the inverse matrix of the manipulator) after the slave camera update
callback, then the value is that of the previous frame. I can understand and
the reason is in CompositeViewer::updateTraversal() because the for loop "// Do
UpdateTraversal for slaves with their own subgraph" is done before
"view->getCameraManipulator()->updateCamera(*(view->getCamera()));".
So, to make scenarios like mine working, my suggestion is to move:
Code:
// Do UpdateTraversal for slaves with their own subgraph
for(unsigned int i=0; i<view->getNumSlaves(); ++i)
{
osg::View::Slave& slave = view->getSlave(i);
osg::Camera* camera = slave._camera.get();
if(camera && !slave._useMastersSceneData)
{
camera->accept(*_updateVisitor);
}
}
after
Code:
if (view->getCameraManipulator())
{
view->setFusionDistance(
view->getCameraManipulator()->getFusionDistanceMode(),
view->getCameraManipulator()->getFusionDistanceValue() );
view->getCameraManipulator()->updateCamera(*(view->getCamera()));
}
I tried this solution and it works fine.
With this modification the scene remains updated before the main camera, so
nothing you already told me should be broken.
Moreover the for loop to move down is related to slave cameras with thier own
subgraph.
Regards,
Gianni[/code]
------------------
Read this topic online here:
http://forum.openscenegraph.org/viewtopic.php?p=64634#64634
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org