将2D屏幕坐标未投影到3D坐标

时间:2012-04-02 06:22:11

标签: 3d mapping 2d coordinates intersection

我想知道如何将2D屏幕坐标映射到3D世界(特别是xz平面)知道:

- 相机的位置

- 屏幕平面的等式

- xz平面的等式

当我将鼠标悬停在xz平面上时,我想做的就是点亮它。

非常感谢任何帮助!

谢谢!

1 个答案:

答案 0 :(得分:5)

如果你的世界被旋转和移动使得相机处于x=y=z=0(世界坐标),则世界z坐标会远离观察者(进入屏幕),并且投影平面是与屏幕平行且位于z=d(世界坐标; d > 0),然后您通过这种方式从世界坐标确定屏幕坐标:

xs = d * xw / zw
ys = d * yw / zw

这非常直观:物体离观察者/投影平面越远,其zw越大,xsys越小,越接近{{}的消失点1}}和xw=yw=0,投影到投影平面zw=+infinity的中心。

通过重新排列上述每一项,您可以获得xs=ys=0xw

zw
xw = xs * zw / d

现在,如果您的对象(陆地)是某个zw = d * yw / ys的平面,那么,yw已知,那么您可以替换它并获取yw

zw

找到zw = d * yw / ys后,您现在可以再次获得zw替换:

xw

所以,在那里,给定开头描述的设置和鼠标指针的屏幕坐标xw = xs * zw / d = xs * (d * yw / ys) / d = xs * yw / ysxs(0,0是屏幕/窗口中心),摄像机和投影平面ys和地平面的d你得到鼠标指向的陆地位置:

yw
xw = xs * yw / ys

当然,这些zw = d * yw / ysxw位于旋转和移位的世界坐标中,如果您想要土地“地图”中的原始绝对坐标,则可以取消旋转和取消改变他们。

这就是它的要点。