gpt4 book ai didi

c# - 是否可以使用着色器在两个纹理之间找到 "difference"? (XNA/HLSL)

转载 作者:行者123 更新时间:2023-11-30 15:12:31 24 4
gpt4 key购买 nike

我制作了一个简单的基于网络摄像头的应用程序,它可以检测“运动边缘”,从而绘制一个纹理,显示当前帧的像素与前一帧明显不同的地方。这是我的代码:

// LastTexture is a Texture2D of the previous frame.
// CurrentTexture is a Texture2D of the current frame.
// DifferenceTexture is another Texture2D.
// Variance is an int, default 100;

Color[] differenceData = new Color[CurrentTexture.Width * CurrentTexture.Height];
Color[] currentData = new Color[CurrentTexture.Width * CurrentTexture.Height];
Color[] lastData = new Color[LastTexture.Width * LastTexture.Height];

CurrentTexture.GetData<Color>(currentData);
LastTexture.GetData<Color>(lastData);

for (int i = 0; i < currentData.Length; i++)
{
int sumCD = ColorSum(currentData[i]); // ColorSum is the same as c.R + c.B + c.G where c is a Color.
int sumLD = ColorSum(lastData[i]);
if ((sumCD > sumLD - Variance) && (sumCD < sumLD + Variance))
differenceData[i] = new Color(0, 0, 0, 0); // If the current pixel is within the range of +/- the Variance (default: 100) variable, it has not significantly changes so is drawn black.
else
differenceData[i] = new Color(0, (byte)Math.Abs(sumCD - sumLD), 0); // This has changed significantly so is drawn a shade of green.
}

DifferenceTexture = new Texture2D(game1.GraphicsDevice, CurrentTexture.Width, CurrentTexture.Height);
DifferenceTexture.SetData<Color>(differenceData);

LastTexture = new Texture2D(game1.GraphicsDevice,CurrentTexture.Width, CurrentTexture.Height);
LastTexture.SetData<Color>(currentData);

有没有办法使用着色器将此计算卸载到 GPU(使用上述方法可以达到大约 25/26 fps,但这有点慢)?我对 HLSL 着色器的工作原理有一个基本的了解,并不期望有一个完整的解决方案,我只是想知道这是否可行以及如何从着色器获取“差异”纹理数据以及这是否真的会更快.

提前致谢。

最佳答案

您可以在像素着色器中采样两个纹理,然后将差异作为颜色值写出。如果你设置一个Render Target ,您从着色器输出的颜色信息将存储在该纹理中,而不是帧缓冲区中。

我不知道您希望看到什么样的速度提升,但我就是这样做的。

*edit - 哦,我忘了说,请注意您使用的采样类型,因为它会影响结果。如果您希望您的算法直接转换为 GPU,请首先使用点采样。

关于c# - 是否可以使用着色器在两个纹理之间找到 "difference"? (XNA/HLSL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1182158/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com