Hi Michael,

osgViewer::CompositeViewer is the appropriate tool for this type of
work, although you can use a slave camera in osgViewer::Viewer to as
well, but this isn't as logically clean.  The osghud examples provide
a range of examples of use of an iscene graph camera, a slave camera,
and a separate view - its for doing a HUD but the ideas are similar.

As to why it isn't working for you, but best guess is that there is a
rendering order issue with the cameras - the full screen view
rendering after the insert view.  osg::Camera has support for
specifying the rendering order, so try something like

   insert_camera->setRenderOrder(osg::Camera::POST_RENDER);

You can also provide an int to setRenderOrder as a second parameter to
help differentiate between multiple post/pre draw cameras.

Robert.

On Nov 17, 2007 3:54 AM, Berg, Michael <[EMAIL PROTECTED]> wrote:
> I'm trying to use OSG 2.2 to create a main display of the primary scene
> with a smaller "picture-in-picture"-style display of a completely
> different scene in one of the corners.
>
> The few examples that I've found so far have been for the older OSG 1.2
> (using the old Producer interface).
>
> I initially looked at using a slave camera, but got the impression from
> some mailing list postings and the API that that was for a different
> view of the same scene.
>
> Based on that and other mailing list posts, I've been trying to use the
> new CompositeViewer.
> I've tried running the example "osgcompositeviewer" executable with
> every combination of the -1, -2, and -3 flags possible from the code,
> but I can only ever get it to show one scene on my single display.
> http://www.openscenegraph.org/projects/osg/browser/OpenSceneGraph/trunk/examples/osgcompositeviewer/osgcompositeviewer.cpp
>
> If I use completely separate windows in my code, I can get each scene to
> show up in a separate windows, but this isn't what I want.
>
> By using an osg::GraphicsContext::Traits and
> view->setUpViewOnSingleScreen(0), I've been able to get one scene to
> show up in only the specified portion of the monitor, but I still can't
> get two scenes on the monitor at the same time.
>
> Below is a very stripped down skeleton of the basic code I've been
> working with and trying to add different osg::GraphicsContext::Traits
> and Viewports too.
>
> ==========
> #include <osgViewer/CompositeViewer>
> #include <osgViewer/Viewer>
> #include <osgViewer/ViewerEventHandlers>
>
> #include <osgDB/ReadFile>
>
> #include <osgGA/GUIEventHandler>
> #include <osgGA/StateSetManipulator>
>
>
> int main (void)
> {
>   osg::ref_ptr<osg::Node> cessna = osgDB::readNodeFile("cessna.osg");
>   osg::ref_ptr<osg::Node> cow = osgDB::readNodeFile("cow.osg");
>
>   osgViewer::CompositeViewer viewer;
>
>   // Main scene (fullscreen on a 1600x1200 screen)
>   {
>     osg::ref_ptr<osgViewer::View> view = new osgViewer::View();
>     view->setSceneData(cessna.get());
>
>     viewer.addView(view.get());
>   }
>
>   // Other scene in one corner ("picture-in-picture" style)
>   {
>     osg::ref_ptr<osgViewer::View> view = new osgViewer::View();
>     view->setSceneData(cow.get());
>     view->getCamera()->setViewport
>       (new osg::Viewport(0, 512, 0, 512));
>
>     viewer.addView(view.get());
>   }
>
>   return (viewer.run());
> }
> ==========
>
> I've tried putting the cessna in a viewport that doesn't overlap with
> the cow viewport, but I only ever see either a fullscreen cessna.
>
> Am I one the right track, or am I completely off base here?
>
> Any pointers on how to achieve my desired picture-in-picture view of two
> separate scenes would be greatly appreciated.
>
> - Michael Berg
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to