在屏幕上点Unprojecting一个回到一个等距投影世界
-
06-09-2019 - |
题
我而在我的2D等距引擎渲染的世界做一个幕后的三维仿真。我从来没有做过的等距发动机之前,我的矩阵数学是一般的生疏,所以我有问题。
我有一个投影矩阵,它在它的最简单的形式是这样的:
0.7 0.35 0
0 -0.87 0
-0.71 0.35 1
一对夫妇的迹象弹起,因为我的发动机坐标系是在左上角0,0,与+ X向右/东部和+ Z到南部。
现在,那逆是:
1.4080 0.5670 0.0000
0.0000 -1.1490 0.0000
1.0000 0.8050 1.0000
现在,这些矩阵的大多强>的工作。
例如
<强> WC:强> 500,0,500 = <强>屏幕:强> -1.44,350,500(X和Y是正确的)
<强> WC:强> 0,0,500 = <强>屏幕:强> -355,175,500(X和Y是正确再次)
不过,现在如果你需要走另一条路,你不再有方便的Z值,所以
<强>屏幕:强> -1.44,350,0 = <强> WC:强> -2,-402.97,0(。因此,垃圾)
和其它更多的 - 只要我不再有Z值,我不能从屏幕COORDS检索世界COORDS
有什么解决办法吗?
修改强>
我应该指出的是,unproject的一点是要获得鼠标拾取光线..
看起来这只是我自己在做什么这是我拧在这里的误解。
解决方案
当你发现,你的转换回三维空间中需要某种的Z坐标,使任何意义。
我会建议你做逆向转换的两次的。一旦与Z坐标屏幕(最接近观察者)附近,并在3D场景后面一次是用Z坐标。这两个3D点会给你一个3D线,这将占据所有的位置的“幕后黑手”是2D点。
其他提示
你不能。上投影该丢失信息的屏幕。
如果你仔细想想,有几个三维坐标得到投射到屏幕上的相同点,只知道屏幕坐标是不够的,找回原来的坐标。
[编辑] 看着你的屏幕坐标,你给他们所有的Z值0,这意味着你的投影矩阵的最后一列应该全部为零,使得该矩阵不可逆的。
在屏幕上的每个像素表示从旁观者的眼睛的线到屏幕后面的假想三维世界。你必须相交这条线与任何对象可以在世界潜伏,以获得三维坐标。