2013-10-21 93 views
1

我想在Open GL ES中實現Goldfeather的CSG(建設性立體幾何建模)算法。OpenGL ES中的第二深度緩衝區

我需要第二個深度緩衝區和緩衝區之間的傳輸(合併)操作。我用glCopyPixels在 「桌面」 的Open GL:從第一個緩存器

轉移到第2緩衝器從第2緩衝器

glViewport(0,0, _viewport.w, _viewport.h); 
glRasterPos2f(_viewport.w>>1,0.0F); 
glDisable(GL_STENCIL_TEST); 
glEnable(GL_DEPTH_TEST); 
glDepthMask(GL_TRUE); 
glDepthFunc(GL_ALWAYS); 
glCopyPixels(0,0,_viewport.w>>1,_viewport.h,GL_DEPTH); 

轉移至第1緩衝

glViewport(0,0, _viewport.w, _viewport.h); 
glRasterPos2f(0.0f,0.0f); 
glCopyPixels(_viewport.w>>1,0,_viewport.w>>1,_viewport.h,GL_DEPTH); 

什麼是在OpenGL glCopyPixels的substituion ES?

+0

您定位的是哪個版本的OpenGL ES?答案之一就是OpenGL ES 2.0。如果你添加了標籤:[opengl-es-2.0],如果它實際上是一個ES2問題,它會有所幫助。 –

+0

如果你可以對深度緩衝區進行紋理處理(或者已經是),那麼'glCopyTexSubImage2D'可能就是你所需要的。 – rickster

回答

0

我不認爲你可以在OpenGL ES中有第二個深度緩衝區 - gl.h只包含GL_DEPTH_ATTACHMENT,不像GL_COLOR_ATTACHMENT0和GL_COLOR_ATTACHMENT1。我不熟悉Goldfeather的算法,但我認爲你可以通過將紋理綁定到幀緩衝區的深度和顏色渲染緩衝區附着點來僞造兩個深度緩衝區,在其他深度附件中繪製所需的顏色緩衝區,然後最終將這些紋理傳遞給一個着色器,該着色器將你想要的結果繪製到屏幕上,模擬glCopyPixels調用。

+0

如果將深度信息「存儲」到紋理中,那麼以後如何使用此深度信息進行深度測試? –

+0

在Goldefeather的CSG建模中,「產品總和」應該在圖像空間中進行計算。操作在整個圖片上執行。應使用第一深度緩衝器來存儲「產品」,第二深度緩衝器應該用於存儲「和」。在這種情況下,「數字」是幾何圖元的投影,「產品」是通過模板測試創建的,「添加」是使用深度測試的合併操作。 –

+0

您將不得不重新實現想要作爲片段着色器的深度測試。這個着色器需要兩個sampler2D制服,每個buffer都有一個,你可以用它來繪製一個全屏的矩形。 –