在仅触及深度缓冲区的openGL中进行绘图调用

Posted

技术标签:

【中文标题】在仅触及深度缓冲区的openGL中进行绘图调用【英文标题】:Make draw call in openGL that ONLY touches the depth buffer 【发布时间】:2015-10-05 19:37:47 【问题描述】:

我不打算将深度缓冲区渲染到纹理,或者查询它的阴影或类似的东西 - 我希望基本上制作一个渲染通道,它只是在我之前用一些数据预先填充深度缓冲区其他将使用其内容的绘图调用。但是,我不希望这个“填充深度缓冲区”传递写入颜色缓冲区。

我正在使用带有非固定管道的 OpenGL 2.1(或 OpenGL ES 2)。

【问题讨论】:

【参考方案1】:

仅深度渲染通道在某些场景中并不少见。

您可以在 GL 中通过屏蔽对颜色缓冲区的所有写入来实现:glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE)。 (如果您使用其他缓冲区,如 stencil,它们也有单独的掩码。)

另一种选择是只设置glDrawBuffer(GL_NONE),但是,这在 GLES 2 中不可用。

【讨论】:

【参考方案2】:

您只能在颜色掩码设置为全 false 的情况下渲染到深度缓冲区。

https://www.opengl.org/sdk/docs/man3/xhtml/glColorMask.xml

【讨论】:

以上是关于在仅触及深度缓冲区的openGL中进行绘图调用的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL深度缓冲区不工作

许多OpenGL绘图区域交换缓冲区减速问题

在 OpenGL 中,(如何)我可以在两个深度缓冲区之间进行深度测试?

绘图调用期间 Opengl vao 中断

WebGL中Stencil Buffer的运用以及ThreeJS的实现

OpenGL单缓冲与双缓冲的区别(追加10分)