为什么我们需要透视划分?

时间:2013-06-24 07:00:57

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

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

4 个答案:

答案 0 :(得分:8)

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

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

enter image description here

我们从学校知道

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一起转换为规范化设备坐标。

答案 1 :(得分:3)

  

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

通俗地说:使透视扭曲工作。在透视投影矩阵中,Z坐标“混合”到W输出分量中。因此Z坐标的值越小,即离原点越近,放大的东西越多,即屏幕上的值越大。

答案 2 :(得分:1)

要真正地将它提炼到基本概念,以及为什么op是除法(而不是例如平方根或某些等),请考虑到目标为止的对象应该出现两倍大小的维度。通过......除以2获得1/2。

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

答案 3 :(得分:0)

实际上,通过4x4透视矩阵的标准符号约定,视线沿“ z”方向,“ w”与距离比相差1。同样,尽管正确解释了该比率,但通常将其表示为-z / d,其中“ z”为负(因此产生正确的比率),因为同样,在通常的符号约定中,照相机朝负的“ z”方向看。 需要说明偏移量为1的原因。许多参考文献将原点放在图像平面而不是投影中心。按照这种约定(再次使摄像机沿负的“ z”方向看),相似三角形图中标记为“ z”的距离因此被(d-z)代替。然后用“ w”代替“ z”,而不是“ z / d”,而是(d-z)/ d = [1-z / d]。在某些情况下,这些惯例可能看起来是不合常规的,但在分析家中却很受欢迎。