2

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

  1. 相机位于原点并向下注视负 z 轴。
  2. 深度缓冲区清除为默认值 1.0,具有较低 Z 值的像素通过可见性测试以显示在屏幕上。

虽然我了解深度缓冲区的概念,但我不明白为了通过深度缓冲区测试,如何确定小于另一个 Z 的 Z 值“位于”较高Z 值的“前面”。

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

4

2 回答 2

1

模型视图转换之后,所有点都位于“视图坐标”中,其中相机位于原点,向下看 -z 轴。然后这些点通过投影变换,然后位于“剪辑坐标”中,此处 z 值映射到范围 [-1,+1]。近平面上的点的 z 值为 -1, 远平面上的点的 z 值为 +1。

这适用于所有预测。管道期望所有坐标值在裁剪和透视分割后都在 [-1,+1] 范围内——这里的点是标准化的设备坐标。

于 2013-03-03T16:19:44.383 回答
1

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

这意味着在绘制形状的像素时,如果其 Z 值低于当前值,则它比之前的位置更靠近眼睛(没有或只是另一个像素),因此更新 Z 并绘制像素。否则像素被丢弃。

于 2013-03-03T01:12:44.423 回答