Hello José,

José Pedro Dias wrote:
> Hello to you all. I'm posting this after leading the most relevant mails in
> this subject and taking a look at the examples provided in the source. So
> you know :)
> 
> I have two viewports, the second of them smaller, kind of a bird's eye view
> map.
> I already have them the way I want, except for the fact that I want the
> smaller one to have a shape other than a rectangle (circle, in fact).

using plain OpenGL you'd probably do the following:
1) render the circle form with the following stencil settings:
        Func: GL_NEVER
        Value: 1
        Mask:  0xFFFF
        OpFail: GL_REPLACE
        OpZFail: GL_REPLACE
        OpZPass: GL_REPLACE

2) render the scene with the following stencil settings:
        Func: GL_EQUAL
        Value: 1
        Mask: 0xFFFF
        OpFail: GL_KEEP
        OpZFail: GL_KEEP
        OpZPass: GL_KEEP

For OpenSG that translates to:
- create two stencil chunks, one for each of the above settings.
- add the first one to the circle's material
- set the ClearBuffer for that stencil chunk to 1, to clear the stencil
   buffer before the circle is drawn
- set the SortKey of the circle's material to a negative value, to 
make      sure it is rendered first
- add the second stencil chunk to each material in the scene
- render the small viewport

For your large viewport you need to set the StencilFunc of the second 
chunk to GL_ALWAYS so that it does not affect that rendering. That 
however means you can not call Window::render because it will render 
both viewports in one go without giving you a chance to switch the value 
  in the stencil chunk. But you can just do the calls Window::render 
issues "by hand" (it is not much) and insert the value change between them.

The ClearBuffer field of the stencil chunk is a bit tricky as it allows 
clearing that buffer during rendering. However due to the state sorting 
OpenSG normally performs this becomes quite unpredictable. For your case 
you only need to clear the buffer once, before the circle shape is 
drawn, so the combination of a negative sortKey and setClearBuffer(1) is 
sufficient.

BTW for drawing the circle shape you might want to look at the 
PolygonBackground.

A different solution to your problem would be to render to "map view" 
with a FBOViewport and draw the generated texture with a 
PolygonForeground over the main view.

        Hope it helps,
                Carsten

-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
_______________________________________________
Opensg-users mailing list
Opensg-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensg-users

Reply via email to