Exemplo n.º 1
0
    void OnEnable()
    {
        NpHmdResult result = NativeMethods.NpHmd_Create(out m_driftCorrHandle);

        if (result != NpHmdResult.OK || m_driftCorrHandle == IntPtr.Zero)
        {
            Debug.LogError(GetType().FullName + ": NpHmd_GetOrientationCorrection failed.", this);
            m_driftCorrHandle = IntPtr.Zero;
            this.enabled      = false;
            return;
        }
    }
Exemplo n.º 2
0
    void OnEnable()
    {
        NpHmdResult result = NativeMethods.NpHmd_Create(out m_nphmdHandle);

        if (result != NpHmdResult.OK || m_nphmdHandle == IntPtr.Zero)
        {
            Debug.LogError(GetType().FullName + ": NpHmd_Create failed.", this);
            m_nphmdHandle = IntPtr.Zero;
            this.enabled  = false;
            return;
        }

#if UNITY_2017_1_OR_NEWER
        Application.onBeforeRender += OnBeforeRender;
#endif
    }
Exemplo n.º 3
0
    void Update()
    {
        OptitrackRigidBodyState rbState = StreamingClient.GetLatestRigidBodyState(RigidBodyId);

        if (rbState != null && rbState.DeliveryTimestamp.AgeSeconds < 1.0f)
        {
            // Update position.
            this.transform.localPosition = rbState.Pose.Position;

            // Update drift correction.
            if (m_driftCorrHandle != IntPtr.Zero && m_hmdCameraObject)
            {
                NpHmdQuaternion opticalOri  = new NpHmdQuaternion(rbState.Pose.Orientation);
                NpHmdQuaternion inertialOri = new NpHmdQuaternion(m_hmdCameraObject.transform.localRotation);

                NpHmdResult result = NativeMethods.NpHmd_MeasurementUpdate(
                    m_driftCorrHandle,
                    ref opticalOri,  // const
                    ref inertialOri, // const
                    Time.deltaTime
                    );

                if (result == NpHmdResult.OK)
                {
                    NpHmdQuaternion newCorrection;
                    result = NativeMethods.NpHmd_GetOrientationCorrection(m_driftCorrHandle, out newCorrection);

                    if (result == NpHmdResult.OK)
                    {
                        this.transform.localRotation = newCorrection;
                    }
                    else
                    {
                        Debug.LogError(GetType().FullName + ": NpHmd_GetOrientationCorrection failed.", this);
                        this.enabled = false;
                        return;
                    }
                }
                else
                {
                    Debug.LogError(GetType().FullName + ": NpHmd_MeasurementUpdate failed.", this);
                    this.enabled = false;
                    return;
                }
            }
        }
    }
Exemplo n.º 4
0
    void UpdatePose()
    {
        OptitrackRigidBodyState rbState = StreamingClient.GetLatestRigidBodyState(RigidBodyId);

        if (rbState != null && rbState.DeliveryTimestamp.AgeSeconds < 1.0f)
        {
            this.transform.localPosition = rbState.Pose.Position;

            if (m_nphmdHandle != IntPtr.Zero && m_deviceInitialized)
            {
                NpHmdQuaternion inertialOri = new NpHmdQuaternion(m_hmdCameraObject.transform.localRotation);
                NpHmdQuaternion opticalOri;
                switch (RigidBodyOrientation)
                {
                case OptitrackHmdRbOrientation.NegativeZForward:
                    opticalOri = new NpHmdQuaternion(rbState.Pose.Orientation * Quaternion.Euler(0.0f, 180.0f, 0.0f));
                    break;

                case OptitrackHmdRbOrientation.PositiveZForward:
                    opticalOri = new NpHmdQuaternion(rbState.Pose.Orientation);
                    break;

                case OptitrackHmdRbOrientation.PositiveXForward:
                    opticalOri = new NpHmdQuaternion(rbState.Pose.Orientation * Quaternion.Euler(0.0f, -90.0f, 0.0f));
                    break;

                default:
                    return;
                }

                NpHmdResult result = NativeMethods.NpHmd_MeasurementUpdate(
                    m_nphmdHandle,
                    ref opticalOri,  // const
                    ref inertialOri, // const
                    Time.deltaTime
                    );

                if (result == NpHmdResult.OK)
                {
                    NpHmdQuaternion newCorrection;
                    result = NativeMethods.NpHmd_GetOrientationCorrection(m_nphmdHandle, out newCorrection);

                    if (result == NpHmdResult.OK)
                    {
                        this.transform.localRotation = newCorrection;
                    }
                    else
                    {
                        Debug.LogError(GetType().FullName + ": NpHmd_GetOrientationCorrection failed.", this);
                        this.enabled = false;
                        return;
                    }
                }
                else
                {
                    Debug.LogError(GetType().FullName + ": NpHmd_MeasurementUpdate failed.", this);
                    this.enabled = false;
                    return;
                }
            }
        }
    }