【发布时间】:2011-02-26 00:31:27
【问题描述】:
如何使用 HSLS 像素着色器有效地计算图像中所有像素的总和?我对 Pixel Shader 2.0 感兴趣,我可以将其作为 WPF 着色器效果调用。
【问题讨论】:
-
您所说的“所有像素的总和”是什么意思 - 它是所有 R/G/B 值的总和或不同的值?
标签: c# wpf hlsl pixels pixel-shader
如何使用 HSLS 像素着色器有效地计算图像中所有像素的总和?我对 Pixel Shader 2.0 感兴趣,我可以将其作为 WPF 着色器效果调用。
【问题讨论】:
标签: c# wpf hlsl pixels pixel-shader
WPF 中的效果更适合产生视觉效果。听起来您想将它们用于不同类型的计算,为此您需要将图像结果视为数据,这将需要 RenderTargetBitmap 无论如何都可以在软件中完成。 您可能想看看这些专为 GPGPU 设计的项目。
OpenTK 我不知道 OpenTK 中 OpenCL 绑定的状态。 DirectCompute 和 CUDA 等其他技术可能也值得一看。
【讨论】:
有一个更简单的不使用着色器的解决方案:将图像加载为纹理,创建一个 mipmap 链并读回最后一个 mipmap(1x1 像素)的值。这个技巧在游戏中广泛用于计算,例如,场景的平均亮度(为了应用 HDR 色调映射)。如果您更看重简单性和效率而不是准确性,这将是一个绝妙的技巧。
【讨论】:
假设您想对图像中的 r/g/b 通道值求和(并假设您可以破坏原始像素) - 这是我的部分解决方案:
Pix_Value*10。
在这种情况下,与仅在 CPU 端求和像素值相比,我们获得了大约 10 倍的加速。
【讨论】: