深度缓冲区和Z轴

时间:2013-03-03 01:03:58

标签: graphics opengl-es 3d depth-buffer

我正在阅读一本OpenGl书,其中指出了两个看似矛盾的陈述:

  1. 摄像机位于原点并沿z轴负向凝视。
  2. 深度缓冲区清除为默认值1.0,Z值较低的像素通过可见性测试以显示在屏幕上。
  3. 虽然我理解深度缓冲的概念,但我不明白为了传递的目的,一个小于另一个的Z如何被确定为更高的 Z值的“前面”深度缓冲测试。

    我希望更高的Z值“在前面”,从而赢得深度缓冲比较。我在这里缺少什么?

2 个答案:

答案 0 :(得分:1)

Z缓冲区中的值在[0.0,1.0]范围内,而1.0是实际包含在平截头体中的距离越远(超出的范围不可见)。

这意味着当绘制一个形状的像素时,如果它的Z值低于当前的那个,它比那里的东西(没有或只是另一个像素)更接近眼睛,所以Z更新并且像素绘制。否则,像素将被丢弃。

答案 1 :(得分:1)

模型 - 视图转换之后,所有点都在"视图坐标"相机位于原点,俯视-z轴。然后这些点通过投影变换,然后进入"剪辑坐标"这里z值映射到范围[-1,+ 1]。 近平面上的点最终将为z值-1并指向 远平面平面,最终的z值为+1。

所有预测都是如此。管道要求剪切和透视分割后所有坐标值都在[-1,+ 1]范围内 - 这里的点在规范化设备坐标中。