Hi Guher(?), You can nest Camera's to override the project and modelview matrices, or as your follow up post mentionds you can use osg::Projection that just overrides the projection matrix.
On Sat, Dec 27, 2008 at 6:17 PM, guher b <[email protected]> wrote: > Hi, > > while trying to implement rtt textures, > I came a cross a situation that I can not solve in anyway. > A camera (this camera is a post render camera (which was added to > scenegraph) which draws to frame buffer.and meanwhile, the main camera (of > the viewer) produces a texture (via fbo) that this camera uses to draw to > frame buffer) > > This camera(post render camera) should draw two different geometries; a > simple quad, which is used to render a textured quad with orthographic > projection (to draw the main camera's fbo's generated texture in to the frame > buffer), and secondly a geometry(a sphere) with perspective projection to be > drawn to the frame buffer afterwards. > > To handle different projections, I reimplemented the drawcallback of the > first geometry (which needed orthographic projection) and did nothing for the > sphere which used the camera's original projection (perspective projection). > However, when the sphere is visible, sphere is not rendered as it should be, > the whole scene becomes the sphere's color, when the sphere is visible, and > nothing is drawn when the sphere is not visible. There is no sphere shape at > all. I belive that the drawcallback of the first geometry does something > wrong which produces this behavior, cause when the drawcallback is not done, > the first geom is not drawn but the sphere is drawn as it should be. The > following code shows my drawcallback of the first geometry, > class TmpDrawCallback : public osg::Drawable::DrawCallback > { > public: > TmpDrawCallback() : osg::Drawable::DrawCallback(){ > projectionMatrix=new > osg::RefMatrix(osg::Matrix::ortho(0,1,0,1,0,1)); > osg::Matrix m; > > m.getLookAt(osg::Vec3d(0,0,0),osg::Vec3d(0,0,-2),osg::Vec3d(0,1,0)); > modelViewMatrix=new osg::RefMatrix(m); > } > ~TmpDrawCallback() {} > > void drawImplementation (osg::RenderInfo& ri, const > osg::Drawable* dr) const; > osg::RefMatrix * projectionMatrix; > osg::RefMatrix * modelViewMatrix; > > > > > }; > void TmpDrawCallback::drawImplementation (osg::RenderInfo& ri, const > osg::Drawable* dr) const > { > osg::RefMatrix * originalPm=new > osg::RefMatrix(ri.getState()->getProjectionMatrix()); > osg::RefMatrix * originalMvm=new > osg::RefMatrix(ri.getState()->getModelViewMatrix()); > > ri.getState()->applyProjectionMatrix(projectionMatrix); > ri.getState()->applyModelViewMatrix(modelViewMatrix); > > dr->drawImplementation(ri); > > ri.getState()->applyProjectionMatrix(originalPm); > ri.getState()->applyModelViewMatrix(originalMvm); > } > > > Does anyone see the flaw here? Or, is there any other way of implementing 2 > different projections for the samecamera(without reimplementing the > drawcallback)? > Thanks in advance > > > > > > > _______________________________________________ > 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

