math - 将屏幕上的点反投影回等距投影的世界

标签 math 3d linear-algebra matrix isometric

我正在幕后进行 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/

相关文章:

algorithm - 径向扫描的实现

java - 用于开发进口商的示例 COLLADA 文件?

与 Matlab 函数 : Polyfit/Polyval? 等效的 Javascript 函数

c - 乘以 CHOLMOD 中的超结 L?

unity-game-engine - Mathf.Lerp 错过最终值

algorithm - 尽可能快地计算矩阵的零空间

java - 从另一个类调用方法的不同方式

javascript - gl 矩阵中四元数旋转由 phi 和 theta 代替 xyz

html - Css 变换 3d

python - 同时求解方程