2013-07-12 49 views
2

我是全新的圖形和DX,遇到一個問題,周圍沒有人知道圖形了。對不起,如果這個問題太天真了。如何知道哪個三角形對像素的顏色有貢獻?

我使用DirectX 11來渲染網格,並且我想爲每個像素獲取一個緩衝區。這個緩衝區應該存儲爲這個像素貢獻顏色的所有三角形的鏈表(或其他結構)。

我應該操作哪種着色器或DX的哪一部分?或者簡單地說,我可以在哪裏獲得像素着色器中的三角形信息?

+0

簡單的答案是:爲您的頂點屬性添加ID(三角形中的每個頂點應具有相同的值 - 「多邊形ID」,以便它們在插值期間不會更改),並將它們通過頂點着色器傳遞給像素着色器,你可以使用它,如果你需要。 – acrilige

+0

這是出於調試目的還是您在運行時需要的東西? –

回答

0

您可以在像素着色器中寫入三角形ID,但使用硬件z緩衝區,每個像素只能捕捉一個三角形。

使用多重採樣紋理,您可以捕捉更多的三角形。這在實際情況下應該足夠了。

如果您的三角形非常小,並且其中許多三角形在一個像素內是可見的,那麼您應該考慮使用自己的隱藏表面移除算法A-Buffer

0

如果你需要它只是爲,您可以使用圖形調試器的任何調試的目的:GPUPerfStudio

    1. Visual Studio的圖形調試器
    2. 對於AMD的GPU(因爲的Visual Studio 2012集成)對於NVidia GPU:Nsight
    3. 來自DX SDK的良好的舊PIX。

    如果你需要在運行時(順便說一句,爲什麼=?))

    • 使用System-Generated ValuesVertexIDPrimitiveIDSV_VertexID精確計算原始,甚至頂點,在像素顏色作出了貢獻。這是棘手的,但可能的。
    • 另一種方法是在頂點聲明中使用某種自定義三角形ID。但要注意撲殺。
    • 您可以將最終數據從像素着色器輸出到buffer,然後從CPU讀取。
    • 所有這些問題都是DirectX中相當先進的主題。我不確定「全新的圖形和DX」編碼器是否可以解決這個問題。