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
_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org