0

所以我正在阅读一篇关于特定着色算法的论文,其中有一个部分似乎有点模糊,我想知道我是否可以在这里得到建议。

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

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

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

编辑:

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

4

1 回答 1

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 坐标,并决定他们中的谁将赢得这个深度测试......

于 2013-03-13T14:03:08.970 回答