[osg-users] Recommended way to render a scene from multiple independent viewpoints

Hannes Naude naude.jj at gmail.com
Tue Apr 11 05:11:12 PDT 2017

I think I solved my own problem. I was planning to use


and then use


to decouple the slave camera from the master. (If this is not the best
approach, I would still like to hear, but it seems pretty clean)

It turned out that I did not even need the second call. I think this is
because I have an update callback attached to each of the slave cameras
that explicitly sets the view matrix to match the world-to-local matrix of
some node in the scenegraph and thereby overrides the slaving.

By the way, this is something else that has bothered me. The requirement
for a camera to track a node in the scenegraph seems like it should be
extremely common. But in order to implement this I had to write my own
little NodeTracker Callback as follows:

class NodeTracker : public NodeCallback



   NodePath _nodepath;

   NodeTracker(Node* node):_nodepath(node->getParentalNodePaths()[0]){}

   virtual void operator()(Node* node, NodeVisitor* nv)


 ref_ptr<Camera> cam=node->asCamera();



 Matrix mat2=cam->getViewMatrix();

 Matrix mat=computeWorldToLocal(_nodepath);



 traverse(node, nv);



It feels like this is such a common requirement that something like it
should be built into OSG. I had a look at the tutorial on the subject :


but it recommends a solution that seems even more generally useful and is
quite verbose, yet is not included in osg. What am I missing here?

Hannes Naude

On Tue, Apr 11, 2017 at 1:08 PM, Hannes Naude <naude.jj at gmail.com> wrote:

> Hi all
> I am trying to render a single scene from multiple viewpoints. I initially
> implemented this with a compositeviewer as per the osgthirdpersonview
> example. This worked fine except that my update callbacks appeared to be
> getting called more than once per render cycle. I assumed that the update
> traversal was being done for each view separately and therefore nodes that
> are present in multiple views will have their update callbacks called
> multiple times. So, at this point I tried to do the same thing but with a
> single View, somewhat similar to the osgCamera example. But, I do not want
> to add my cameras with viewer.addSlave as I want them to move independently
> of one another. So I tried adding them into the scene graph and giving each
> their own GraphicsContext, but even though the windows corresponding to
> these GraphicsContexts get created, it appears as if all rendering is done
> in a single window with multiple viewpoints being rendered over one another.
> Obviously there are many ways to skin this cat, but I would appreciate
> some guidance on the recommended approach. To recap my requirements are :
>  - Multiple cameras viewing the same scene.
>  - Camera positions and orientations must be independently controlled.
>  - Node update callbacks should be called only once per Node per render
> cycle.
> Any help will be appreciated
> Regards
> Hannes Naude
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20170411/8cd5c64d/attachment-0003.htm>

More information about the osg-users mailing list