HI Mathias,

Given your setup it's pretty clear that you'd need to not use the OSG
in built stereo support (that is implemented internally using
osgUtil::SceneView), and instead setup up two slave camera sets that
do the render to texture/post render for each eye and in the final
step do the checkboard stereo at the same time.

Robert.

On Wed, Aug 5, 2009 at 12:34 PM, Mathias Buhr<mathias...@gmx.de> wrote:
> Hi Robert,
>
> thank you for your answer.
> I'll try to give some more details on the current setup:
> - multiple physical displays/projectors which overlap to produce a single
> (flat-)screen
> - alignment and blending of the displays is done with the 3rd-party stuff
> - the displays support checkerboard-stereo
>
> In mono-mode my integration of OSG and the 3rd party stuff works perfectly
> and all display do what they are supposed to do. The post-processing is done
> in the camera's postDrawCallback without any magic :) The problem starts
> when I enable OSGs checkerboard-stereo because the image-distortion in the
> postDrawCallback will result in an unusable checkerboard-frame. So basically
> I'm trying to get checkerboard-stereo to work.
> Due to the described problem, I need access to the left and right frames to
> distort them individually. Normally they are "blend together" via stenciling
> in osg::RenderStage::draw(). As far as I know, there is no direct access to
> these frames. I could either implement some kind of callback into OSG or
> implement a variant of checkerboard-stereo myself.
> Currently I'm trying to render both frames individually to an FBO and
> putting them together afterwards. In this case I would have control  of both
> frames and I would be able to manipulate them with the help of the 3rd-party
> code.  osg::Camera::RenderTargetImplementation::FRAME_BUFFER_OBJECT wasn't
> able to do the trick since I've found no way to access the FBO OSG utilizes.
> Therefore I've tried my own implementation (currently on a single display)
> with the following setup and the given result in the post before (take a
> look at the attached picture).
>
> The current implementation is very similiar to the osgprerender example
> (stereo is not enabled) except that I'm creating my own FBO in a
> preDrawCallback of the PRE_RENDER cam. This FBO has an attached texture and
> is used as the rendertarget for the first (left) (RTT-)camera.
> RenderTargetImplementation for this camera has not been explicitly set. The
> texture is attached to a rectangular geometry, which is itself a child of
> the osgViewers camera. Unfortunately the result of the RTT looks like the
> attached image. The image was saved in the postDrawCallback. I'm pretty sure
> I've messed something up or missed something. RTT with OSGs FBO works fine
> and I've looked at the code but I didn't find anything.
>
> Does someone have an idea? Or maybe another way to implement
> checkerboard-stereo? It looks like some faces get culled away. If its useful
> I'll post some code.
>
> @Robert: I'm not using osgUtils low level stereo right now but I guess some
> of the code would later be useful to get the correct left and right
> camera-position-setup.
>
> Nice greetings and thanks for any help or hint!
> Mathias Buhr
>
> P.S.: I was already able to do the distortion with that implementation (with
> blitting the FBO-image back to the window-system provided FB to get the 3rd
> party stuff working).
>
>
>
> Am 04.08.09 19:14, schrieb Robert Osfield:
>>
>> Hi Mathias,
>>
>> You don't really provide enough info about your overall viewer setup
>> to give a direct answer.  It sounds like you are using the OSG's low
>> level stereo support in osgUtil and combining this with a 3rd party
>> code that does distortion correction or similar.  Doing low level
>> stereo and distortion correction is really going to work visually even
>> if you got it to work code wise, as the low level stereo support in
>> osgUtil assumes a flat display.
>>
>> Have a bash at explaining what your system is trying to do at a high
>> level and then others will have a better chance of suggesting how to
>> go about it.
>>
>> Robert.
>>
>> On Tue, Aug 4, 2009 at 4:10 PM, Mathias Buhr<mathias...@gmx.de>  wrote:
>>
>>>
>>> Hi,
>>>
>>> before going into the details of the problem, I'd like to explain what
>>> I'm
>>> trying to do and what I have done until now.
>>> I have a 3rd-party function/method which is out of my scope. It seems to
>>> read and write the window-system provided framebuffer and
>>> manipulates/distorts the image. The first implementation was through
>>> calling
>>> this function in a postdraw-callback. Everything works fine this way.
>>> Unfortunately this is not possible if the CHECKBOARD flag is set because
>>> the
>>> postdraw-callback is called after the complete frame (including the
>>> stenceling for the checkerboard) is rendered. The function would distort
>>> the
>>> checkerboard. Hence, I have to apply this function for each "eye"
>>> separately.
>>> This seems possible with some changes to OSG itself but it also would
>>> break
>>> the possibilty to upgrade later.  So I decided to take another approach:
>>>
>>> I've tried rendering to an FBO (RTT, similar to osgprerender) but I can't
>>> apply the function anymore in the postdraw-callback (gives GL errors).
>>> Since
>>> there is no access to the OSG-managed FBO (for bliting from FBO to FB) I
>>> have implemented my own and rendered to that instead. I'll give you a
>>> brief
>>> overview for that:
>>>
>>> MainCamera
>>>    - addChild(QUAD_STRIP)                        //an osg:Geode with an
>>> osg::Texture2D
>>>    - addChild(LeftCamera)
>>>        - PreDrawCallback:
>>>            - if (!fbo) glGenFramebufferEXT
>>>            - glBindFramebufferEXT
>>>            - glFramebufferTexture2DEXT         //attach the
>>> osg::Texture2D
>>>        - PostDrawCallback:
>>>            - glBindFramebufferEXT(0)            //bind window-system fb
>>>
>>> LeftCamera is set to PRE_RENDER
>>>
>>> This approach gives me the result which is shown in this picture:
>>> http://www.apparatus.de/test1.png
>>>
>>> Does someone have an idea what is going wrong or what I've missed? I've
>>> looked at the RenderStage code (and much more :-) ) but I haven't found
>>> something that might be the problem.
>>>
>>> Or maybe there is another (better) approach to this problem. Any hints
>>> for
>>> that?
>>> I would appreciate any help! Thank you very much for reading :-)
>>>
>>> Greetings
>>> Mathias
>>>
>>>
>>> _______________________________________________
>>> 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
>>
>>
>
> _______________________________________________
> 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