【发布时间】:2015-08-22 16:43:16
【问题描述】:
我通过互联网了解到,将鼠标坐标(或触摸点)转换为 3D 世界并进行“选择 3d 元素”的正确方法是:
- 模型、视图和投影相乘
- 计算逆矩阵
- 将鼠标坐标存储在具有 [-1,+1] 范围的 Vector 中
- 将鼠标向量与矩阵相乘
- 检查坐标作为碰撞检查(在我的例子中,我检查 x 和 y 何时在 [-1, +1] 之间)
当我进行平移、缩放甚至 Z 旋转时,它运行良好,但在我的测试中,它在 X 和 Y 旋转(可能还有其他 3D 扭曲)上失败。我尝试了不同的逆和乘法算法,但都给了我相同的结果。我做错了什么?
有关我的代码中发生的事情的更详细说明,我将尝试在此处解释这 5 个步骤中发生的事情:
最初我有 [-1, +1] 鼠标坐标,当我进行缩放时,我发现标准化的鼠标坐标应该除以缩放值。例如,如果鼠标在 (-0.8, 0.3) 上且矩阵的缩放比例为 0.5, 0.5, 0.5,则鼠标矢量的结果应该是 (-1.6, 0.6) 且没有碰撞点。有了这个,我有了使用逆矩阵的想法。之后我尝试了 X 和 Y 的旋转,从 2D 的角度来看,它与缩放相同:在 X 和 Y 上给出 PI/2,模型看起来像缩放了 0.5。但是将倒置矩阵与向量相乘得到 (-0.4, 0.15) 作为结果,每次使用 X/Y 旋转时都会给我一个误报。
如果您想深入了解我的问题,请随时download and try my code。为了简化阅读,它被精简到最低限度。
【问题讨论】: