2013-05-30 70 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