Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenGL-如何将对象渲染为三维纹理作为体积广告牌_Opengl_3d Texture - Fatal编程技术网

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

OpenGL-如何将对象渲染为三维纹理作为体积广告牌,opengl,3d-texture,Opengl,3d Texture,我正试图在OpenGL 3.3+中实现体积广告牌,如前所述 还有视频。 我现在面临的问题(非常基本)是:如何有效地将3D对象渲染为3D纹理(如本文所述)?假设对象可以存储在256x256x128tex中,创建256*256*128*2framebuffers(因为据说它应该在每个轴上渲染两次:+X,-X,+Y,-Y,+Z,-Z)是不明智的,而且据我所知,纹理单元太少,无法处理这么多纹理(更不用说所需的时间了) 有人知道如何处理这样的事情吗?一片3D纹理可以直接连接到当前帧缓冲区。因此,创建一个帧

我正试图在OpenGL 3.3+中实现体积广告牌,如前所述 还有视频。 我现在面临的问题(非常基本)是:如何有效地将3D对象渲染为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调用?