GLSL集成功能

Loo*_*zie 5 sum opengl-es glsl vertex-shader fragment-shader

有关如何在GLSL着色器中实现有效积分函数(如SumX和SumY)的建议吗?

SumX(u)=关于x = I(u0,y)+ I(u1,y)+ ... + I(uN,y)的积分; u =归一化x坐标SumY(v)=关于y = I(x,v0)+ I(x,v1)+ ... + I(x,vN)的积分; v =标准化的y坐标

例如,第一行的第5个像素将是第一行上所有五个像素的总和.并且最后一个像素将是所有先前像素的总和,包括最后一个像素本身.

Dam*_*mon 9

您要求的是2D情况的前缀和或总面积表(SAT)(这样您就可以更轻松地找到在线资源).

通过分解为几个并行前缀和通[1],[2],可以在GPU上有效地实现求和区域表.
通过使用本地内存来存储中间部分和,可以加速前缀和(参见OpenCL中的示例CUDA中的示例,原则上可以在OpenGL片段着色器中使用图像加载存储,或者在计算着色器中完成:OpenGL超级圣经示例,类似于OpenGL Insights中的示例,见第280页).

请注意,您可能会很快遇到精度问题,因为对于最右边(最下面)的像素,总和可能会变得非常大.整数或fp16渲染目标很可能由于溢出或缺乏精度而导致失败,fp32大部分时间都可以工作.