Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 所有像素的高效像素着色器总和_C#_Wpf_Hlsl_Pixels_Pixel Shader - Fatal编程技术网

C# 所有像素的高效像素着色器总和

C# 所有像素的高效像素着色器总和,c#,wpf,hlsl,pixels,pixel-shader,C#,Wpf,Hlsl,Pixels,Pixel Shader,如何使用HSLS像素着色器有效地计算图像中所有像素的总和?我对Pixel Shader 2.0感兴趣,我可以将其作为WPF着色器效果调用。WPF中的效果更适合生成视觉效果。听起来您想将它们用于不同类型的计算,要做到这一点,您需要将图像结果视为数据,这需要RenderTargetBitmap,这将在软件中完成。 您可能想看看这些为GPGPU设计的项目 我不知道OpenTK中OpenCL绑定的状态。其他技术,如DirectCompute和CUDA也值得一看。有一个更简单的解决方案,不使用着色器:

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

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


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

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

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

  • 每10个像素将计算10个相邻像素的平均颜色,并将此平均颜色放在图像上
  • 然后在CPU端求和每10个像素的Pix_值*10
  • Pix_Value*10
    在这种情况下,与仅在CPU端求和像素值相比,我们可以获得大约10倍的速度。

    如何从WPF中的图像创建mipmap链,这与应用像素着色器一样快?通过使用方框过滤器将图像大小调整为1x1。谢谢。我的纹理有点退化(高精度数值FFT),使用三角形滤波器得到了非常好的结果(期望结果的正负1%),这对我来说已经足够好了。不过,框式过滤器已经过时了。你所说的“所有像素总和”是指所有R/G/B值的总和还是其他什么?不需要涉及CPU,一切都可以在GPU上完成。“低效”并没有开始描述这种方法,它甚至不考虑CPU-GPU通信的成本。1.