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值,我就无法从屏幕坐标中找回世界坐标.
这里的解决方法是什么?
编辑
我应该指出,非项目的目的是为了获取鼠标光线.
这似乎只是我对我正在做的事情的误解,这让我搞砸了.
正如您所发现的那样,您转换回3D空间需要某种Z坐标才能有意义.
我建议你做两次反向转换.一旦屏幕附近的Z坐标(最接近观察者),并且在3D场景的背面有一个Z坐标.这两个3D点将为您提供3D线,这将占据2D点"后面"的所有位置.