OpenGL - 如何将对象渲染为3D纹理作为体积广告牌

hun*_*7er 5 opengl 3d-texture

我试图实现体积广告牌的OpenGL 3.3+描述这里 和视频在这里.我现在面临的(很基本的)问题是:我怎么渲染3D对象的3D纹理(如本文所述)高效?假设对象可以存储在256x256x128tex中创建256*256*128*2帧缓冲区(因为据说它应该在每个轴上渲染两次+X,-X,+Y,-Y,+Z,-Z:)会疯狂,而且据我所知,纹理单元太少而无法处理那么多纹理(更不用说了)所需的时间).

有没有人知道如何处理这样的事情?

Ser*_* K. 5

3D 纹理切片可以直接附加到当前帧缓冲区。所以,创建一个帧缓冲区,一个 3D 纹理,然后像这样进行渲染:

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

因此,您只需要 1 个帧缓冲区,它将根据目标 3D 纹理中的 Z 切片数量进行迭代。

  • 嗨,我知道这个问题很老了,但只是想澄清一下。ZSlices 的数量应该等于纹理的 z 维度吗?即,在 256x256x128 纹理的情况下,是否会有 128 个 zslice,从而有 128 个绘制调用? (2认同)