2016-08-11 99 views
0

從我自己的反覆試驗經驗來看,DirectX像素着色器似乎只運行在由DirectX呈現的某些幾何圖元邊界內的像素/片段,並且不運行於僅僅是幀的像素清晰的色彩。DirectX像素着色器在幀的每個像素上都像WPF像素着色器一樣操作嗎?

MSDN says

像素着色與頂點着色器協同工作;頂點着色器的輸出爲像素着色器提供輸入。

此鮮明對比WPF像素着色器,它們是爲框架的每個像素運行,因爲WPF不會呈現3D圖元,因此並不知道也不關心它的意思是一個幾何原始像素或清晰的像素。

因此,對於以下圖像,DirectX像素着色器只能在白色區域運行,因爲它對應於頂點着色器輸出的幾何圖元,但不是黑色區域,因爲這是純色。另一方面,WPF像素着色器將針對幀的每個像素(白色和黑色)運行。

這是理解是否正確?

+0

如果我在我的大學課程(2年前)中沒有記錯的話,那麼您同時擁有一個頂點着色器和一個像素着色器。你傳遞到頂點着色器,然後通過像素着色器,所以是在那部分你只對那個幾何體中的像素應用效果。如果你希望像素着色器能夠影響整個場景,那麼你就可以在整個場景中傳遞紋理。所以如果你仔細想一想,在這種情況下,你確實要傳遞一個正方形的幾何圖形 – Sam

回答

1

你的理解大多是正確的 - 像素着色器調用是通過繪製基元(例如三角形)觸發的。實際上,如果在第一個頂點上繪製第二個三角形,則窗口中的像素最終可能會獲得多個像素着色器調用。這被稱爲透支並且通常是應該避免的,最常用的避免方法是使用z-culling

如果要爲窗口中的每個像素觸發像素着色器,只需繪製構成「全屏四邊形」的兩個三角形,即座標(-1,-1)(1,1)。在幕後,這就是WPF實質上所做的。

+0

謝謝,這就是我一直在尋找的東西! :) – artisticdude