[osg-users] Rendering in-scene camera from different cameras

Jannik Heller scrawl at baseoftrash.de
Fri Aug 5 08:50:18 PDT 2016


A Camera does not inherit the render target implementation, it will simply use what is specified (default FRAMEBUFFER).

You bring up a valid use case, perhaps adding an "inherit render target" mode for Cameras would be a nice feature for the osg core to have.

For the time being what I would suggest is that you don't really need a Camera, you just need a way to set the modelView and projection matrices to identity before drawing your GUI (i.e. work in screen relative coordinates). You can do that with a cull callback:


class ScreenRelativeCallback : public osg::NodeCallback
   virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
       osgUtil::CullVisitor* cv = dynamic_cast<osgUtil::CullVisitor*>(nv);
       if (cv)
           cv->pushModelViewMatrix(new osg::RefMatrix(), osg::Transform::ABSOLUTE_RF);
           cv->pushProjectionMatrix(new osg::RefMatrix());
           traverse(node, nv);

          traverse(node, nv);

Then instead of decorating your GUI with a Camera, you decorate it with a Group and add the cull callback: group->addCullCallback(new ScreenRelativeCallback);

In addition you may need to set a RenderBin so that the GUI is drawn after the scene.

I haven't tested this out but I believe it will work.


Read this topic online here:

More information about the osg-users mailing list