15

I know perspective division is done by dividing x,y, and z by w, to get normalized device coordinates. But I am not able to understand the purpose of doing that. Also, does it have anything to do with clipping?

4

4 回答 4

15

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

这个想法是在屏幕上投影一个点(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 一起变换为标准化的设备坐标。

于 2013-06-26T01:12:57.157 回答
7

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

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

于 2013-06-24T07:39:32.337 回答
1

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

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

于 2013-06-24T16:50:44.327 回答
0

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

于 2019-06-12T19:06:59.953 回答