所以我正在阅读一篇关于特定着色算法的论文,有一节看起来有点模糊,我想知道我是否可以在这里得到建议。
基本上它说我首先必须采用网格的3D顶点并将其转换为窗口坐标wx,wy,wz,其中wz是深度。这部分我已经完成了。
接下来我必须测试这个窗口坐标是否“通过”深度缓冲区。
这就是它说的全部,我不确定通过“传递”深度缓冲区意味着什么。这里有没有人知道这可能意味着什么以及我如何在openGL中实现它?
编辑:
更具体地说,我需要openGL来向我提供关于特定顶点是否通过深度缓冲区的反馈。我实际上并没有渲染这些顶点,所以如果openGL在幕后完成所有计算,那对我来说就不好了。
答案 0 :(得分: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坐标,并确定它们将赢得此深度测试......