在投影平面 z 值恒定的情况下,z 值可能有多大差异?

How different z value is possible where in projection plane z value is constant?

我们知道任何 3D 物体都可以在 2D 屏幕上看到,其中 z 坐标是恒定的,因为投影平面保持在 z_vp(任何恒定的 z 坐标)。但是当我们使用 z-buffer 算法时,我们在视图平面中使用不同的 z 值。

我的问题是,如果我在投影平面中使用不同的对象 z 值,它不应该看起来像 3D 图像吗?我的意思是图像在使用不同的 z 值后如何变成二维的?

如果您问可以存储多少可能的 z 值,这取决于您的深度缓冲区位宽,例如 24 位有 2^24 个可能的深度。通常的位宽是 16/24/32 位。然而,深度值不是线性映射而是对数映射,以便在观察到的平截头体的整个范围内具有统一的视觉细节。然而,在某些情况下,这会带来很多问题,在这种情况下,会使用线性深度缓冲区,请参阅:

二维屏幕上的深度感知是通过:

  1. lighting/shading

    所以 angle/distance 渲染面与光源和相机之间的关系也很重要(影响颜色)。最简单的光照模型是法线着色见:

    除此之外,您还可以添加更复杂的照明,还支持光衰减(光线随距离变暗)、雾、散射( or atmospheric)、聚光灯、环境反射等...

  2. 视角

    物体的比例取决于到相机的距离,这使我们的视觉能够估计已知大小物体之间的相对距离。如果物体或相机正在移动,那么这也允许对未知大小的物体进行相对距离估计。

  3. 隐藏表面移除

    这会隐藏其他对象后面的对象。这可以通过深度排序(Painter 算法)或深度缓冲来完成,在某些情况下仅通过背面剔除来完成。深度缓冲通常更合适,因为它速度更快,并且还可以处理很多交集 better/easier(但是有些东西仍然需要深度排序,例如任意透明度)。

    深度缓冲还允许检索 3D 信息,后者通常用于:

如果您对更深入的解释感兴趣,请参阅:

  • Mathematically compute a simple graphics pipeline