我通过互联网阅读,将鼠标坐标(或触摸点)转换为3D世界并进行“挑选3d元素”的正确方法是:
当我进行平移,缩放甚至Z旋转时效果很好,但在我的测试中,它在X和Y旋转时失败(可能在其他3D失真上)。我尝试了不同的Inverse和Multiply算法,但都给了我相同的结果。我做错了什么?
有关我的代码中发生的事情的更详细说明,我将尝试在此解释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免费使用。为了简化读数,它被剥离到最小。
答案 0 :(得分:0)
我看了一下你的代码,我真的不确定你讨论的这个扩展来自哪里?我所看到的只是一次旋转,仅此而已。
但是,为了从窗口空间正确转换回NDC空间,您需要考虑透视除(w
,基本上是-z_eye
)。围绕z轴的旋转永远不会改变z
坐标;另外两个轴将导致透视投影中的比例变化。
但最重要的是,窗口空间w
实际上等于1/clip_w
。
例如,如果鼠标开启(-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旋转时都会给出误报。
如果你正确地将比例改为(1 / 0.5,1 / 0.5,1 / 0.5)=(2.0,2.0,2.0)那么数学运算。