示例#1
0
        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);
        }
示例#2
0
        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;
                    }
                }
            }
        }