private static void StorePose(Passer.CVRSystem system, Passer.HmdMatrix34_t pose, uint sensorID) { Matrix4x4 m = new Matrix4x4(); m.m00 = pose.m0; m.m01 = pose.m1; m.m02 = -pose.m2; m.m03 = pose.m3; m.m10 = pose.m4; m.m11 = pose.m5; m.m12 = -pose.m6; m.m13 = pose.m7; m.m20 = -pose.m8; m.m21 = -pose.m9; m.m22 = pose.m10; m.m23 = -pose.m11; m.m30 = 0; m.m31 = 0; m.m32 = 0; m.m33 = 0; sensorStates[sensorID].position = GetPosition(m); sensorStates[sensorID].rotation = GetRotation(m); sensorStates[sensorID].deviceClass = system.GetTrackedDeviceClass(sensorID); }
public static void Update() { Passer.CVRCompositor compositor = Passer.OpenVR.Compositor; Passer.CVRSystem system = Passer.OpenVR.System; if (compositor != null) { status = Status.Present; Passer.TrackedDevicePose_t[] renderPoseArray = new Passer.TrackedDevicePose_t[16]; Passer.TrackedDevicePose_t[] gamePoseArray = new Passer.TrackedDevicePose_t[16]; compositor.GetLastPoses(renderPoseArray, gamePoseArray); for (uint i = 0; i < renderPoseArray.Length; i++) { if (!sensorStates[i].present && renderPoseArray[i].bDeviceIsConnected) { // Detected new sensor onNewSensor(i); } sensorStates[i].present = renderPoseArray[i].bDeviceIsConnected; if (renderPoseArray[i].bPoseIsValid) { sensorStates[i].confidence = (renderPoseArray[i].eTrackingResult == Passer.ETrackingResult.Running_OK) ? 1 : 0; StorePose(system, renderPoseArray[i].mDeviceToAbsoluteTracking, i); status = Status.Tracking; } else { sensorStates[i].confidence = 0; } } } }