通过失真矩阵从鼠标投射光线

时间:2014-01-14 16:16:51

标签: c# unity3d raycasting oculus

我搜索了电路板,以及眼板和统一板。真的找不到有帮助的东西。

我正在进行车辆模拟。在我们开始使用oculus之前,它只是一个常规的第一人称视角。您使用赛车轮/踏板来驱动鼠标来控制所有按钮和开关等。我们使用从屏幕上鼠标点到世界的光线投射来与车辆中的各种控件进行交互。

现在我们正在使用眼球,光线投射没有考虑眼睛相机上使用的失真矩阵。所以你实际上并没有在视觉上点击你的光线。使用Debug.DrawRay我发现它稍微偏了。可以肯定的是,我通过检查员在OVRC​​ameraController上禁用了镜头校正,确定光线投射再次正常工作。

光线本身的计算方法是从鼠标点开始时的常规方法: ScreenPointToRay(Input.mousePosition);

有人会知道如何调整我的光线,以便它可以用于镜头校正吗?

干杯, 戈登

2 个答案:

答案 0 :(得分:1)

简单地将Distortion-Matrix与Ray的矢量(位置和正常)相乘,你就拥有了新的Ray。我建议使用具有4x4矩阵和Vec4的均匀坐标,其中位置具有分量w = 1.0且法线具有w = 0.0;这样你就可以简单地相乘并完成 - 根据查找方向你可能需要使用逆矩阵:)

答案 1 :(得分:0)

好吧,我最终做的是创建一个3D光标,完全绕过失真矩阵。

我将游戏对象放在与“头部”相同的位置(左眼和右眼相机之间)。它上面有一个脚本,可根据鼠标移动上/下/左/右旋转。然后我暂时把一个带有窄锥和高强度的聚光灯放在上面,看起来像一个激光指示器。我想如果光线正在击中东西,那么同样来源的光线投射也是如此。最终工作。

然而,这并没有真正解决使用游标的问题。我尝试了一些最终不起作用的事情(没有与光/光线投射的地方对齐)。

最后我意识到我忽略了一些非常简单的事情。我降低了相机的近剪裁平面,并尽可能靠近相机放置了一个平面,同时仍然可见。然后我将它在局部y上旋转180°,这样摄像机就不会看到它,也不会阻挡光线投射。

然后我添加了一些代码,以便当光线投射击中某些东西时,它会从命中点开始第二次射线投射回到原点。在途中它必须击中飞机,这基本上是在近剪裁平面。然后我会将我的3D光标移动到该生命点。

现在它按预期工作。光标所在的位置是原始光线投射的位置。光标现在与激光点的位置匹配。然后我删除了轻组件。完成。

希望有一天能帮到别人。

相关问题