Hi Philipp,

I'm not sure, if I really understand what you intend to do.

In my case my scene is very complex and I get timeouts on my graphic card.
So I do a rendering into many tiles, each holding a small portion of the scene.
Thus culling avoids transfer of the complete data onto the graphic card.
The tiles are assigned to a quadtree and rendered with paged LOD.

Would that also be a solution for you?

- Werner -

Am 10.12.2019 um 16:42 schrieb Philipp Wagner:
> Hi,
>
> I want to perform an offscreen rendering of a scene that is too large to fit 
> into the GPU memory at once (lots of big textures).
> My idea was to render parts of the scene each in its own frame, and disable 
> the clearing of the depth and color buffer.
> This does work for the color buffer, but the depth buffer seems to be cleared 
> after each frame, which leads to incorrect results (The later parts are drawn 
> over the previous
> ones, even though they are behind the other parts).
>
> The algorithm:
> 1. Create camera/context/...
> 2. Clear the buffers (i.e. Render an empty scene with a clear mask of 
> (GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT)
> 3. Disable buffer clearing
> 4. Render each part in its own frame
>  a. Add part to the scene
>  b. Render
>  c. Remove part from the scene
> 5. Read back color buffer
>
>
> osg::ref_ptr<::osg::Camera> camera = new osg::Camera();
>
> //Here we set the camera orientation/projection matrix
>
> camera->setClearColor(...);
> camera->setGraphicsContext(context);
>
> osg::ref_ptr<osg::Image> img = new osg::Image;
> img->allocateImage(textureWidth, textureHeight, 1, GL_RGBA, GL_UNSIGNED_BYTE);
> camera->attach(osg::Camera::COLOR_BUFFER0, img, numSamples);
> camera->attach(osg::Camera::DEPTH_BUFFER, GL_DEPTH_COMPONENT32);
> camera->setRenderOrder(osg::Camera::PRE_RENDER);
> camera->setRenderTargetImplementation(osg::Camera::RenderTargetImplementation::FRAME_BUFFER_OBJECT);
> camera->setReferenceFrame(osg::Camera::ABSOLUTE_RF);
> camera->setProjectionResizePolicy(osg::Camera::FIXED);
> camera->setViewport(0, 0, img->s(), img->t());
> viewer->addSlave(camera);
>
> camera->setClearMask(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT);
> viewer->frame();
> camera->setClearMask(0);
> for (auto& item : parts)
> {
>    //Here we create and add the item to the scene...
>        viewer->frame();
>    //Here we remove item from the scene and delete it
> }
>
> Thanks in advance
> Phil
> -- 
> You received this message because you are subscribed to the Google Groups 
> "OpenSceneGraph Users" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to osg-users+unsubscr...@googlegroups.com 
> <mailto:osg-users+unsubscr...@googlegroups.com>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/osg-users/c6f7907d-6c89-4c00-973c-f9dc0585ae32%40googlegroups.com
> <https://groups.google.com/d/msgid/osg-users/c6f7907d-6c89-4c00-973c-f9dc0585ae32%40googlegroups.com?utm_medium=email&utm_source=footer>.
>
> _______________________________________________
> osg-users mailing list
> osg-users@lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to