Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

OpenGL - how to render object to 3D texture as a volumetric billboard

I'm trying to implement volumetric billboards in OpenGL 3.3+ as described here and video here. The problem I'm facing now (quite basic) is: how do I render a 3D object to a 3D texture (as described in the paper) efficiently? Assuming the object could be stored in a 256x256x128 tex creating 256*256*128*2 framebuffers (because it's said that it should be rendered twice at each axis: +X,-X,+Y,-Y,+Z,-Z) would be insane and there are too few texture units to process that many textures as far as I know (not to mention the amount of time needed).

Does anyone have any idea how to deal with something like that?

like image 324
hun7er Avatar asked Jul 06 '13 16:07

hun7er


1 Answers

A slice of 3D texture can be directly attached to the current framebuffer. So, create a frame buffer, a 3D texture and then do rendering like:

glFramebufferTexture3D( GL_FRAMEBUFFER, Attachment, GL_TEXTURE_3D,
                        TextureID, 0, ZSlice );
...render to the slice of 3D texture...

So, you need only 1 framebuffer that will be iterated by the number of Z-slices in your target 3D texture.

like image 197
Sergey K. Avatar answered Sep 22 '22 13:09

Sergey K.