OpenGL-如何将对象渲染为三维纹理作为体积广告牌
我正试图在OpenGL 3.3+中实现体积广告牌,如前所述 还有视频。 我现在面临的问题(非常基本)是:如何有效地将3D对象渲染为3D纹理(如本文所述)?假设对象可以存储在OpenGL-如何将对象渲染为三维纹理作为体积广告牌,opengl,3d-texture,Opengl,3d Texture,我正试图在OpenGL 3.3+中实现体积广告牌,如前所述 还有视频。 我现在面临的问题(非常基本)是:如何有效地将3D对象渲染为3D纹理(如本文所述)?假设对象可以存储在256x256x128tex中,创建256*256*128*2framebuffers(因为据说它应该在每个轴上渲染两次:+X,-X,+Y,-Y,+Z,-Z)是不明智的,而且据我所知,纹理单元太少,无法处理这么多纹理(更不用说所需的时间了) 有人知道如何处理这样的事情吗?一片3D纹理可以直接连接到当前帧缓冲区。因此,创建一个帧
256x256x128
tex中,创建256*256*128*2
framebuffers(因为据说它应该在每个轴上渲染两次:+X,-X,+Y,-Y,+Z,-Z
)是不明智的,而且据我所知,纹理单元太少,无法处理这么多纹理(更不用说所需的时间了)
有人知道如何处理这样的事情吗?一片3D纹理可以直接连接到当前帧缓冲区。因此,创建一个帧缓冲区,一个3D纹理,然后进行如下渲染:
glFramebufferTexture3D( GL_FRAMEBUFFER, Attachment, GL_TEXTURE_3D,
TextureID, 0, ZSlice );
...render to the slice of 3D texture...
因此,您只需要1个帧缓冲区,该帧缓冲区将根据目标3D纹理中Z切片的数量进行迭代。我怀疑OpenGL是一种可行的方法,有一些体素化算法,我认为您应该挖掘它们。为什么您认为您需要这么多帧缓冲区?它只是256*2+256*2+128*2。问题是我必须在OpenG中这样做五十、 我在大学的计算机图形学课上使用OGL。如果我有任何成就,我会尝试使用OGL。关于帧缓冲区:对不起,你是对的,我的错。但是要传递给着色器afaik还是太多了(纹理单位的数量是瓶颈)如果你找到一种可以很好地并行的方法,你可以使用计算着色器。那么,这是否意味着你必须对每个切片进行绘制?我无法一次性渲染整个3D纹理?@Sekhat-yep,per-sliceHi,我知道这个问题很老,但只是想澄清一下。z切片的数量应该等于纹理的z维度吗?例如,在如果是256x256x128纹理,是否会有128个zSlice和128个draw调用?