You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

线性深度、透视深度与正交深度的区别及viewZ差异解析

关于Three.js中投影深度与线性深度的疑问解答

为什么不同投影下viewZ对应的深度值不同?

这本质是由正交投影和透视投影的投影原理差异决定的:

  • 正交投影属于平行投影,相机前方的物体无论距离远近,屏幕上的显示大小都一致,因此视图空间的viewZ(Three.js中相机沿负Z轴看向前方,viewZ为物体在相机空间的Z坐标,值为负)到最终深度值的映射是线性关系——深度值随viewZ的变化均匀分布。
  • 透视投影模拟人眼近大远小的视觉效果,为实现这种效果,投影过程会对深度做非线性压缩:近平面附近的viewZ变化会带来更明显的深度值变化(深度精度更高),远平面附近的viewZ变化对应的深度值变化则会被大幅压缩(精度更低)。这种非线性特性导致透视投影下viewZ到深度值的映射是分式函数关系。

线性深度是不是正交深度的另一种称呼?

是的。正交投影下的深度映射本身就是线性的,所以正交深度本质就是线性深度——这也是Three.js没有单独提供viewZToLinearDepth函数的原因,viewZToOrthographicDepth的作用就是实现视图空间Z值到线性深度的转换。

结合代码的具体解释

给出的两个函数都是将视图空间的viewZ转换为[0,1]范围的深度值:

  • viewZToOrthographicDepth:公式为(viewZ + near) / (near - far),这是标准的一次线性函数,输入viewZ和输出深度值呈严格线性关系,对应线性深度(正交深度)。
  • viewZToPerspectiveDepth:公式为(near + viewZ) * far / [(far - near) * viewZ],这是分式函数,体现了透视投影的非线性深度压缩特性,输入viewZ和输出深度值是非线性关系。

内容的提问来源于stack exchange,提问作者Pershing

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 07:17:37