2010-11-10 12 views
0

我有一個關於OpenGL渲染管道的問題。如果在具有兩種不同顏色的相同位置處有兩個頂點,則片段會得到什麼顏色?

我最近一直在閱讀有關GLSL的幾何着色器的理論。我認爲我確實瞭解如何發佈新幾何並將顏色分配給新頂點的基礎知識。但是,我不確定如果其中一個新頂點與從Vertex着色器進入的頂點具有相同的位置,則該片段將獲得什麼顏色。

考慮這個例子: 據我所知,我能夠使用頂點着色器處理單個頂點。我做了一些轉變,並將其存儲在glPosition中。此外,還可以將顏色分配給該頂點,例如,通過將其存儲到glFrontColor。作爲一個例子,我給它紅色。如果所有通道都有32位,那將是0xFFFFFFFF'00000000'00000000'00000000,對吧? 接下來,涉及幾何着色器。我想讓我的幾何着色器發出一些額外的頂點。至少其中一個與來自頂點着色器的原始頂點位於相同的位置。然而,它被賦予另一種顏色,例如,綠色。那將是0x00000000'FFFFFFFF'00000000'00000000,對吧? 遲早,在每個頂點被處理之後,就會發生光柵化。據我所知,兩個頂點都被光柵化,因此會變成非常相同的片段。所以,我們走了。該特定片段會得到什麼顏色?是否有某種自動混合,碎片變黃?或者是紅色的還是比較綠色的?

這個問題可能很愚蠢。但我不清楚這一點,並希望有人能爲我澄清這一點。

如果沒有混合(我認爲),我怎麼可能創建混合效果?

非常感謝 沃爾特

回答

0

我想他們會Z-Fighting,如果他們有X,Y和Z完全一樣的價值觀。

關於混合:

這是可編程管線分開的,所以你不必做的大部分工作在着色器吧。 首先啓用與glEnable(GL_BLEND), 混合,然後用glBlendFunc指定所需的混合功能,最常見的是glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)。 現在,頂點只需要設置爲gl_FragColor.a的Alpha值,並且它們的顏色將會混合。

2

假設你正在渲染點(這似乎是你所描述的),具有不同顏色的兩個頂點會在同一位置產生兩個片段(每個頂點一個)。最終的顏色將寫入輸出取決於每個Z值,混合函數集以及它們的處理順序(這是有效的隨機數 - 除非您執行一些額外的同步操作,否則無法按任一順序計數)東西,所以你需要設置你的混合func/Z-culling,這樣不重要)。

相關問題