【发布时间】:2012-04-15 20:01:23
【问题描述】:
我想知道如何将 2D 屏幕坐标映射到 3D 世界(特别是 xz 平面)知道:
-相机的位置
-屏幕平面方程
-xz平面方程
我想要做的就是当我将鼠标悬停在 xz 平面上时,它会亮起。
非常感谢任何帮助!
谢谢!
【问题讨论】:
标签: 3d mapping 2d coordinates intersection
我想知道如何将 2D 屏幕坐标映射到 3D 世界(特别是 xz 平面)知道:
-相机的位置
-屏幕平面方程
-xz平面方程
我想要做的就是当我将鼠标悬停在 xz 平面上时,它会亮起。
非常感谢任何帮助!
谢谢!
【问题讨论】:
标签: 3d mapping 2d coordinates intersection
如果您的世界被旋转和移动以使相机位于x=y=z=0(世界坐标),则世界z 坐标会随着远离观察者(进入屏幕)而增加,并且投影平面与屏幕平行并且位于z=d(世界坐标;d > 0),然后您可以通过这种方式从世界坐标确定屏幕坐标:
xs = d * xw / zwys = d * yw / zw
这很直观:对象离观察者/投影平面越远,其zw 越大,xs 和ys 越小,更接近xw=yw=0 和zw=+infinity 的消失点,投影到投影平面的中心xs=ys=0。
通过重新排列上述每一项,您将得到 xw 和 zw 返回:
xw = xs * zw / dzw = d * yw / ys
现在,如果您的对象(土地)是位于某个yw 的平面,那么,好吧,那个yw 是已知的,所以您可以替换它并得到zw:
zw = d * yw / ys
找到zw后,您现在可以再次通过替换获得xw:
xw = xs * zw / d = xs * (d * yw / ys) / d = xs * yw / ys
因此,给定鼠标指针的开始和屏幕坐标xs 和ys(0,0 是屏幕/窗口中心)中描述的设置,相机和投影平面之间的距离@ 987654346@, 和陆地飞机的yw 你得到了鼠标指向的陆地点的位置:
xw = xs * yw / yszw = d * yw / ys
当然,这些xw 和zw 是在旋转和移动的世界坐标中,如果你想在土地的“地图”中获得原始绝对坐标,你可以取消旋转和取消移动它们。
这就是它的要点。
【讨论】: