我想将我的 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
}
如果我停用其中一个,位置和旋转的调整本身就可以很好地工作。但是,如果两个调整都处于活动状态,则如果平台旋转,该位置将不再起作用。
例如,只要我不旋转位置就会很好地调整。如果我随平台旋转,相机总是朝同一个方向看。但是如果旋转位置会更糟。
有人有想法吗?