透视投影 - 如何转换坐标

时间:2013-03-12 14:31:36

标签: c++ graphics 3d rasterizing

我正在研究透视预测,我偶然发现了这个概念: enter image description here

基本上它说如果我有一个点(x,y,z)我可以通过

将它投射到我的透视屏幕(相机空间)中
x' = x/z
y' = y/z
z' = f(z-n) / z(f-n)

我无法理解为什么x'= x / z或y'= y / z

3 个答案:

答案 0 :(得分:1)

一种看待这种情况的方法是,你想要做的是,与穿过观察者位置(假设在原点:0,0,0)和空间点的线相交你希望投射(P)。

因此,您可以使用P' = P * a行的等式,其中a只是标量值,求解P'.Z = 1(投影平面所在的位置)。当标量倍数为1 / P.Z时,这很简单,因此投影点为(P.X, P.Y, P.Z) * (1 / P.Z)

答案 1 :(得分:1)

几何上,这是一个类似三角形的问题。

在您的图表中,因为(x,y,x)(x',y',z')位于同一虚线上:

triangle [(0,0,0), (0,0,z), (x,y,z)]
  is similar to
triangle [(0,0,0), (0,0,z'), (x',y',z')]

这意味着相应的边具有固定的比例。而且,原始矢量与投影矢量成比例。最后,请注意,名义投影平面位于z' = 1

(x,y,z) / z   =  (x',y',z') / z'

  -> so, since z' = 1:
       x'/z' = x' = x/z
       y'/z' = y' = y/z

[警告:请注意,我的答案中的z'与问题中的出现不同。问题z' = f(z-n) / z(f-n)并不直接对应物理点:它是一个“深度值”,用于执行隐藏表面移除等操作。]

答案 2 :(得分:0)

同质坐标使我们有能力表示无穷远处的点/线。 我们向向量表示法加1。点在3d空间中的距离越远,它趋于朝光学中心移动。 笛卡尔到同质 p =(x,y)至(x,y,1) 与笛卡尔同质 (X,Y,Z)至(X / Z,Y / Z) 例如, 1.当您乘飞机旅行时,当您低头看时,似乎点不会从一个瞬间移动到另一个瞬间。距离非常大,距离= 1 /视差(两帧中同一点的漂移)。 2.尝试用Infinity代替视差,这意味着距离为0。

相关问题