Exemple #1
0
 public static void CreateRT(ref Quaternion rotation, ref Vector3 translation, out Matrix4x4 result)
 {
     Matrix4x4ex.QuaternionToRotationMatrix(ref rotation, out result);
     result.m03 = translation.x;
     result.m13 = translation.y;
     result.m23 = translation.z;
 }
Exemple #2
0
 public static void CreateRT(ref Vector3 rotationOrigin, ref Quaternion rotation, ref Vector3 translation, out Matrix4x4 result)
 {
     Matrix4x4ex.QuaternionToRotationMatrix(ref rotation, out result);
     result.m03 = -(result.m00 * rotationOrigin.x + result.m01 * rotationOrigin.y + result.m02 * rotationOrigin.z - rotationOrigin.x) + translation.x;
     result.m13 = -(result.m10 * rotationOrigin.x + result.m11 * rotationOrigin.y + result.m12 * rotationOrigin.z - rotationOrigin.y) + translation.y;
     result.m23 = -(result.m20 * rotationOrigin.x + result.m21 * rotationOrigin.y + result.m22 * rotationOrigin.z - rotationOrigin.z) + translation.z;
 }
Exemple #3
0
 public static void CreateRotation(Vector3 rotationOrigin, Quaternion rotation, out Matrix4x4 result)
 {
     Matrix4x4ex.QuaternionToRotationMatrix(ref rotation, out result);
     result.m03 = -(result.m00 * rotationOrigin.x + result.m01 * rotationOrigin.y + result.m02 * rotationOrigin.z - rotationOrigin.x);
     result.m13 = -(result.m10 * rotationOrigin.x + result.m11 * rotationOrigin.y + result.m12 * rotationOrigin.z - rotationOrigin.y);
     result.m23 = -(result.m20 * rotationOrigin.x + result.m21 * rotationOrigin.y + result.m22 * rotationOrigin.z - rotationOrigin.z);
 }
Exemple #4
0
 public static void CreateSRT(float scaling, ref Quaternion rotation, ref Vector3 translation, out Matrix4x4 result)
 {
     Matrix4x4ex.QuaternionToRotationMatrix(ref rotation, out result);
     result.m00 *= scaling;
     result.m10 *= scaling;
     result.m20 *= scaling;
     result.m01 *= scaling;
     result.m11 *= scaling;
     result.m21 *= scaling;
     result.m02 *= scaling;
     result.m12 *= scaling;
     result.m22 *= scaling;
     result.m03  = translation.x;
     result.m13  = translation.y;
     result.m23  = translation.z;
 }
Exemple #5
0
        public static void MultiplyLeft(ref Matrix4x4 matrix1, ref Matrix4x4 matrix0)
        {
            Matrix4x4 matrix4x;

            matrix4x.m00 = matrix0.m00 * matrix1.m00 + matrix0.m01 * matrix1.m10 + matrix0.m02 * matrix1.m20 + matrix0.m03 * matrix1.m30;
            matrix4x.m01 = matrix0.m00 * matrix1.m01 + matrix0.m01 * matrix1.m11 + matrix0.m02 * matrix1.m21 + matrix0.m03 * matrix1.m31;
            matrix4x.m02 = matrix0.m00 * matrix1.m02 + matrix0.m01 * matrix1.m12 + matrix0.m02 * matrix1.m22 + matrix0.m03 * matrix1.m32;
            matrix4x.m03 = matrix0.m00 * matrix1.m03 + matrix0.m01 * matrix1.m13 + matrix0.m02 * matrix1.m23 + matrix0.m03 * matrix1.m33;
            matrix4x.m10 = matrix0.m10 * matrix1.m00 + matrix0.m11 * matrix1.m10 + matrix0.m12 * matrix1.m20 + matrix0.m13 * matrix1.m30;
            matrix4x.m11 = matrix0.m10 * matrix1.m01 + matrix0.m11 * matrix1.m11 + matrix0.m12 * matrix1.m21 + matrix0.m13 * matrix1.m31;
            matrix4x.m12 = matrix0.m10 * matrix1.m02 + matrix0.m11 * matrix1.m12 + matrix0.m12 * matrix1.m22 + matrix0.m13 * matrix1.m32;
            matrix4x.m13 = matrix0.m10 * matrix1.m03 + matrix0.m11 * matrix1.m13 + matrix0.m12 * matrix1.m23 + matrix0.m13 * matrix1.m33;
            matrix4x.m20 = matrix0.m20 * matrix1.m00 + matrix0.m21 * matrix1.m10 + matrix0.m22 * matrix1.m20 + matrix0.m23 * matrix1.m30;
            matrix4x.m21 = matrix0.m20 * matrix1.m01 + matrix0.m21 * matrix1.m11 + matrix0.m22 * matrix1.m21 + matrix0.m23 * matrix1.m31;
            matrix4x.m22 = matrix0.m20 * matrix1.m02 + matrix0.m21 * matrix1.m12 + matrix0.m22 * matrix1.m22 + matrix0.m23 * matrix1.m32;
            matrix4x.m23 = matrix0.m20 * matrix1.m03 + matrix0.m21 * matrix1.m13 + matrix0.m22 * matrix1.m23 + matrix0.m23 * matrix1.m33;
            matrix4x.m30 = matrix0.m30 * matrix1.m00 + matrix0.m31 * matrix1.m10 + matrix0.m32 * matrix1.m20 + matrix0.m33 * matrix1.m30;
            matrix4x.m31 = matrix0.m30 * matrix1.m01 + matrix0.m31 * matrix1.m11 + matrix0.m32 * matrix1.m21 + matrix0.m33 * matrix1.m31;
            matrix4x.m32 = matrix0.m30 * matrix1.m02 + matrix0.m31 * matrix1.m12 + matrix0.m32 * matrix1.m22 + matrix0.m33 * matrix1.m32;
            matrix4x.m33 = matrix0.m30 * matrix1.m03 + matrix0.m31 * matrix1.m13 + matrix0.m32 * matrix1.m23 + matrix0.m33 * matrix1.m33;
            Matrix4x4ex.CopyMatrix(ref matrix4x, out matrix1);
        }
        public void Include(ref Box3 box)
        {
            Box3 box2 = default(Box3);

            box2.Center = 0.5f * (this.Center + box.Center);
            Matrix4x4 matrix4x;

            Matrix4x4ex.CreateRotationFromColumns(ref this.Axis0, ref this.Axis1, ref this.Axis2, out matrix4x);
            Quaternion a;

            Matrix4x4ex.RotationMatrixToQuaternion(ref matrix4x, out a);
            Matrix4x4 matrix4x2;

            Matrix4x4ex.CreateRotationFromColumns(ref box.Axis0, ref box.Axis1, ref box.Axis2, out matrix4x2);
            Quaternion b;

            Matrix4x4ex.RotationMatrixToQuaternion(ref matrix4x2, out b);
            if (Quaternion.Dot(a, b) < 0f)
            {
                b.x = -b.x;
                b.y = -b.y;
                b.z = -b.z;
                b.w = -b.w;
            }
            Quaternion quaternion;

            quaternion.x = a.x + b.x;
            quaternion.y = a.x + b.y;
            quaternion.z = a.x + b.z;
            quaternion.w = a.x + b.w;
            float num = Mathfex.InvSqrt(Quaternion.Dot(quaternion, quaternion));

            quaternion.x *= num;
            quaternion.y *= num;
            quaternion.z *= num;
            quaternion.w *= num;
            Matrix4x4 matrix4x3;

            Matrix4x4ex.QuaternionToRotationMatrix(ref quaternion, out matrix4x3);
            box2.Axis0 = matrix4x3.GetColumn(0);
            box2.Axis1 = matrix4x3.GetColumn(1);
            box2.Axis2 = matrix4x3.GetColumn(2);
            Vector3 zero  = Vector3ex.Zero;
            Vector3 zero2 = Vector3ex.Zero;

            Vector3[] array = this.CalcVertices();
            for (int i = 0; i < 8; i++)
            {
                Vector3 vector = array[i] - box2.Center;
                for (int j = 0; j < 3; j++)
                {
                    float num2 = vector.Dot(box2.GetAxis(j));
                    if (num2 > zero2[j])
                    {
                        zero2[j] = num2;
                    }
                    else if (num2 < zero[j])
                    {
                        zero[j] = num2;
                    }
                }
            }
            box.CalcVertices(out array[0], out array[1], out array[2], out array[3], out array[4], out array[5], out array[6], out array[7]);
            for (int i = 0; i < 8; i++)
            {
                Vector3 vector = array[i] - box2.Center;
                for (int j = 0; j < 3; j++)
                {
                    float num2 = vector.Dot(box2.GetAxis(j));
                    if (num2 > zero2[j])
                    {
                        zero2[j] = num2;
                    }
                    else if (num2 < zero[j])
                    {
                        zero[j] = num2;
                    }
                }
            }
            for (int j = 0; j < 3; j++)
            {
                box2.Center    += 0.5f * (zero2[j] + zero[j]) * box2.GetAxis(j);
                box2.Extents[j] = 0.5f * (zero2[j] - zero[j]);
            }
            this = box2;
        }
Exemple #7
0
        public static void CreateRotationEuler(ref Vector3 eulerAngles, out Matrix4x4 matrix)
        {
            Quaternion quaternion = Quaternion.Euler(eulerAngles.x, eulerAngles.y, eulerAngles.z);

            Matrix4x4ex.QuaternionToRotationMatrix(ref quaternion, out matrix);
        }
Exemple #8
0
        public static void CreateRotationEuler(float eulerX, float eulerY, float eulerZ, out Matrix4x4 matrix)
        {
            Quaternion quaternion = Quaternion.Euler(eulerX, eulerY, eulerZ);

            Matrix4x4ex.QuaternionToRotationMatrix(ref quaternion, out matrix);
        }