2013-03-13 208 views
0

因此,我正在阅读关于特定着色算法的论文,并且有一个部分似乎有点模糊,我想知道是否可以在此处获得建议。传递深度缓冲区

基本上它说我首先需要一个网格的3D顶点,并将其转换为窗口坐标wx,wy,wz,其中wz是深度。这部分我已经完成了。

接下来我必须测试这个窗口坐标是否“通过”深度缓冲区。

这就是它所说的,我不确定“传递”深度缓冲区是什么意思。有没有人知道这可能意味着什么,以及如何在openGL中实现这一点?

编辑:

更具体地说,我需要openGL的给我提供反馈,以特定的顶点是否未通过深度缓冲。我实际上并没有渲染这些顶点,所以如果openGL在“幕后”执行所有计算,那对我来说并不好。

+0

你在维基百科找到这个吗? http://en.wikipedia.org/wiki/Z-buffering – acrilige 2013-03-13 13:02:14

+0

是的,但它有点混乱。所以我知道我的'wz'组件是像素的深度,但我感到困惑的是显然openGL有一个内置的z缓冲区值,我可以比较我的wz术语,但我不知道如何访问该初始z值。 – user1782677 2013-03-13 13:04:36

+0

查看OpenGL管道概述,例如:http://www.opengl.org/wiki/Rendering_Pipeline_Overview#Rasterization此页面有深度测试说明。实际上,它是管道的一部分,你可以禁用或不管,但你不需要自己做这个深度测试。 – acrilige 2013-03-13 13:09:29

回答

3

深度测试是OpenGL流水线的一部分,应在片段(像素)着色器后调用。所以你不需要自己做,所有你需要做的就是正确地初始化你的投影矩阵和视口,这样你的每个顶点的Wz就被计算出来,然后插入到顶点之间。您可以配置此测试的一些属性。

这里是OpenGL的管道概述:http://www.opengl.org/wiki/Rendering_Pipeline_Overview#Rasterization 看第7章:每样加工

The depth test, if any, is performed; if it fails, then the fragment is culled and not added to the framebuffer.


你说,你要知道其中顶点通过深度测试。但深度测试仅调用片段,而不是在顶点上。因此,如果您已经有了x,y和z坐标的顶点,那么您可以检查具有相同(x,y)坐标的z坐标,并确定他们中的哪些人将赢得此深度测试...