1

我想将我的 HTC Vive 相机与 SteamTracker 同步。背后的基本思想是用户站在一个平台上。SteamTracker 安装在该平台上。平台本身可以向各个方向移动,并且可以在各个轴上旋转。现在我试图否定平台的移动和旋转。

我将尝试用两张图片来解释它:

在此处输入图像描述
你可以在这里看到它一开始的样子。

在此处输入图像描述

如果现在平台向左移动,CameraRig 应该向右移动,VR 相机将始终注视目标对象(灰色)。

我对旋转也做了同样的事情。

在 Unity 中,层次结构如下所示:

-CameraRig
--位置对象
---旋转对象
----VR摄像机

我的脚本如下所示:

public GameObject positionObject;
public GameObject rotationObject;
public GameObject tracker;

private Vector3 startPosition;
private Quarternion startRotation;

void Start()
{
    startPosition = tracker.transform.localPosition;
    startRotation = tracker.transform.localRotaion;
}

void Update()
{
   // get deltas
   Vector3 deltaPosition = startPosition - tracker.transform.localPosition;
   Quarternion deltaRotation = startRotation * Quarternion.Inverse(tracker.transform.localRotation)

   // adjust position for position object
   positionObject.transform.localPosition = deltaPosition;

   // adjust rotation for rotation object
   rotationObject.transform.localRotation = deltaRotation
}

如果我停用其中一个,位置和旋转的调整本身就可以很好地工作。但是,如果两个调整都处于活动状态,则如果平台旋转,该位置将不再起作用。

例如,只要我不旋转位置就会很好地调整。如果我随平台旋转,相机总是朝同一个方向看。但是如果旋转位置会更糟。

有人有想法吗?

4

0 回答 0