Hi Anders, I don't quite understand the problem. A pre draw callback gives you the Camera, and it has the view and projection matrix, it has everything you need. If the OpenHaptic library requires a matrix set by OpenGL then just set it then and there in your pre draw callback.
Robert. On 8/13/07, Anders Backman <[EMAIL PROTECTED]> wrote: > > 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@lists.openscenegraph.org > > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > > > > > -- > > > ________________________________________________________________ > Anders Backman Email: [EMAIL PROTECTED] > 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 > _______________________________________________ > 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