8

如何使用 HSLS 像素着色器有效地计算图像中所有像素的总和?我对 Pixel Shader 2.0 感兴趣,我可以将其作为 WPF 着色器效果调用。

4

3 回答 3

7

有一个不使用着色器的更简单的解决方案:将图像加载为纹理,创建 mipmap 链并读回最后一个 mipmap(1x1 像素)的值。此技巧在游戏中广泛用于计算,例如,场景的平均亮度(以应用 HDR 色调映射)。如果您重视简单性和效率而不是准确性,这是一个很好的技巧。

于 2010-07-15T14:21:14.137 回答
3

假设您想对图像中的 r/g/b 通道值求和(并假设您可以破坏原始像素) - 这是我的部分解决方案:

  1. 每 10 个像素将计算 10 个相邻像素的平均颜色,并将此平均颜色放在图像上。
  2. 然后在CPU端和
    像素值*10
    每 10 个像素。

在这种情况下,与仅在 CPU 端求和像素值相比,我们得到了大约 10 倍的加速。

于 2010-09-01T08:36:06.183 回答
-1

WPF 中的效果更适合产生视觉效果。听起来您想将它们用于不同类型的计算,为此您需要将图像结果视为数据,这将需要 RenderTargetBitmap 无论如何都将在软件中完成。您可能想查看这些专为 GPGPU 设计的项目。

加速器

OpenTK我不知道 OpenTK 中 OpenCL 绑定的状态。DirectCompute 和 CUDA 等其他技术可能也值得一看。

于 2010-06-02T17:56:12.870 回答