<div dir="ltr">Thanks Riccardo and Robert for your inputs.<div><br></div><div>Robert, yes you are correct that the only issue I had with the CompositeViewer was that the same Node's callback would get called as many times as views that it appeared in. This means that for example if I have a simple update that would translate a node a fixed amount, then nodes that appear in mulitple views would move faster than those that appear in a single view only. Also, as I add more cameras nodes end up moving faster. </div><div><br></div><div><div>Obviously I can fix this in the update callback itself, by checking something like simulationTime (and I would ultimately have to do this anyway to make my motion happen at the same speed, irrespective of frame rate), but I would prefer to not have the callbacks called at all when not required. </div></div><div><br></div><div>Incidentally, I found that the (non-composite) viewer did not immediately solve this. It would only go away if all my cameras shared the exact same root node. Now I have some symbology that I wish to display on one camera, but not the others, but I managed to achieve this by setting the nodemask appropriately. </div><div><br></div><div>I am not really doing anything fancy with the callbacks. I created a class which extends osg::Callback and overrode the run method to update a MatrixTransform node (via getMatrix and setMatrix). I then created another class which extends MatrixTransform and in the constructor I call </div><div><br></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div>this->setUpdateCallback</div><div><br></div></blockquote>providing an instance of my callback class as the argument. Now whenever I add an instance of my MatrixTransform class to the scenegraph, it implements the motion I want. <div><br></div><div>This seems to work, except for the multiple update problem.</div><div><br></div><div>Hannes</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Apr 11, 2017 at 3:09 PM, Robert Osfield <span dir="ltr"><<a href="mailto:robert.osfield@gmail.com" target="_blank">robert.osfield@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 Hannes,<br>
<br>
The CompositeViewer was written specifically for your usage case -<br>
i.e. multiple Views.<br>
<br>
I wouldn't recommend using slave Camera's for doing multiple views,<br>
while possible it's just a mess in terms of management. slave<br>
Camera's are tools for helping rendering a single view, but with a<br>
view that is composed of several components - either spread across<br>
multiple windows, or a view that requires multiple passes such as<br>
distortion correction, field of view etc.<br>
<br>
The only reason you drawback you state about using CompositeViewer is<br>
multiple update traversals. Is this correct? If so then the<br>
discussion should be about what problems you are having with<br>
callbacks, as the solution will likely related to how you are doing<br>
callbacks rather high level viewer configuration.<br>
<span class="HOEnZb"><font color="#888888"><br>
Robert.<br>
</font></span><div class="HOEnZb"><div class="h5"><br>
On 11 April 2017 at 12:08, Hannes Naude <<a href="mailto:naude.jj@gmail.com">naude.jj@gmail.com</a>> wrote:<br>
> Hi all<br>
><br>
> I am trying to render a single scene from multiple viewpoints. I initially<br>
> implemented this with a compositeviewer as per the osgthirdpersonview<br>
> example. This worked fine except that my update callbacks appeared to be<br>
> getting called more than once per render cycle. I assumed that the update<br>
> traversal was being done for each view separately and therefore nodes that<br>
> are present in multiple views will have their update callbacks called<br>
> multiple times. So, at this point I tried to do the same thing but with a<br>
> single View, somewhat similar to the osgCamera example. But, I do not want<br>
> to add my cameras with viewer.addSlave as I want them to move independently<br>
> of one another. So I tried adding them into the scene graph and giving each<br>
> their own GraphicsContext, but even though the windows corresponding to<br>
> these GraphicsContexts get created, it appears as if all rendering is done<br>
> in a single window with multiple viewpoints being rendered over one another.<br>
><br>
> Obviously there are many ways to skin this cat, but I would appreciate some<br>
> guidance on the recommended approach. To recap my requirements are :<br>
> - Multiple cameras viewing the same scene.<br>
> - Camera positions and orientations must be independently controlled.<br>
> - Node update callbacks should be called only once per Node per render<br>
> cycle.<br>
><br>
> Any help will be appreciated<br>
><br>
> Regards<br>
> Hannes Naude<br>
><br>
</div></div><div class="HOEnZb"><div class="h5">> ______________________________<wbr>_________________<br>
> osg-users mailing list<br>
> <a href="mailto:osg-users@lists.openscenegraph.org">osg-users@lists.<wbr>openscenegraph.org</a><br>
> <a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" rel="noreferrer" target="_blank">http://lists.openscenegraph.<wbr>org/listinfo.cgi/osg-users-<wbr>openscenegraph.org</a><br>
><br>
______________________________<wbr>_________________<br>
osg-users mailing list<br>
<a href="mailto:osg-users@lists.openscenegraph.org">osg-users@lists.<wbr>openscenegraph.org</a><br>
<a href="http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org" rel="noreferrer" target="_blank">http://lists.openscenegraph.<wbr>org/listinfo.cgi/osg-users-<wbr>openscenegraph.org</a><br>
</div></div></blockquote></div><br></div>