Hi Conan,

the code seam correct to me. I am not familiar with slave cameras (I never
used them, always created my own), so not sure if the CameraManipulators
are affecting them. Can you try to set manually the View matrix of the
right camera so it points to the scene you are attaching? Just an idea,
might not be that though

Nick


On Thu, Jan 23, 2014 at 9:20 PM, Conan Doyle <[email protected]> wrote:

> I am running into some difficulties setting this up... I am trying to set
> up a regular, i.e. non-RTT camera in the left view and the RTT camera in
> the right view...  The left view renders fine, but the right view is just
> black... running the app through gDEBugger it looks like the texture is
> empty... It isn't obvious to me what hte problem is... can anyone provide
> help?
>
>
> Code:
>
>
> // use an ArgumentParser object to manage the program arguments.
> osg::ArgumentParser arguments( &argc, argv );
>
>
> arguments.getApplicationUsage()->setApplicationName(arguments.getApplicationName());
> arguments.getApplicationUsage()->setDescription(arguments.getApplicationName()+"
> rttCompositeViewer ");
> arguments.getApplicationUsage()->setCommandLineUsage(arguments.getApplicationName()+"
> [options] filename ...");
>
> osg::ref_ptr<osg::Node> scene = osgDB::readNodeFiles( arguments );
> if ( !scene ) scene = osgDB::readNodeFile("cessna.osg");
>
>
> unsigned int windowX = 10;
> unsigned int windowY = 10;
> unsigned int windowWidth = 1024;
> unsigned int windowHeight = 512;
>
> osg::ref_ptr<osg::GraphicsContext::Traits> traits = new
> osg::GraphicsContext::Traits;
> traits->x = windowX;
> traits->y = windowY;
> traits->width = windowWidth;
> traits->height = windowHeight;
> traits->windowDecoration = true;
> traits->doubleBuffer = true;
> traits->sharedContext = 0;
>
> osg::ref_ptr<osg::GraphicsContext> gc =
> osg::GraphicsContext::createGraphicsContext(traits.get());
> osgViewer::GraphicsWindow* gw =
> dynamic_cast<osgViewer::GraphicsWindow*>(gc.get());
> if (!gw)
> {
> osg::notify(osg::NOTICE)<<"Error: unable to create graphics
> window."<<std::endl;
> return 1;
> }
>
> osgViewer::CompositeViewer viewer(arguments);
>
> //////////////////////////////////////////////////////////////////
> // Left View
> osgViewer::View *leftView = new osgViewer::View;
> leftView->setName("Left View");
>
> osg::ref_ptr<osg::Camera> leftCamera = new osg::Camera;
> leftCamera->setCullMask(1);
> leftCamera->setName("Left");
> leftCamera->setGraphicsContext(gc.get());
> leftCamera->setViewport(new osg::Viewport(0, 0, windowWidth/2,
> windowHeight));
> leftCamera->setClearColor(osg::Vec4(0.0f,0.0f,1.0f,1.0f));
> GLenum buffer = traits->doubleBuffer ? GL_BACK : GL_FRONT;
> leftCamera->setDrawBuffer(buffer);
> leftCamera->setReadBuffer(buffer);
>
> leftView->addSlave(leftCamera.get(), osg::Matrixd(), osg::Matrixd());
> leftView->setSceneData(scene.get());
>
> viewer.addView(leftView);
>
> //////////////////////////////////////////////////////////////////
> // Right View
> osgViewer::View *rightView = new osgViewer::View;
> rightView->setName("Right View");
>
> // Create Texture
> osg::ref_ptr<osg::Texture2D> tex2D = new osg::Texture2D;
> tex2D->setTextureSize( 512, 512 );
> tex2D->setInternalFormat( GL_RGBA8 );
> tex2D->setSourceFormat( GL_RGBA );
> tex2D->setSourceType( GL_UNSIGNED_BYTE );
>
> // Create RTT Camera
> osg::ref_ptr<osg::Camera> rttCamera = new osg::Camera;
> rttCamera->setGraphicsContext(gc.get());
> rttCamera->setName("RTT Camera");
> rttCamera->setClearColor( osg::Vec4() );
> rttCamera->setClearMask( GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT );
> rttCamera->setRenderTargetImplementation( osg::Camera::FRAME_BUFFER_OBJECT
> );
> rttCamera->setRenderOrder( osg::Camera::PRE_RENDER);
> tex2D->setFilter( osg::Texture2D::MIN_FILTER, osg::Texture2D::LINEAR );
> tex2D->setFilter( osg::Texture2D::MAG_FILTER, osg::Texture2D::LINEAR );
> rttCamera->setViewport( 0, 0, tex2D->getTextureWidth(),
> tex2D->getTextureHeight() );
> rttCamera->attach( osg::Camera::COLOR_BUFFER, tex2D );
> rttCamera->addChild( scene.get() );
> rightView->addSlave(rttCamera, osg::Matrixd(), osg::Matrixd());
>
> // Create HUD Camera
> osg::ref_ptr<osg::Camera> hudCamera = new osg::Camera;
> hudCamera->setGraphicsContext(gc.get());
> hudCamera->setName("HUD Camera");
> hudCamera->setReferenceFrame( osg::Transform::ABSOLUTE_RF );
> hudCamera->setClearMask( GL_DEPTH_BUFFER_BIT );
> hudCamera->setRenderOrder( osg::Camera::POST_RENDER );
> hudCamera->setAllowEventFocus( false );
> hudCamera->setProjectionMatrix( osg::Matrix::ortho2D(0.0, 1.0, 0.0, 1.0) );
> hudCamera->getOrCreateStateSet()->setMode( GL_LIGHTING,
> osg::StateAttribute::OFF );
>
> osg::Geometry* geom = osg::createTexturedQuadGeometry(osg::Vec3(),
> osg::Vec3(1.0f,0.0f,0.0f), osg::Vec3(0.0f,1.0f,0.0f),0.0f, 0.0f, 1.0f, 1.0f
> );
> osg::ref_ptr<osg::Geode> quad = new osg::Geode;
> quad->addDrawable( geom );
>
> int values = osg::StateAttribute::OFF|osg::StateAttribute::PROTECTED;
> quad->getOrCreateStateSet()->setAttribute(new
> osg::PolygonMode(osg::PolygonMode::FRONT_AND_BACK, osg::PolygonMode::FILL),
> values );
> quad->getOrCreateStateSet()->setMode( GL_LIGHTING, values );
>
> hudCamera->addChild( quad );
> hudCamera->getOrCreateStateSet()->setTextureAttributeAndModes( 0,
> tex2D.get() );
>
> rightView->addSlave(hudCamera, osg::Matrixd(), osg::Matrixd());
>
> viewer.addView(rightView);
>
>
> return viewer.run();
>
>
>
>
>
>
>
>
> robertosfield wrote:
> > Hi Conan,
> > On 23 January 2014 12:58, Conan < ()> wrote:
> >
> > > I thought the prefered method to handle multiple independent views was
> with a composite viewer.  Can I add slave cameras to a composite viewer
> > >
> >
> >
> > Yes, this is why I was referring to View rather than View(er) in my
> previous reply.  osgViewer is deliberately designed so that each View "has
> a" master Camera that controls the overall view, and an optional set of
> slave Camera's that are used to render that view.  The
> osgViewer::CompsoiteViewer composes a set of View objects, while
> osgViewer::Viewer for ease of use just inherits from View but can't handle
> multiple views obvious as it's just a single View under the hood.
> >
> >
> > You can mix and match multiple View, multiple Scenes, multiple Contexts,
> multiple slave Camera in any way that you choose.
> >
> >
> > Robert.
> >
> >  ------------------
> > Post generated by Mail2Forum
>
> Code:
>
>
>
>
> ------------------
> Read this topic online here:
> http://forum.openscenegraph.org/viewtopic.php?p=57974#57974
>
>
>
>
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>



-- 
trajce nikolov nick
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to