<div dir="ltr"><div><div><div><div><div><div><div><div>Hi Gianni,<br><br></div>The ordering of update of the view's master Camera is done after the update traversal, so checking the Camera's value in update traversal will result in using the previous frames value.  The master Camera's value can depend upon values in the scene graph so this ordering make sense for most application, and since you are using the NodeTrackerManipulator it's essential.<br><br></div>So for your application I'd suggest shift the slave Camera (CrossAxes) so that is' done after the call to viewer::updateTraversal().  This could be done by simply calling the frame components manually in your application and then inserting the appropriate update code.<br><br></div>i..e.<br><br></div>while(!viewer.done())<br>{<br></div>      viewer.advance();<br></div>      viewer.eventTraversal();<br></div>      viewer.updateTraversal();<br></div><div>      // do your CrossAxes updating here.<br></div>      viewer.renderingTraversals();<br><div><div><div><div>}<br></div></div></div></div></div><div class="gmail_extra"><br><div class="gmail_quote">On 5 August 2015 at 10:41, Gianni Ambrosio <span dir="ltr"><<a href="mailto:g.ambrosio+osg@gmail.com" target="_blank">g.ambrosio+osg@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi All,<br>
it seems I found the problem but not a solution jet.<br>
<br>
In my CrossAxes object (that is an osg::Camera) I do:<br>
<br>
setUpdateCallback(new AxesCameraUpdateCallback);<br>
<br>
and in AxesCameraUpdateCallback::operator() implementation I have:<br>
<br>
   transform->setAttitude(view->getCamera()->getViewMatrix().getRotate());<br>
<br>
where "transform" is child of the CrossAxes camera node and parent of the real axes graphics (please see previous message for details).<br>
In AxesCameraUpdateCallback I get the rotation from the camera of the view to show the global axes correctly oriented wrt the current camera orientation.<br>
Unfortunately, in this case, it seems that the first time frame() is called I get an "old" value from<br>
<br>
view->getCamera()->getViewMatrix().getRotate()<br>
<br>
It seems that the camera view matrix is updated after my AxesCameraUpdateCalback is called. That's wht a second call to frame() fixes axes orientation.<br>
<br>
Since to set the desired point of view I call<br>
<br>
NodeTrackerManipulator::setTransformation(const osg::Vec3d& iEye, const osg::Vec3d& iCenter, const osg::Vec3d& iUp)<br>
<br>
Which is the proper modification to do on my code to have a correct behaviour? Is there a way to get the correct view matrix in AxesCameraUpdateCallback::operator() implementation?<br>
<br>
Best regards,<br>
<span class="">Gianni<br>
<br>
------------------<br>
Read this topic online here:<br>
</span><a href="http://forum.openscenegraph.org/viewtopic.php?p=64623#64623" rel="noreferrer" target="_blank">http://forum.openscenegraph.org/viewtopic.php?p=64623#64623</a><br>
<div class="HOEnZb"><div class="h5"><br>
<br>
<br>
<br>
<br>
_______________________________________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org">osg-users@lists.openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" rel="noreferrer" target="_blank">http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org</a><br>
</div></div></blockquote></div><br></div>