Saturday, October 16, 2010

depth buffer 与 blending buffer

OpenGL 通过 depth buffer 维护最后显示在屏幕上的像素,深度上较大的像素会被较小的覆盖;blending buffer 主要是为了渲染半透明的效果,主要是为了将不同层次的能够融合在一起。两个 buffer 作用的顺序是先 depth 后 blend。

这导致了一个问题,如果我们打开了两个 buffer,那么深度测试后被遮挡的物体将被剔除,进入 blending buffer 的时候不存在 blending 的问题了。因此 blending 失效。

解决的方案是,打开 depth buffer,先画不需要 blending 的物体,然后自己计算这些半透明物体的深度,并按照深度从深到浅画出。

相关的讨论见 NeHe 的 tutorial 以及 OpenGL 官方的 FAQ

No comments: