在屏幕上取消投影指向等距投影的世界

Jas*_*ell 7 math 3d matrix linear-algebra isometric

我正在幕后进行3D模拟,同时在我的2d等距引擎中渲染世界.我之前从未做过等距引擎,而且我的矩阵数学一般都生锈了,所以我遇到了问题.

我有一个投影矩阵,其最简单的形式是:

 0.7       0.35     0
 0        -0.87     0
-0.71      0.35     1
Run Code Online (Sandbox Code Playgroud)

由于我的发动机坐标系在左上方为0,0,右侧/东侧为+ X,南侧为+ Z,因此会翻转几个标志.

现在,相反的是:

1.4080  0.5670   0.0000
0.0000 -1.1490   0.0000
1.0000  0.8050   1.0000
Run Code Online (Sandbox Code Playgroud)

现在,这些矩阵大多有效.

例如

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值,我就无法从屏幕坐标中找回世界坐标.

这里的解决方法是什么?

编辑

我应该指出,非项目的目的是为了获取鼠标光线.

这似乎只是我对我正在做的事情的误解,这让我搞砸了.

e.J*_*mes 8

正如您所发现的那样,您转换回3D空间需要某种Z坐标才能有意义.

我建议你做两次反向转换.一旦屏幕附近的Z坐标(最接近观察者),并且在3D场景的背面有一个Z坐标.这两个3D点将为您提供3D线,这将占据2D点"后面"的所有位置.