我需要一个着色器来在2D纹理的每一行上执行一种累积和。例如,新纹理的像素[3,3]应该是源纹理的像素[1,3],[2,3]和[3,3]的总和。换句话说,数值积分。
我的纹理大小可能最终会介于64x64和256x256纹素之间,具体取决于性能,因此对每像素总和进行一次蛮力可能是不可能的。
不幸的是,我无法在1D纹理数组上使用自动mipmap生成,因为我实际上并未进行常规添加。但是,我可能能够适应使用添加的手动解决方案。
注意:我使用的是GLSL和HLSL,但它们看起来几乎完全兼容。
我目前的想法是在像素着色器中执行一种手动1d mipmap(使用非插值纹理元素提取),但可能会将每个mipmap级别的大小缩小4或8而不是2。
例如:
完成此操作后,我将通过mipmap级别(从最小值开始),将前一级别的累计和(将大小和偏移量调整为1)添加到同一行段中前一个纹素的总和,并放置一个新的纹理。
level-N-accum[(a*width)+b,y] =
level-N+1-accum[a-1,y]
+
sum(first b pixels starting from level-N-sum[a*width,y])
例如:
这给了我每像素O(ln(X))的复杂度。
答案 0 :(得分:0)