Hi guys !

The solution I suggested to myself, actually works !

So, if someone needs to render to a 3D image one day, one available option
is to attach slices of the target images as mentioned below.

To get those slices I used some code like (where z is the slice to render
to)

*osg::Image* SceneTools::get3DImageSlice(osg::Image * src, int z)
{
    // Create a new image:
    osg::Image* img = new osg::Image();
    int ww = src->s();
    int hh = src->t();
    unsigned char* data = src->data(0,0,z);
    img->setImage (ww, hh, 1, src->getInternalTextureFormat(),
src->getPixelFormat(), src->getDataType(), data, osg::Image::NO_DELETE,
src->getPacking());

    return img;
}*


Now I have another issue related to those 3D texture/images usage:

I'm trying to copy a 3D Texture/image into another 3D texture/image with
GLSL. And for a reason I cannot explain this is just not working... :-(

I have the following setup:


   -   created a target 3D image to hold the copy result.
   - create multiple cameras, with multiple color attachment (one camera for
   slice of the target image), each camera has the proper "slice" uniform
   interger.
   - Assigned the source 3D image as a SAMPLER_3D uniform on a parent group
   for all the cameras.
   - Applied a shader on the parent group for all the cameras to just copy
   the source image slice into the target image slice...


==> Is there something I could be missing here ?

Just let me know if you need some code to have a better idea of what I'm
doing (but almost everything is written in Lua).


==> One very strange thing about this is: if I use a 2D source image instead
of a 3D source image, everything works just fine ! [I can for instance use
the slice index to fade the input 2D image, and thus get a valid resulting
3D image with different slices].


Any help would really be appreciated here :-)

Cheers!
Manu.


2010/8/4 Emmanuel Roche <roche.emman...@gmail.com>

> Concerning this problem, I'm wondering if I could use the following
> solution:
>
>  1. Create a "master" 3D image, and allocate it;
>  2. Since attaching 2D images to a camera would not require any face
> argument, I could create "sub" images, one per z slice of the master camera,
> and use setImage with an offset data pointer in the master image data...
>  3. Then assign those sub images to each camera I'm using to render the
> complete 3D image.
>
> Would this work as expected ?? Or would attaching an image to a camera
> actually somehow reallocate the image data ??? (and thus we would not be
> able to write the slice data into the master image data).
>
> I hope, those explanations are clear enough :-)
>
> Manu.
>
>
> 2010/8/4 Emmanuel Roche <roche.emman...@gmail.com>
>
> Hi everyone,
>>
>> I'm currently trying to generate some 3D images in an OSG based app.
>>
>> I've read the previous discussions on the OSG forums concerning the 3D
>> texture rendering, but this doesn't help in my situation. What I really need
>> is *3D image* rendering not *3D texture* rendering.
>>
>> More explanations:
>>
>>  * One can attach an osg::Image or an osg::Texture to the color buffer of
>> a given camera. But one can only specify the "face" argument for textures:
>>
>> *void attach <http://a00098.html#a496ed6d69392c1fdb8548085900a1a87> (
>> BufferComponent <http://a00098.html#af4d8ae808500a2f5bc9fe7b605386e74>buffer,
>> osg::Texture <http://a00946.html> *texture, unsigned int level=0,
>> unsigned int face=0, bool mipMapGeneration=false, unsigned int
>> multisampleSamples=0, unsigned int multisampleColorSamples=0)
>>
>> void attach <http://a00098.html#a4124951a5032de595c5d28d0cc5e87a3> (
>> BufferComponent <http://a00098.html#af4d8ae808500a2f5bc9fe7b605386e74>buffer,
>> osg::Image <http://a00389.html> *image, unsigned int
>> multisampleSamples=0, unsigned int multisampleColorSamples=0)
>>
>> ** So,
>>   - if I attach a 3D image directly to the camera, the depth of the image
>> is not taken into account, and all the image "slices" will contain the same
>> result.
>>   - if I attach a Texture3D object, whether I assign it an underlying
>> image doesn't matter: the content of the "texture" cannot be retrieved with
>> the assigned image...
>>
>> Is there something I'm missing here ? Did someone already successfully
>> render to a 3D texture *AND* wrote that texture to a file for instance ??
>>
>> Or is there a way to retrieve the content of a 3D texture into a 3D image
>> (I guess retrieving the texture data from the graphic card somehow ?) [I'm
>> not very good at pure OpenGL considerations, thus the question :-) ].
>>
>> Cheers! Thanks for your help guys!
>>
>> Manu.
>>
>>
>
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to