2013-08-17 33 views
1

我讀了分層渲染,我們創建了一個2D紋理陣列(GL_TEXTURE_2D_ARRAY):如何以可視方式定義將紋理陣列附加到FBO的顏色附着點?

glActiveTexture(GL_TEXTURE0); 
glBindTexture(GL_TEXTURE_2D_ARRAY, TextureColorbufferName); 
glTexParameteri(.... 
glTexImage3D(... 

,並可以將其連接到FBO:

glGenFramebuffers(1, &FramebufferName); 
glBindFramebuffer(GL_FRAMEBUFFER, FramebufferName); 
glFramebufferTexture(GL_FRAMEBUFFER, GL_COLOR_ATTACHMENT0, TextureColorbufferName, 0); 

什麼,我覺得很難直觀地瞭解如何能一層紋理綁定到FBO中的單個顏色附着點上? Isnt顏色附件0(或任何GL_COLOR_ATTACHMENTi)本身是一個單獨的「圖像」?

的詳細信息:

閱讀紋理數組之前,這是我的FBOS

     +--------------+ 
     +-----------+| FBO object ++--------------------------------------------+ 
     |   |    +---------------------+      | 
     |   +--------------+      |      | 
     |      +       |      | 
     |      |       |      | 
     |      |       |      | 
     v      v       v      v 
+-----------------+  +-----------------+  +-----------------+  +------------------+ 
|color attachment |  |color attachment |  |depth attachment |  |stencil attachment| 
| 0   |  | 1    |  |     |  |     | 
+-----------------+  +-----------------+  +-----------------+  +------------------+ 
                       (this too) 
    (this is actually  (this is also a    (this too) 
    one texture or   texture of renderbuffer) 
    one renderbuffer) 

但理解閱讀紋理數組後,這是怎麼真的是?

      +--------------+ 
      +-----------+| FBO object ++--------------------------------------------+ 
      |   |    +---------------------+      | 
      |   +--------------+      |      | 
      |      +       |      | 
      |      |       |      | 
      |      |       |      | 
      v      v       v      v 
    +-----------------+  +-----------------+  +-----------------+  +------------------+ 
    |color attachment |  |color attachment |  |depth attachment |  |stencil attachment| 
    | 0   |  | 1    |  |     |  |     | 
    +-----+--+------+-+  +-----------------+  +-----------------+  +------------------+ 
      | |  | 
      | |  v+ 
      | v+  +----------------------------------+ 
      | +--------->+        v 
      v    |        + 
    +----------------+ +---v-------------+    | 
    |    | |     |   +---v------------+ 
    |texture array[0]| |texture array[1] |   |texture array[n]| 
    |    | |     |   |    | 
    |    | |     |   |    | 
    |    | |     |   |    | 
    +----------------+ +-----------------+   +----------------+ 

即,每個附件本身都是各種紋理的集合嗎?

這對我來說很難想像1個顏色附着點如何映射到多個紋理。

如果i從1個FBO(綁定到texture_2d_array一個)BitBlt到另一個(一個綁定到texture_2d),會發生什麼

+0

我真的不明白這個問題。它的工作原理是因爲OpenGL定義它*可以工作*。進入framebuffer綁定點的內容正是OpenGL *所說的內容之一。 –

+0

我編輯了我的問題更詳細。謝謝 – viktorzeid

回答

3

紋理是圖像的集合。您不會將紋理附加到FBO附着點;您將圖像附加到FBO附着點的紋理中。

因此,您不會將多個紋理附加到單個附着點。

Array textures只是在mipmap級別內存儲圖像數組的紋理。非數組2D紋理僅爲每個mipmap級別存儲一個圖像。立方圖貼圖爲每個mipmap存儲6個圖像。數組紋理存儲每個mipmap的用戶提供的圖像數量。

但是,您可以將layered image附加到連接點。與其他幾件事情一樣,array texture的mipmap級別是分層圖像。

從分層圖像構建的FBO可以通過幾何着色器用於layered rendering。這允許GS將特定的原始輸出傳送到分層FBO中的特定層索引。

你如何想象這取決於你。

+0

@ Nicol.As你指出[這個鏈接](https://www.opengl.org/wiki/Framebuffer_Object#Layered_Images)也是一個很好的解釋。謝謝。 – viktorzeid

相關問題