[osg-users] frame control and callback

Matthieu DIRRENBERGER matthieu.dirrenberger at ersa-france.com
Tue Sep 30 06:57:43 PDT 2008


Hello OSG users,

 

I am a new on OSG and I have some difficulties to finish an application.

I am trying to do an application which computes pre-calculated
height-maps from a scene.

Simply, I make a "draughtboard" from the scene; and a camera takes shots
from Z-buffer for each square looking downward.

I have done a callback function to get z-buffer and convert it to my
convenience, but I can't control the execution of that callback
function...

 

struct MyCameraPostDrawCallback : public osg::Camera::DrawCallback

{

      MyCameraPostDrawCallback(osg::Image* image, osg::Image* cimage,
osg::Texture2D* t): _image(image), _cimage(cimage), _cTex(t)

    {

    }

    virtual void operator () (const osg::Camera& /*camera*/) const

    {

...code...

 

I use this function to init the callback in the camera settings:
camera->setPostDrawCallback(new MyCameraPostDrawCallback(test.get(),
zImage.get(), tex.get()));

 

After that, I use loops to modify camera positions and take my shots (I
make a code based on the example from OSG user guide using
viewer->frame(). 

 

for(x=0;x<nb_x;x++)

      {

            yd=-TEXT_SIZE/2;

            yf = yd+TEXT_SIZE;

 

            for(y=0;y<nb_y;y++)

            {     

 
camera->setClearColor(osg::Vec4(0.1f,0.3f,0.3f,1.0f));//init buffer de
couleur

                  camera->setClearMask(GL_COLOR_BUFFER_BIT |
GL_DEPTH_BUFFER_BIT);//init Z-buffer

 
camera->setProjectionMatrixAsOrtho(xd,xf,yd,yf,0.1,TEXT_SIZE);

 

                  viewer->frame();

                  

                  if(y<nb_y)

                  {

                        yd=yf;

                        yf=yf+TEXT_SIZE;

                  }

            }     

            if(x<nb_x)

            {

                  xd=xf;

                  xf=xf+TEXT_SIZE;

            }

      }     

 

The problem is to takes a shot using the callback function for each
frame with the new camera position.

I thought that draw a frame should calls the Camera::DrawCallBack
function, but it doesn't...

I always get the last square from the loops in my images buffer (at each
position). 

In fact the callback function is called after the loops in spite of
viewer->frame().

 

Can you help me? I am not sure to use the right method...

 

Thanks

 

Matthieu DIRRENBERGER

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20080930/d13cba29/attachment-0002.htm>


More information about the osg-users mailing list