2013-10-21 92 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都有一个,你可以用它来绘制一个全屏的矩形。 –