Exemple #1
0
        /// <summary> Calculate a 3D position of the wrist, based on an existing tracking hardware and its location. </summary>
        /// <param name="trackedObject"></param>
        /// <param name="hardware"></param>
        /// <param name="wristPos"></param>
        /// <param name="wristRot"></param>
        /// <returns></returns>
        public virtual bool GetWristLocation(Transform trackedObject, SGCore.PosTrackingHardware hardware, out Vector3 wristPos, out Quaternion wristRot)
        {
#if UNFINISHED_FEATURES
            if (CVDataAvailable())
            {
                wristPos = SG.Util.SG_Conversions.ToUnityPosition(this.lastCVData.wristWorldPosition);
                wristRot = SG.Util.SG_Conversions.ToUnityQuaternion(this.lastCVData.wristWorldRotation);
                return(true);
            }
#endif
            if (this.lastGlove != null)
            {
                SGCore.Kinematics.Vect3D trackedPos = SG.Util.SG_Conversions.ToPosition(trackedObject.position, true);
                SGCore.Kinematics.Quat   trackedRot = SG.Util.SG_Conversions.ToQuaternion(trackedObject.rotation);

                SGCore.Kinematics.Vect3D wPos; SGCore.Kinematics.Quat wRot;
                lastGlove.GetWristLocation(trackedPos, trackedRot, hardware, out wPos, out wRot);

                wristPos = SG.Util.SG_Conversions.ToUnityPosition(wPos);
                wristRot = SG.Util.SG_Conversions.ToUnityQuaternion(wRot);
                return(true);
            }
            wristPos = trackedObject.position;
            wristRot = trackedObject.rotation;
            return(false);
        }
Exemple #2
0
        //--------------------------------------------------------------------------------------------------------
        // Tracking


        /// <summary> Calculates the 3D position of the glove hardware origin. Mostly used in representing a 3D model of the hardware. If you wish to know where the hand is; use GetWristLocation instead. </summary>
        /// <param name="trackedObject"></param>
        /// <param name="hardware"></param>
        /// <param name="wristPos"></param>
        /// <param name="wristRot"></param>
        /// <returns></returns>
        public virtual bool GetGloveLocation(Transform trackedObject, SGCore.PosTrackingHardware hardware, out Vector3 glovePos, out Quaternion gloveRot)
        {
            if (this.lastGlove != null)
            {
                SGCore.Kinematics.Vect3D trackedPos = SG.Util.SG_Conversions.ToPosition(trackedObject.position, true);
                SGCore.Kinematics.Quat   trackedRot = SG.Util.SG_Conversions.ToQuaternion(trackedObject.rotation);

                SGCore.Kinematics.Vect3D wPos; SGCore.Kinematics.Quat wRot;
                lastGlove.GetGloveLocation(trackedPos, trackedRot, hardware, out wPos, out wRot);

                glovePos = SG.Util.SG_Conversions.ToUnityPosition(wPos);
                gloveRot = SG.Util.SG_Conversions.ToUnityQuaternion(wRot);
                return(true);
            }
            glovePos = trackedObject.position;
            gloveRot = trackedObject.rotation;
            return(false);
        }
Exemple #3
0
        //-------------------------------------------------------------------------------------------------------------------------
        // Quaternion Rotations


        /// <summary> Convert a Quaternion rotation taken from SGCore into a Unity Quaternion rotation. </summary>
        /// <param name="quat"></param>
        /// <returns></returns>
        public static Quaternion ToUnityQuaternion(SGCore.Kinematics.Quat quat)
        {
            return(new Quaternion(-quat.x, -quat.z, -quat.y, quat.w));
        }