我最近正在使用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.2,0.2,0.2。
发布于 2012-09-27 16:09:47
否:正如您自己注意到的,这将涉及到对所有音量进行采样。
在2D中,您可以使用求和面积表。它使你能够计算一个只有4个样本的“盒子”中矩阵的所有值的总和;我猜这个概念很容易扩展到3D。
请注意,您将有一个相当昂贵的预处理步骤;并且您只能得到平均值和和,而不能有其他花哨的东西,如几何平均值或中值。
以下是AMD对不同用例的一些解释:http://developer.amd.com/media/gpu_assets/GDC2005_SATEnvironmentReflections.pdf
我猜您也可以使用mipmap:要采样2x2x2卷,请采样第一个mipmap...但是,对于任意的样本位置,这不会开箱即用。
https://stackoverflow.com/questions/12614961
复制相似问题