2016-01-24 409 views
2

我現在正在學習framebuffers,我只是不明白Color附件的功能。我理解幀緩衝器。GL_COLOR_ATTACHMENT是做什麼用的?

什麼是第二個參數的點:

​​

爲什麼不畫任何東西到我的幀緩衝,當我將其更改爲COLOR_ATTACHMENT1?

如何通過將紋理設置爲顏色附件1來繪製幀緩衝區? 爲什麼使用多種顏色附件有用? 它是否與glActiveTexture(GL_TEXTUREi)概念一次繪製多個紋理相似?

我只是想了解更多的開放式gl。謝謝。

回答

4

是的,一個幀緩衝區可以有多個顏色附件,第二個參數控制你正在設置的是哪一個。

GLint maxAtt = 0; 
glGetIntegerv(GL_MAX_COLOR_ATTACHMENTS, &maxAtt); 

所有實現支持的最小數目是8個

要選擇哪一個緩衝區(一個或多個)要呈現給,你用glDrawBuffer()或:支持彩色附件的最大編號可查詢glDrawBuffers()。這兩個調用之間唯一的區別是第一個允許您指定一個緩衝區,而第二個支持多個緩衝區。

在你嘗試的例子,您可以通過使用渲染到GL_COLOR_ATTACHMENT1之一:

glDrawBuffer(GL_COLOR_ATTACHMENT1); 

或:

GLenum bufs[1] = {GL_COLOR_ATTACHMENT1}; 
glDrawBuffers(1, bufs); 

默認爲GL_COLOR_ATTACHMENT0,這就解釋了爲什麼你已經成功渲染附件0從來沒有使用過這個電話。繪製緩衝區列表是FBO狀態的一部分。

要生成多個顏色緩衝區的輸出,可以在片段着色器中定義多個輸出。

對於多種顏色緩衝區(通常由首字母縮略詞MRT =多個渲染目標引用)的一種流行用途是延遲着色,其中用於着色計算的內插頂點屬性存儲在初始渲染過程中的多個緩衝區中。然後使用第一遍中生成的緩衝區的屬性值,僅對第二遍中的可見像素執行實際陰影計算。例如,請參閱http://ogldev.atspace.co.uk/www/tutorial35/tutorial35.html以獲得更爲完整的解釋。

+0

它現在更有意義,謝謝。 – alanxoc3