[osg-users] View/Projection/ModelView matrix not applied?
Anders Backman
andersb at cs.umu.se
Mon Aug 13 04:50:54 PDT 2007
> So... I would have though just passing the view matrix as is would the
> appropriate thing to do.
Yes, thats right.
The problem for me in this case was that I expected, and required the
OpenGL view states to be set at the point of the preDrawCallback for a
camera.
The reason for this is that OpenHaptics, the haptic rendering toolkit
which Im depending on is reading the OpenGL modelview matrix during
its "pre-haptic-draw".
This gets event more complicated as one need to follow the below described loop:
Each haptic device is associated to a Camera (due to that one need the
View/projection matrices setup before rendering).
0. Draw Haptic Scene
1. for each haptic_device:
1.1 Apply view/projection for associated osg::Camera
1.1 haptic_device->makeCurrent()
1.2 haptic_device->beginDraw()
2. render opengl (any valid geometry call will be caught by haptic API
as haptic geometry)
3. Finished: for each camera
3.1 haptic_device->endDraw()
Now if the modelview matrix is applied within the renderbin, just
before a Leaf is about to be rendered, one has to initialize the
haptic rendering there.
I do have a HaptiCrenderbin, and HapticRenderLeaf already so that
structure is working.
The problem is now that the ModelViewMatrix can be pushed/popped
several times due to the accumulated state for a RenderLeaf, so there
is nowhere I can put my haptic_device->beginDraw() where I know that:
Here is where the ModelView matrix is applied to OpenGL.
In osg1.x together with Producer, the OpenGL states were applied
before the PreDrawCallback, but as you pointed out, that state-change
was effectively ignored by OSG.
Now I have to decorate the scene with a mechanism that before the
haptic part of a scene-graph is rendered, it has to begin the haptic
rendering WITH a valid OpenGL context and the correct ModelView matrix
applied.
I cant really see how I am going to achieve that with callbacks, or
even my own RenderBin...
I could try to collect all the haptic devices to the HapticRenderBin
and try to initialize them there. But thats not really what I am
after, I want to associate the HapticDevice to the camera, so that
when the scene for a specific camera is about to be drawn, the
hapticdevice is properly initialized and used too.
I thought preDrawCallback would work like that, but I realize that it
doesnt anymore, which is probably a good thing for performance, but
less good for me ;-)
Does anything of this make sense? Im not sure how to hook the haptic
rendering into osg2.0 as it is right now.....
Any input is appreciated,
cheers,
Anders
>
> > I can get the ViewMatrix, I can also get the MatrixList (of all
> > matrices above the camera in the scenegraph), but to match osg and to
> > make it as flexible as the rest of osg, how would do this?
>
> With Viewer cameras there aren't any nodes above it so this should
> just be an empty lists.
>
> > 2. Regarding GraphicsContext, assume that I do need access to a
> > graphicsContext in a PreRender, how can I take control of that Context
> > avoiding any race condition?
> > Now, Im not sure where I get the hang, but it does have something to
> > do with the fact that Im accessing OpenGL when I should not...
> > Eventhough, when I get into the PreRender callback the Context is
> > active. so a simple makeCurrent() would not work.
>
> The Camera pre draw callback will have the graphics context already
> made current so there won't be any need to call makeCurrent yourself.
>
> If you are finding problems doing OpenGL calls in a Camera pre or post
> draw callback then there must be something else wider that is amiss -
> the OSG itself should be having the same problems too.
>
> As for hangs or race conditions on your own code, I can't really comment.
>
> Robert.
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
--
________________________________________________________________
Anders Backman Email: andersb at cs.umu.se
HPC2N/VRlab Phone: +46 (0)90-786 9936
Umea university Cellular: +46 (0)70-392 64 67
S-901 87 UMEA SWEDEN Fax: +46 90-786 6126
http://www.cs.umu.se/~andersb
More information about the osg-users
mailing list