我正在幕后进行 3d 模拟,同时在我的 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
现在,这些矩阵 大部分 工作。
例如
卫生间: 500,0,500 = 屏幕: -1.44、350、500(X 和 Y 是正确的)
卫生间: 0,0,500 = 屏幕: -355, 175, 500(X 和 Y 再次正确)
但是,现在如果你需要走另一条路,你不再有那个方便的 Z 值,所以
屏幕: -1.44, 350, 0 = 卫生间: -2, -402.97, 0 (所以,垃圾。)
还有更多 - 一旦我不再拥有那个 Z 值,我就无法从屏幕坐标中检索世界坐标。
这里的解决方法是什么?
编辑
我应该指出,unproject 的重点是获得用于鼠标拾取的光线..
似乎只是我对自己正在做的事情的误解让我在这里搞砸了。
最佳答案
正如您所发现的,您转换回 3D 空间需要某种 Z 坐标才能有意义。
我建议你做两次逆向转换。一次在屏幕附近(最靠近观察者)使用 Z 坐标,一次在 3D 场景后面使用 Z 坐标。这两个 3D 点将为您提供一条 3D 线,它将占据该 2D 点“后面”的所有位置。
关于math - 将屏幕上的点反投影回等距投影的世界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/912418/