Hi,
I'm using PRE_RENDER cameras rendering to FrameBufferObjects with
SceneView, in some cases multi-pass as well. I've used a similar setup
as per the osgprerender example and did not find a difference between
using SceneView versus osgViewer. I'll splat some code into the bottom
of the email, maybe it helps. It's with svn osg, Linux, NVidia.
cheers
jp
Argentieri, John-P63223 wrote:
> Robert and pals,
>
> We are using osg 2.0. I am trying to duplicate the behavior of the
> osgdistortion example, but we are using osgUtil::SceneView and not
> osgViewer::Viewer.
>
> I have been unable to mimic the behavior of the example. If I set my
> texture camera to PRE_RENDER, all I get is a blank quad set to the color
> of the osg::geometry. If I set it to NESTED_RENDER, which is wrong, I
> think it draws the texture to the back buffer, because I can see it on
> the screen.
>
> Can anyone offer me some advice in this area?
>
> Thanks for your help….
>
> *John Argentieri*
> *Software Engineer*
> *GENERAL DYNAMICS*
> *C4 Systems *
> *(407) 281-5568*
> [EMAIL PROTECTED]
SceneView setup
---8<---
_SceneView = new osgUtil::SceneView();
_SceneView->setDefaults();
osg::StateSet *gstate = _SceneView->getGlobalStateSet();
gstate->setGlobalDefaults();
gstate->setMode(GL_BLEND, osg::StateAttribute::OFF);
gstate->setMode(GL_CULL_FACE, osg::StateAttribute::OFF);
gstate->setMode(GL_DEPTH_TEST, osg::StateAttribute::OFF);
_RootNode = new osg::Group();
_SceneView->setSceneData(_RootNode.get());
_SceneView->setClearColor(osg::Vec4(1.0f, 0.0f, 0.0f, 1.0f));
gstate->setMode( GL_LIGHTING, osg::StateAttribute::OFF);
_SceneView->setLightingMode(osgUtil::SceneView::NO_SCENEVIEW_LIGHT);
---8<---
Camera setup
---8<---
// clearing
_Camera->setClearColor(osg::Vec4(1.0f,0.0f,0.0f,1.0f));
_Camera->setClearMask(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
// projection and view
_Camera->setProjectionMatrix(osg::Matrix::ortho2D(0,1,0,1));
_Camera->setReferenceFrame(osg::Transform::ABSOLUTE_RF);
_Camera->setViewMatrix(osg::Matrix::identity());
// viewport
_Camera->setViewport(0, 0, _TextureWidth, _TextureHeight);
_Camera->setRenderOrder(osg::Camera::PRE_RENDER);
_Camera->setRenderTargetImplementation(osg::Camera::FRAME_BUFFER_OBJECT);
// attach the texture and use it as the color buffer.
_Camera->attach(osg::Camera::COLOR_BUFFER, _OutTexture.get());
---8<---
Quad setup
---8<---
osg::ref_ptr<osg::Group> top_group = new osg::Group;
osg::ref_ptr<osg::Geode> quad_geode = new osg::Geode;
osg::ref_ptr<osg::Vec3Array> quad_coords = new osg::Vec3Array; //
vertex coords
// counter-clockwise
quad_coords->push_back(osg::Vec3d(0, 0, -1));
quad_coords->push_back(osg::Vec3d(1, 0, -1));
quad_coords->push_back(osg::Vec3d(1, 1, -1));
quad_coords->push_back(osg::Vec3d(0, 1, -1));
osg::ref_ptr<osg::Vec2Array> quad_tcoords = new osg::Vec2Array; //
texture coords
quad_tcoords->push_back(osg::Vec2(0, 0));
quad_tcoords->push_back(osg::Vec2(_TextureWidth, 0));
quad_tcoords->push_back(osg::Vec2(_TextureWidth, _TextureHeight));
quad_tcoords->push_back(osg::Vec2(0, _TextureHeight));
osg::ref_ptr<osg::Geometry> quad_geom = new osg::Geometry;
osg::ref_ptr<osg::DrawArrays> quad_da = new
osg::DrawArrays(osg::PrimitiveSet::QUADS,0,4);
quad_geom->setVertexArray(quad_coords.get());
quad_geom->setTexCoordArray(0, quad_tcoords.get());
quad_geom->addPrimitiveSet(quad_da.get());
_StateSet = quad_geom->getOrCreateStateSet();
_StateSet->setMode(GL_LIGHTING,osg::StateAttribute::OFF);
_StateSet->setTextureAttributeAndModes(0, _InTexture.get(),
osg::StateAttribute::ON);
quad_geode->addDrawable(quad_geom.get());
top_group->addChild(quad_geode.get());
return top_group;
---8<---
--
This message is subject to the CSIR's copyright terms and conditions, e-mail
legal notice, and implemented Open Document Format (ODF) standard.
The full disclaimer details can be found at
http://www.csir.co.za/disclaimer.html.
This message has been scanned for viruses and dangerous content by MailScanner,
and is believed to be clean. MailScanner thanks Transtec Computers for their
support.
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org