【问题标题】:Why do we need perspective division?为什么我们需要透视分割?
【发布时间】:2013-06-20 14:50:06
【问题描述】:

我知道透视分割是通过将 x、y 和 z 除以 w 来完成的,以获得标准化的设备坐标。但我无法理解这样做的目的。还有,和剪辑有关系吗?

【问题讨论】:

标签: opengl opengl-es-2.0 opengl-3


【解决方案1】:

补充一般答案的一些细节:

这个想法是在屏幕上投影一个点 (x,y,z) 以具有 (xs,ys,d)。 下图显示了 y 坐标。

我们从学校知道

tan(alpha) = ys / d = y / z

这意味着投影被计算为

ys = d*y/z = y /w

w = z / d

这足以应用投影。 但是在 OpenGL 中,您希望 (xs,ys,zs) 成为 [-1,1] 中的标准化设备坐标,是的,这与裁剪有关。

(xs,ys,zs) 的极值表示单位立方体,它之外的所有内容都将被剪裁。 因此,投影矩阵通常会考虑裁剪限制(Frustum)来进行单个变换,该变换通过透视除法同时应用投影并将投影坐标与 z 一起转换为标准化的设备坐标。

【讨论】:

  • 不应该 w = d / z 吗?
【解决方案2】:

我的意思是我们为什么需要它?

通俗地说:使透视失真起作用。在透视投影矩阵中,Z 坐标被“混合”到 W 输出分量中。所以 Z 坐标的值越小,即越靠近原点,放大的东西就越多,即在屏幕上越大。

【讨论】:

  • 事实上,最简单的透视矩阵可能只是将 z 复制到 w 中,这样当透视除法发生时,x 和 y 离相机越远越小。该视频可能对youtu.be/o1n02xKP138?t=994 有所帮助
【解决方案3】:

要真正提炼出基本概念,以及为什么运算是除法(而不是例如平方根等),请考虑两倍远的对象应该出现尺寸正好是其二分之一。通过...除法从 2 中获得 1/2。

有许多几何方法可以得出相同的结论。一张图表可以作为视觉证据,真的。

【讨论】:

    【解决方案4】:

    实际上,根据 4x4 透视矩阵的标准符号约定,视线沿“z”方向,“w”与距离比相差 1。此外,该比率虽然解释正确,但通常表示为 -z/d,其中“z”为负数(因此产生正确的比率),因为在常见的符号约定中,相机朝负的“z”方向看。 偏移1的原因需要说明。许多参考文献将原点放在图像平面而不是投影中心。使用该约定(再次使用相机沿负“z”方向观察),相似三角形图中标记为“z”的距离因此被(d-z)替换。然后将“z”替换为“w”的表达式,而不是“z/d”,(d-z)/d = [1-z/d]。对某些人来说,这些惯例可能看起来不正统,但它们在分析师中很受欢迎。

    【讨论】:

      猜你喜欢
      • 2019-06-09
      • 2021-10-06
      • 2014-06-18
      • 2017-02-26
      • 2011-04-03
      • 2017-07-27
      • 2020-09-21
      • 2020-03-09
      • 2018-12-24
      相关资源
      最近更新 更多