1

我必须在我的 directx 应用程序中绘制像 Photoshop 这样的选择反馈。我在维基百科上遇到了一个算法来做到这一点。但是,我不确定这是否是正确的方法,特别是如果我的选择区域可以是任意几何图形。有人使用 Directx 实现它吗?非常感谢任何提示。

4

1 回答 1

2

根据我的评论,这里有一个简单的像素着色器来实现想要的结果:

float4 PS( float4 pos : SV_POSITION) : SV_Target
{
    float w = ((int)(pos.x + pos.y + t) % 8);
    return (w < 4 ? float4(0,0,0,1) : float4(1,1,1,1));
}

xy添加以产生对角条纹图案。你可以想象如下: Ify是常数并x增加 1,w也增加 1。同样适用于y。所以为了w保持不变,你必须去(x+1, y-1)(x-1, y+1)(或其他步长)。我们使用%算子来产生 8 个像素的周期性。前半段为黑色,后半段为白色。

这是一个等效但性能更高的着色器。它使用位运算而不是模数和比较。

float4 PS( float4 pos : SV_POSITION) : SV_Target
{
    int w = ((int)(pos.x + pos.y + t) & 4);
    return float4(w,w,w,1);
}
于 2013-05-31T12:05:36.317 回答