2013-05-30 34 views
0

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

+0

您可以计算像素着色器中的图案并将边框绘制为线条。只需将偏移参数't'传递给着色器并使用像素的屏幕坐标。 't'会每隔一段时间增加一次以使边框动起来。 –

回答

0

基于这里我的意见是一个简单的像素着色器来实现想要的结果:

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被添加到产生斜条纹图案。你可以想象如下:如果y是恒定的,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); 
} 
+0

谢谢,但如何做一个位图掩码(不仅仅是rects和贝塞尔)?你能解释一下吗? – Aarkan

+0

只需使用上述像素着色器查找蒙版的轮廓并将其绘制为线条即可。或者你的意思是不同的? –

+0

你能解释一下这个着色器吗?你为什么要把x和y加在一起,然后和4一起做? – Aarkan