【发布时间】:2013-07-29 09:44:54
【问题描述】:
为了查看我的 3D 环境,我使用“真实的”3D 等距投影(XZ 平面上的平面正方形,Y 为“始终”0)。我使用了维基百科上的解释:http://en.wikipedia.org/wiki/Isometric_projection 来了解如何进行这种转换: 投影矩阵是某个最小和最大坐标之间的正交投影矩阵。 视图矩阵是两次旋转:一次围绕 Y 轴(n * 45 度),一次围绕 X 轴(arctan(sin(45 度)))。 结果看起来还可以,所以我认为我做得对。
但现在我希望能够用鼠标选择坐标。我已经通过将坐标渲染到不可见的帧缓冲区然后获取鼠标光标下的像素来获得坐标来成功实现了这一点。虽然这很好用,但我真的很想看到一个数学解决方案,因为我需要它来计算边界框、屏幕上区域的平截头体和类似的东西。
我的直觉告诉我: - 从屏幕坐标转到 2D 投影坐标(或者你怎么说,我的意思是将屏幕坐标转换为两个轴的 -1 和 +1 之间的坐标,y 倒置) - 用视图矩阵的倒数取消变换坐标。 - 是的...用投影矩阵的倒数取消转换这个坐标,但正如我的直觉所告诉的那样,这不会起作用,因为所有东西都将具有相同的 Z 坐标。
虽然在等轴测视图上所有信息都完全可用(我知道 Y 值始终为 0)。所以我应该能够将等距 2D x,y 坐标转换为计算得到的 3d (x, 0, z) 坐标,而无需使用扫描或类似的东西。
我的数学还不错,但我似乎无法掌握。
编辑:IMO。每个不同的 (x, 0, z) 坐标对应于等轴测视图中的不同 (x2, y2) 坐标。所以我应该能够简单地计算出从 (x2, y2) 到 (x, 0, z) 的方法。但是怎么做呢?
有人吗?
【问题讨论】: