コード例 #1
0
        //Bullet callback updates Unity transform
        public override void SetWorldTransform(ref Matrix m)
        {
            UnityEngine.Vector3    position = BulletExtensionMethods.ExtractTranslationFromMatrix(ref m);
            UnityEngine.Quaternion rotation = BulletExtensionMethods.GetUnityRotationFromMatrix(ref m);

            _transform.SetPositionAndRotation(position, rotation);
        }
コード例 #2
0
        /// <summary>
        /// Directly extract a Unity Quaternion from Bullet Matrix
        /// </summary>
        /// <param name="matrix"></param>
        /// <param name="result"></param>
        public static void GetUnityRotationFromMatrix(ref Matrix matrix, out UnityEngine.Quaternion result)
        {
            var num1 = matrix.M11 + matrix.M22 + matrix.M33;

            if (num1 > 0.0f)
            {
                var num2 = Mathf.Sqrt(num1 + 1.0f);
                result.w = num2 * 0.5f;
                var num3 = 0.5f / num2;
                result.x = (matrix.M23 - matrix.M32) * num3;
                result.y = (matrix.M31 - matrix.M13) * num3;
                result.z = (matrix.M12 - matrix.M21) * num3;
            }
            else if (matrix.M11 >= matrix.M22 && matrix.M11 >= matrix.M33)
            {
                var num2 = Mathf.Sqrt(1.0f + matrix.M11 - matrix.M22 - matrix.M33);
                var num3 = 0.5f / num2;
                result.x = 0.5f * num2;
                result.y = (matrix.M12 + matrix.M21) * num3;
                result.z = (matrix.M13 + matrix.M31) * num3;
                result.w = (matrix.M23 - matrix.M32) * num3;
            }
            else if (matrix.M22 > matrix.M33)
            {
                var num2 = Mathf.Sqrt(1.0f + matrix.M22 - matrix.M11 - matrix.M33);
                var num3 = 0.5f / num2;
                result.x = (matrix.M21 + matrix.M12) * num3;
                result.y = 0.5f * num2;
                result.z = (matrix.M32 + matrix.M23) * num3;
                result.w = (matrix.M31 - matrix.M13) * num3;
            }
            else
            {
                var num2 = Mathf.Sqrt(1.0f + matrix.M33 - matrix.M11 - matrix.M22);
                var num3 = 0.5f / num2;
                result.x = (matrix.M31 + matrix.M13) * num3;
                result.y = (matrix.M32 + matrix.M23) * num3;
                result.z = 0.5f * num2;
                result.w = (matrix.M12 - matrix.M21) * num3;
            }
        }
コード例 #3
0
 /// <summary>
 /// Extract position, rotation and scale from TRS matrix.
 /// </summary>
 /// <param name="matrix">Transform matrix. This parameter is passed by reference
 /// to improve performance; no changes will be made to it.</param>
 /// <param name="localPosition">Output position.</param>
 /// <param name="localRotation">Output rotation.</param>
 /// <param name="localScale">Output scale.</param>
 public static void DecomposeMatrix(ref Matrix4x4 matrix, out UnityEngine.Vector3 localPosition, out UnityEngine.Quaternion localRotation, out UnityEngine.Vector3 localScale)
 {
     localPosition = ExtractTranslationFromMatrix(ref matrix);
     localRotation = ExtractRotationFromMatrix(ref matrix);
     localScale    = ExtractScaleFromMatrix(ref matrix);
 }
コード例 #4
0
 /// <summary>
 /// Convert a Unity Quaternion to BulletSharp
 /// </summary>
 /// <param name="q">Quaternion to be converted</param>
 /// <returns></returns>
 public static Quaternion ToBullet(this UnityEngine.Quaternion q)
 {
     return(new Quaternion(q.x, q.y, q.z, q.w));
 }