GLSL - 采样3d纹理的体积

时间:2012-09-27 05:58:53

标签: opengl glsl textures

我最近在OpenGL中使用3d纹理。 我意识到当你使用3d纹理时,你必须使用texture3d()很多。 这几乎是一个gpu杀手。 glsl中是否有任何函数可以让我对3d纹理进行采样?因此,我可以做类似这样的事情,而不是调用texture3D()32768次:

texture3DVolume(3dtexture, vec3(0.5, 0.5, 0.5), vec3(0.2, 0.2, 0.2));

哪个样品在0.5 0.5 0.5,体积为0.2 0.2 0.2。

1 个答案:

答案 0 :(得分:0)

否:如果您自己注意到,这将涉及对所有音量进行采样。

在2D中,您可以使用Summed Area Tables。它使您能够计算“盒子”内仅有4个样本的矩阵的所有值的总和;我想这个概念很容易扩展到3D。

请注意,您将有一个非常昂贵的预处理步骤;你只能得到平均值和总和,没有其他奇特的东西,如几何平均值或中位数。

以下是AMD对不同用例的一些解释:http://developer.amd.com/media/gpu_assets/GDC2005_SATEnvironmentReflections.pdf

我猜你也可以使用mipmaps:对2x2x2体积进行采样,对第一个mipmap进行采样......但是这对于任意样本位置来说都是不可用的。