0

我正在尝试使用两个摄像头为我的 VR 播放器开发 HUD。一个是固定相机,它指向我的 HUD 对象,深度 = 1,另一个是深度 = 0 的主相机,它跟踪 HMD 并将 HUD 覆盖在上面。

然而 Unity、SteamVR 或 OpenVR 正在强制我的相机跟踪玩家的 HMD。经过详尽的搜索后,我无法找到任何方法来阻止这种行为。然后我尝试将我所有的 HUD 对象作为我的 HUD 相机的父对象,并希望能做到最好。

这会导致所有 HUD 对象出现不希望的抖动运动:

项目层次结构:

[WorldHUD]
    |__ Container (HUD) 
        |__ Camera (eye)
            |__ TextMesh (Status) <- Is child of camera

[CameraRig]
    |__ Camera (Head) 
        |__ Camera (eye)

[SteamVR]

我相信我真的需要控制我的相机的变换,所以我可以防止它移动或阻止它跟踪玩家的 HMD。

我已尝试更新相机位置,Update()但这LateUpdate()没有任何影响。我还花了很多时间修改/调试 SteamVR 和 OVR 脚本,这些脚本没有积极的结果,而且摄像机从未停止跟踪。

我尝试在我的相机父级上使用这个建议的脚本:

否定跟踪.cs:

using UnityEngine;
using UnityEngine.VR;

public class NegateTracking : MonoBehaviour
{
    void LateUpdate()
    {
        transform.position = -InputTracking.GetLocalPosition(VRNode.CenterEye);
        transform.rotation = Quaternion.Inverse(InputTracking.GetLocalRotation(VRNode.CenterEye));
    }
}

这导致相机指向一个方向,但仍在平移。但是,我注意到这种方式似乎更加不稳定,并且觉得我要么用错了,要么还不够。

我现在又开始寻找在某些摄像机上禁用头部跟踪的方法,以便能够将它们定位在我的场景中。

有谁知道 SteamVR/OpenVR 如何控制这些相机的变换?有没有办法禁用或覆盖这种行为?

谢谢你。

4

2 回答 2

1

所以,只是花了一整夜开发一个功能性的解决方法,并组织了一个项目,该项目使用一点后期处理魔法来“欺骗”固定相机。我的想法是从自定义立体相机设置中生成两个渲染纹理,该设置由两个未跟踪的独立相机组成(允许控制位置、旋转、会聚平面、fov 等)。然后,我将这些相机的(左和右)renderTextures 传递到 OnRenderImage() 函数中“跟踪”相机之一的左眼和右眼。它比我预期的要好,所以我决定把所有东西都放在 GitHub 上,并为其他需要这样做的人写一个简短的教程。

固定式立体相机(从 GitHub 下载) 在此处输入图像描述

于 2017-07-08T15:25:21.917 回答
0

或者,您可以在 Camera 组件中更改目标显示和目标类型(为主显示)。(也可以在脚本中完成)

于 2017-07-15T02:55:40.373 回答