研究three.webgpu.js的代码时,我遇到了“线性深度”、“透视深度”和“正交深度”这些术语。我知道透视投影和正交投影之间存在视觉差异,但为什么viewZ
不同投影之间的值会有所不同?此外,线性深度只是正交深度的另一个名称吗?
在研究了函数viewZToOrthographicDepth
和之后viewZToPerspectiveDepth
,我注意到没有viewZToLinearDepth
函数,于是受到了启发,提出了这个问题。
const viewZToOrthographicDepth = (viewZ, near, far) => viewZ.add(near).div(near.sub(far));
const viewZToPerspectiveDepth = (viewZ, near, far) => near.add(viewZ).mul(far).div(far.sub(near).mul(viewZ));
注意:我特别指的是每种投影类型之间的深度(z)值。