2011-01-23 134 views
2

我正嘗試使用多道渲染系統在OpenGL中動態生成立方體貼圖。我正在使用的方法成功地將場景渲染爲幀緩衝區對象(使用glReadPixels進行測試)。幀緩衝區被附加到紋理,紋理的目標是GL_TEXTURE_CUBE_MAP_ARB。我已經驗證了通過使用glGetTexImage查詢綁定紋理並將內容寫入磁盤,幀緩衝區內容確實結束了紋理。在OpenGL中使用幀緩衝區對象渲染動態立方體貼圖

但是,當我綁定立方體貼圖以將其渲染到對象上時,紋理在網格上不可見。

的過程如下:

1)從GL_TEXTURE_CUBE_MAP_ARB

2解除綁定的所有紋理)綁定幀緩衝器的對象。

3)將紋理附加到幀緩衝區的目標GL_COLOR_ATTACHMENT0_EXT。我從多維數據集的正x側開始(GL_TEXTURE_CUBE_MAP_POSITIVE_X_ARB)。其他人隨後通過。

4)附加一個深度渲染緩衝區來定位幀緩衝區的GL_DEPTH_ATTACHMENT_EXT。

5)使用glDrawBuffer直接渲染到GL_COLOR_ATTACHMENT0_EXT。

6)沿適當的軸渲染場景。

7)在幀緩衝區仍然綁定的情況下,用glFramebufferTexture2DEXT分離紋理。

8)取消綁定幀緩衝區並使用glDrawBuffer將渲染重定向到GL_BACK。

9)對立方體貼圖所有面重複步驟1-8。

10)綁定最終的立方體貼圖紋理並渲染最終場景。 GLSL着色器用於計算紋理座標。

該技術基於可用註釋here。這樣迄今採取

調試步驟:)

予加載從磁盤的靜態立方體地圖來測試着色器。它按預期工作。 II)在前6遍中使用glReadPixels查詢幀緩衝區的內容。場面似乎應該如此。三)在渲染完成後使用glGetTexImage複製立方體貼圖的內容。將內容作爲圖像文件寫入磁盤。立方體的各個方面都應該出現。

我只能斷定幀緩衝區/紋理正在呈現 - 正確。無論出於何種原因,我都無法將最終的紋理顯示在最終的網格上。紋理在最終渲染過程之前肯定會綁定,並且GL_TEXTURE_CUBE_MAP_ARB已啓用。

正如上面概述的過程中所述,紋理在幀緩衝區呈現之前未被綁定,以避免讀/寫衝突。類似地,出於同樣的原因,紋理在每次傳遞之後都從幀緩衝區分離。

起初我擔心我重新使用GL_COLOR_ATTACHMENT0_EXT引發了問題。現在看起來似乎不太可能在我的調試過程的第三步。此外,我在互聯網論壇上發現了人們在做同樣的事情時沒有問題的參考資料。

這發生在NVIDIA 9400M(Mac OS X)上。 OpenGL擴展查看器報告我擁有執行此操作所需的所有擴展。

任何可能導致這種情況的洞察力是值得讚賞的。

回答

2

不是在6分鐘後自行產生我自己的答案。在我的辯護中,原因有點奇怪。

在程序的其他地方,我啓用了GL_GENERATE_MIPMAP_SGIS,這是負責生成mipmap的擴展。我忽略了在調用glFramebufferTexture2DEXT時指定mipmap LOD。

看起來像這兩件事合併在最後通過禁用紋理。渲染立方體貼圖時關閉GL_GENERATE_MIPMAP_SGIS,可解決問題。

乾杯。

相關問題