c# - 通过畸变矩阵从鼠标转换光线

标签 c# unity3d raycasting oculus

我搜索了该板,以及 Oculus 板和 Unity 板。无法真正找到有帮助的东西。

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

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

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

有人知道如何调整我的光线以使其在启用镜头校正的情况下工作吗?

干杯, 戈登

最佳答案

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

关于c# - 通过畸变矩阵从鼠标转换光线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21118361/

相关文章:

c# - 编写一个 Task.WhenAll/WhenAny 变体,取消第一个故障/取消任务上的所有其他任务

c# - 将 MemoryStream 保存到 Azure Blob 存储

unity3d - Unity 分析器 Device.present

c# - 在 C# Unity 中获取实时视频流

c# - Unity 上的虚线弹跳

unity3d - 为什么 Collider2D.Raycast 和 Collider.Raycast 如此不同?

javascript - three.js PointCloud 中的可点击粒子

c# - 如何分离未分离的输入C#

c# - Azure Cosmos DB - 为查询提供分区键的方式有何不同?

c# - Unity 的 Android 插件给出错误