簡體   English   中英

Direct3D 11 - HLSL - 獲取頂點索引 ID

[英]Direct3D 11 - HLSL - Get vertex-index ID

在 Direct3D 11 中,我有一個用於多個三角形的頂點。 換句話說,同一個頂點被多個索引引用。 在我的 HLSL 頂點着色器中,我想知道正在處理哪個 INDEX。 有沒有辦法做到這一點? 類似於 HLSL 語義“SV_VertexID”或“SV_PrimitiveID”,但對於當前索引?

為了清楚起見,假設索引緩沖區為: Index[3]={10,11,12}; SV_VertexID(使用 ID3D11DeviceContext::DrawIndexed())將返回 10、11 和 12。但我想要 0、1、2。

頂點着色器內的計數器從 0 開始並在每次調用頂點着色器時增加,也會有所幫助。 每一幀,這個計數器都應該被重置為 0。這可能嗎?

謝謝你。

我不認為那是可能的。 根據定義,頂點着色器按頂點運行,而不是按索引運行。 所以如果兩個三角形共享一個頂點,頂點着色器很有可能只為它運行一次,而不是兩次。 第二次索引獲取此頂點時,頂點着色器的結果將從緩存(“后變換緩存”)中獲取,而不是重新運行着色器。

但是,您可以做的是使所有頂點都是唯一的。 那么你就不需要索引緩沖區了,SV_VertexID 基本上就是索引 ID(雖然它需要更多的內存)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM