3

我已经搜索了板,以及 oculus 板和统一板。真的找不到有用的东西。

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

现在我们使用了 oculus,光线投射没有考虑 oculus 相机上使用的失真矩阵。因此,您实际上并没有对您在视觉上单击的内容投射光线。使用 Debug.DrawRay 我发现它有点偏离。可以肯定的是,我通过 OVRCameraController 上的检查器禁用了镜头校正,果然光线投射再次工作。

射线本身的计算方式与从鼠标点发射时的常用方式相同:ScreenPointToRay(Input.mousePosition);

有人知道我如何调整我的光线,使其与镜头校正一起工作吗?

干杯,戈登

4

2 回答 2

1

只需将失真矩阵与光线的向量(位置和法线)相乘,您就拥有了新的光线。我建议使用具有 4x4 矩阵和 Vec4 的齐次坐标,其中位置的分量 w = 1.0,法线的分量 w = 0.0;这样您就可以简单地相乘并完成 - 根据查找方向,您可能必须使用逆矩阵:)

于 2014-03-31T04:17:29.007 回答
0

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

我将一个游戏对象放置在与“头部”相同的位置(左眼和右眼摄像头之间)。它上面有一个脚本,可以根据鼠标移动向上/向下/向左/向右旋转。然后我暂时在上面放了一个窄锥体和高强度的聚光灯,使它看起来像一个激光笔。我想如果光线照射到物体上,同源的光线投射也应该如此。最终奏效了。

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

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

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

现在它按预期工作。光标所在的位置,就是原始光线投射命中的位置。光标现在与激光点的位置匹配。所以我去掉了光组件。完毕。

希望有一天这对其他人有所帮助。

于 2014-01-21T12:36:33.930 回答