cancel
Showing results for 
Search instead for 
Did you mean: 

How to set the IPD (without using the Rift Sensor) correctly?

Fuby1000
Protege
I`m trying to increase the area in which in can use my CV1. To achieve this I`ve tried to get rid of the CV1`s tracking and exchange it with data I receive from tracking my CV1 with a motion capturing system. I stream this data to Unity 3D, using a Unity 3D Plug-In, provided by the Motive developers.

I`ve already given up on the rotation though, since I`m missing to much of the CV1`s correction software. And well, the rotation is not bound to the Rift Sensor anyways and cables can be extended. 

What`s left now is the position of my CV1. I want to exchange the position tracking data the sensor delivers with that of the mocap system. This works fine (I can just turn of pos tracking using the OVRManager script on the OVRCameraRig), but while I get the position of the WHOLE HMD(or to be precise it`s center), I have no information about the IPD(eye distance), which results in divergence. 

I`ve found out that I can interact with the position of the eye anchors, so I´ve tried to add a distance of 66mm manually, but this won`t do a thing once I put the HMD on(works fine in the Unity preview though, which is confusing). The code looks like this:

trackerAnchor.localRotation = tracker.orientation;
centerEyeAnchor.localRotation = VR.InputTracking.GetLocalRotation(VR.VRNode.CenterEye);
leftEyeAnchor.localRotation = monoscopic ? centerEyeAnchor.localRotation : VR.InputTracking.GetLocalRotation(VR.VRNode.LeftEye);
rightEyeAnchor.localRotation = monoscopic ? centerEyeAnchor.localRotation : VR.InputTracking.GetLocalRotation(VR.VRNode.RightEye);

trackerAnchor.localPosition = tracker.position;
centerEyeAnchor.localPosition = VR.InputTracking.GetLocalPosition(VR.VRNode.CenterEye);
leftEyeAnchor.localPosition = VR.InputTracking.GetLocalPosition(VR.VRNode.LeftEye) + new Vector3(-0.033f, 0, 0);
rightEyeAnchor.localPosition = VR.InputTracking.GetLocalPosition(VR.VRNode.RightEye)+ new Vector3(0.033f, 0, 0);

Also I`ve tried to use the FakeTracking script provided here:
https://forums.oculus.com/community/discussion/comment/450853/#Comment_450853
But nothing seems to work. Am I missing something? Is there more to the sensor than just position and IPD?
 
Unity Version: 5.4.03f
Oculus Utilities Version: 1.9
Mocap System: Motive Body 1.9
Plug-Ins: OptiTrack Unity Plugin
1 REPLY 1

vrdaveb
Oculus Staff
If you're using the Rift's built-in rotation tracking, you can ignore the IPD and just set the head pose using OVRCameraRig.trackingSpace. Modify OnUpdatedAnchors(..) to set centerEyePose to the pose you want each frame and don't set rig.leftEyeAnchor, rightEyeAnchor, leftHandAnchor, rightHandAnchor, or trackerAnchor.