我想知道如何将2D屏幕坐标映射到3D世界(特别是xz平面),已知如下:
-相机位置
-屏幕平面方程
-xz平面方程
我只想让鼠标悬停在上面时,在xz平面上的陆地亮起来。
非常感谢您的帮助!
谢谢!
我想知道如何将2D屏幕坐标映射到3D世界(特别是xz平面),已知如下:
-相机位置
-屏幕平面方程
-xz平面方程
我只想让鼠标悬停在上面时,在xz平面上的陆地亮起来。
非常感谢您的帮助!
谢谢!
x=y=z=0
位置(世界坐标),则世界z
坐标远离观察者(进入屏幕),投影平面平行于屏幕并在z=d
处(世界坐标;d>0
),则可以使用以下方法从世界坐标确定屏幕坐标:
xs = d * xw / zw
ys = d * yw / zw
这非常直观:距离观察者/投影平面越远的物体,其zw
越大,xs
和ys
越小,靠近xw=yw=0
和zw=+infinity
的消失点,它映射到投影平面中心的xs=ys=0
。xw
和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 / ys
所以,在这里,鉴于开始描述的设置,以及鼠标指针的屏幕坐标xs
和ys
(0,0为屏幕/窗口中心),相机和投影平面之间的距离d
以及土地平面的yw
,您可以获得鼠标指向的土地位置:
xw = xs * yw / ys
zw = d * yw / ys
当然,这些xw
和zw
位于旋转和移位后的世界坐标系中,如果您想要原始绝对坐标在土地“地图”中,您需要取消旋转和移位。