You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1412 lines
72 KiB
1412 lines
72 KiB
3 years ago
|
using System;
|
||
|
using System.Globalization;
|
||
|
|
||
|
namespace UnityEngine
|
||
|
{
|
||
|
[Serializable]
|
||
|
public struct Matrix4x4: IEquatable<Matrix4x4>
|
||
|
{
|
||
|
public static readonly Matrix4x4 identity = new Matrix4x4(1f, 0.0f, 0.0f, 0.0f, 0.0f, 1f, 0.0f, 0.0f, 0.0f, 0.0f, 1f, 0.0f, 0.0f, 0.0f, 0.0f, 1f);
|
||
|
public float m00;
|
||
|
public float m01;
|
||
|
public float m02;
|
||
|
public float m03;
|
||
|
public float m10;
|
||
|
public float m11;
|
||
|
public float m12;
|
||
|
public float m13;
|
||
|
public float m20;
|
||
|
public float m21;
|
||
|
public float m22;
|
||
|
public float m23;
|
||
|
public float m30;
|
||
|
public float m31;
|
||
|
public float m32;
|
||
|
public float m33;
|
||
|
|
||
|
public bool isIdentity
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return this.m00 == 1f && this.m11 == 1f && this.m22 == 1f && this.m33 == 1f && // Check diagonal element first for early out.
|
||
|
this.m12 == 0.0f && this.m13 == 0.0f && this.m13 == 0.0f && this.m21 == 0.0f && this.m23 == 0.0f && this.m23 == 0.0f && this.m31 == 0.0f && this.m32 == 0.0f && this.m33 == 0.0f;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Vector3 up
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
Vector3 vector3;
|
||
|
vector3.x = this.m01;
|
||
|
vector3.y = this.m11;
|
||
|
vector3.z = this.m21;
|
||
|
return vector3;
|
||
|
}
|
||
|
set
|
||
|
{
|
||
|
this.m01 = value.x;
|
||
|
this.m11 = value.y;
|
||
|
this.m21 = value.z;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Vector3 down
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
Vector3 vector3;
|
||
|
vector3.x = -this.m01;
|
||
|
vector3.y = -this.m11;
|
||
|
vector3.z = -this.m21;
|
||
|
return vector3;
|
||
|
}
|
||
|
set
|
||
|
{
|
||
|
this.m01 = -value.x;
|
||
|
this.m11 = -value.y;
|
||
|
this.m21 = -value.z;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Vector3 right
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
Vector3 vector3;
|
||
|
vector3.x = this.m00;
|
||
|
vector3.y = this.m10;
|
||
|
vector3.z = this.m20;
|
||
|
return vector3;
|
||
|
}
|
||
|
set
|
||
|
{
|
||
|
this.m00 = value.x;
|
||
|
this.m10 = value.y;
|
||
|
this.m20 = value.z;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Vector3 left
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
Vector3 vector3;
|
||
|
vector3.x = -this.m00;
|
||
|
vector3.y = -this.m10;
|
||
|
vector3.z = -this.m20;
|
||
|
return vector3;
|
||
|
}
|
||
|
set
|
||
|
{
|
||
|
this.m00 = -value.x;
|
||
|
this.m10 = -value.y;
|
||
|
this.m20 = -value.z;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Vector3 forward
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
Vector3 vector3;
|
||
|
vector3.x = -this.m02;
|
||
|
vector3.y = -this.m12;
|
||
|
vector3.z = -this.m22;
|
||
|
return vector3;
|
||
|
}
|
||
|
set
|
||
|
{
|
||
|
this.m02 = -value.x;
|
||
|
this.m12 = -value.y;
|
||
|
this.m22 = -value.z;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Vector3 back
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
Vector3 vector3;
|
||
|
vector3.x = this.m02;
|
||
|
vector3.y = this.m12;
|
||
|
vector3.z = this.m22;
|
||
|
return vector3;
|
||
|
}
|
||
|
set
|
||
|
{
|
||
|
this.m02 = value.x;
|
||
|
this.m12 = value.y;
|
||
|
this.m22 = value.z;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public unsafe float this[int row, int col]
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
fixed (float* numPtr = &this.m00)
|
||
|
return numPtr[row * 4 + col];
|
||
|
}
|
||
|
set
|
||
|
{
|
||
|
fixed (float* numPtr = &this.m00)
|
||
|
numPtr[row * 4 + col] = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public unsafe float this[int index]
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
fixed (float* numPtr = &this.m00)
|
||
|
return numPtr[index];
|
||
|
}
|
||
|
set
|
||
|
{
|
||
|
fixed (float* numPtr = &this.m00)
|
||
|
numPtr[index] = value;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public Vector4 GetRow(int index)
|
||
|
{
|
||
|
Vector4 vector4;
|
||
|
vector4.x = this[index, 0];
|
||
|
vector4.y = this[index, 1];
|
||
|
vector4.z = this[index, 2];
|
||
|
vector4.w = this[index, 3];
|
||
|
return vector4;
|
||
|
}
|
||
|
|
||
|
public void SetRow(int index, Vector4 value)
|
||
|
{
|
||
|
this[index, 0] = value.x;
|
||
|
this[index, 1] = value.y;
|
||
|
this[index, 2] = value.z;
|
||
|
this[index, 3] = value.w;
|
||
|
}
|
||
|
|
||
|
public Vector4 GetColumn(int index)
|
||
|
{
|
||
|
Vector4 vector4;
|
||
|
vector4.x = this[0, index];
|
||
|
vector4.y = this[1, index];
|
||
|
vector4.z = this[2, index];
|
||
|
vector4.w = this[3, index];
|
||
|
return vector4;
|
||
|
}
|
||
|
|
||
|
public void SetColumn(int index, Vector4 value)
|
||
|
{
|
||
|
this[0, index] = value.x;
|
||
|
this[1, index] = value.y;
|
||
|
this[2, index] = value.z;
|
||
|
this[3, index] = value.w;
|
||
|
}
|
||
|
|
||
|
public Matrix4x4(
|
||
|
float m00, float m01, float m02, float m03, float m10, float m11, float m12, float m13, float m20, float m21, float m22, float m23,
|
||
|
float m30, float m31, float m32, float m33)
|
||
|
{
|
||
|
this.m00 = m00;
|
||
|
this.m01 = m01;
|
||
|
this.m02 = m02;
|
||
|
this.m03 = m03;
|
||
|
this.m10 = m10;
|
||
|
this.m11 = m11;
|
||
|
this.m12 = m12;
|
||
|
this.m13 = m13;
|
||
|
this.m20 = m20;
|
||
|
this.m21 = m21;
|
||
|
this.m22 = m22;
|
||
|
this.m23 = m23;
|
||
|
this.m30 = m30;
|
||
|
this.m31 = m31;
|
||
|
this.m32 = m32;
|
||
|
this.m33 = m33;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 CreateTranslation(Vector3 position)
|
||
|
{
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = 1f;
|
||
|
matrix44.m01 = 0.0f;
|
||
|
matrix44.m02 = 0.0f;
|
||
|
matrix44.m03 = position.x;
|
||
|
matrix44.m10 = 0.0f;
|
||
|
matrix44.m11 = 1f;
|
||
|
matrix44.m12 = 0.0f;
|
||
|
matrix44.m13 = position.y;
|
||
|
matrix44.m20 = 0.0f;
|
||
|
matrix44.m21 = 0.0f;
|
||
|
matrix44.m22 = 1f;
|
||
|
matrix44.m23 = position.z;
|
||
|
matrix44.m30 = 0.0f;
|
||
|
matrix44.m31 = 0.0f;
|
||
|
matrix44.m32 = 0.0f;
|
||
|
matrix44.m33 = 1f;
|
||
|
return matrix44;
|
||
|
}
|
||
|
|
||
|
public Matrix4x4 inverse
|
||
|
{
|
||
|
get
|
||
|
{
|
||
|
return Matrix4x4.Invert(this);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
public static void CreateTranslation(ref Vector3 position, out Matrix4x4 matrix)
|
||
|
{
|
||
|
matrix.m00 = 1f;
|
||
|
matrix.m01 = 0.0f;
|
||
|
matrix.m02 = 0.0f;
|
||
|
matrix.m03 = position.x;
|
||
|
matrix.m10 = 0.0f;
|
||
|
matrix.m11 = 1f;
|
||
|
matrix.m12 = 0.0f;
|
||
|
matrix.m13 = position.y;
|
||
|
matrix.m20 = 0.0f;
|
||
|
matrix.m21 = 0.0f;
|
||
|
matrix.m22 = 1f;
|
||
|
matrix.m23 = position.z;
|
||
|
matrix.m30 = 0.0f;
|
||
|
matrix.m31 = 0.0f;
|
||
|
matrix.m32 = 0.0f;
|
||
|
matrix.m33 = 1f;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 CreateScale(Vector3 scales)
|
||
|
{
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = scales.x;
|
||
|
matrix44.m01 = 0.0f;
|
||
|
matrix44.m02 = 0.0f;
|
||
|
matrix44.m03 = 0.0f;
|
||
|
matrix44.m10 = 0.0f;
|
||
|
matrix44.m11 = scales.y;
|
||
|
matrix44.m12 = 0.0f;
|
||
|
matrix44.m13 = 0.0f;
|
||
|
matrix44.m20 = 0.0f;
|
||
|
matrix44.m21 = 0.0f;
|
||
|
matrix44.m22 = scales.z;
|
||
|
matrix44.m23 = 0.0f;
|
||
|
matrix44.m30 = 0.0f;
|
||
|
matrix44.m31 = 0.0f;
|
||
|
matrix44.m32 = 0.0f;
|
||
|
matrix44.m33 = 1f;
|
||
|
return matrix44;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 TRS(Vector3 pos, Quaternion q, Vector3 s)
|
||
|
{
|
||
|
Matrix4x4 m1 = CreateTranslation(pos);
|
||
|
Matrix4x4 m2 = CreateFromQuaternion(q);
|
||
|
Matrix4x4 m3 = CreateScale(s);
|
||
|
return m1 * m2 * m3;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 Scale(Vector3 scales)
|
||
|
{
|
||
|
Matrix4x4 m1;
|
||
|
CreateScale(ref scales, out m1);
|
||
|
return m1;
|
||
|
}
|
||
|
|
||
|
public static void CreateScale(ref Vector3 scales, out Matrix4x4 matrix)
|
||
|
{
|
||
|
matrix.m00 = scales.x;
|
||
|
matrix.m01 = 0.0f;
|
||
|
matrix.m02 = 0.0f;
|
||
|
matrix.m03 = 0.0f;
|
||
|
matrix.m10 = 0.0f;
|
||
|
matrix.m11 = scales.y;
|
||
|
matrix.m12 = 0.0f;
|
||
|
matrix.m13 = 0.0f;
|
||
|
matrix.m20 = 0.0f;
|
||
|
matrix.m21 = 0.0f;
|
||
|
matrix.m22 = scales.z;
|
||
|
matrix.m23 = 0.0f;
|
||
|
matrix.m30 = 0.0f;
|
||
|
matrix.m31 = 0.0f;
|
||
|
matrix.m32 = 0.0f;
|
||
|
matrix.m33 = 1f;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 CreateOrthographic(float width, float height, float zNearPlane, float zFarPlane)
|
||
|
{
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = 2f / width;
|
||
|
matrix44.m10 = matrix44.m20 = matrix44.m30 = 0.0f;
|
||
|
matrix44.m11 = 2f / height;
|
||
|
matrix44.m01 = matrix44.m21 = matrix44.m31 = 0.0f;
|
||
|
matrix44.m22 = (float) (1.0 / ((double) zNearPlane - (double) zFarPlane));
|
||
|
matrix44.m02 = matrix44.m12 = matrix44.m32 = 0.0f;
|
||
|
matrix44.m03 = matrix44.m13 = 0.0f;
|
||
|
matrix44.m23 = zNearPlane / (zNearPlane - zFarPlane);
|
||
|
matrix44.m33 = 1f;
|
||
|
return matrix44;
|
||
|
}
|
||
|
|
||
|
public static void CreateOrthographic(float width, float height, float zNearPlane, float zFarPlane, out Matrix4x4 matrix)
|
||
|
{
|
||
|
matrix.m00 = 2f / width;
|
||
|
matrix.m10 = matrix.m20 = matrix.m30 = 0.0f;
|
||
|
matrix.m11 = 2f / height;
|
||
|
matrix.m01 = matrix.m21 = matrix.m31 = 0.0f;
|
||
|
matrix.m22 = (float) (1.0 / ((double) zNearPlane - (double) zFarPlane));
|
||
|
matrix.m02 = matrix.m12 = matrix.m32 = 0.0f;
|
||
|
matrix.m03 = matrix.m13 = 0.0f;
|
||
|
matrix.m23 = zNearPlane / (zNearPlane - zFarPlane);
|
||
|
matrix.m33 = 1f;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 CreateLookAt(Vector3 cameraPosition, Vector3 cameraTarget, Vector3 cameraUpVector)
|
||
|
{
|
||
|
Vector3 vector3_1 = Vector3.Normalize(cameraPosition - cameraTarget);
|
||
|
Vector3 vector3_2 = Vector3.Normalize(Vector3.Cross(cameraUpVector, vector3_1));
|
||
|
Vector3 vector1 = Vector3.Cross(vector3_1, vector3_2);
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = vector3_2.x;
|
||
|
matrix44.m10 = vector1.x;
|
||
|
matrix44.m20 = vector3_1.x;
|
||
|
matrix44.m30 = 0.0f;
|
||
|
matrix44.m01 = vector3_2.y;
|
||
|
matrix44.m11 = vector1.y;
|
||
|
matrix44.m21 = vector3_1.y;
|
||
|
matrix44.m31 = 0.0f;
|
||
|
matrix44.m02 = vector3_2.z;
|
||
|
matrix44.m12 = vector1.z;
|
||
|
matrix44.m22 = vector3_1.z;
|
||
|
matrix44.m32 = 0.0f;
|
||
|
matrix44.m03 = -Vector3.Dot(vector3_2, cameraPosition);
|
||
|
matrix44.m13 = -Vector3.Dot(vector1, cameraPosition);
|
||
|
matrix44.m23 = -Vector3.Dot(vector3_1, cameraPosition);
|
||
|
matrix44.m33 = 1f;
|
||
|
return matrix44;
|
||
|
}
|
||
|
|
||
|
public static void CreateLookAt(ref Vector3 cameraPosition, ref Vector3 cameraTarget, ref Vector3 cameraUpVector, out Matrix4x4 matrix)
|
||
|
{
|
||
|
Vector3 vector3_1 = Vector3.Normalize(cameraPosition - cameraTarget);
|
||
|
Vector3 vector3_2 = Vector3.Normalize(Vector3.Cross(cameraUpVector, vector3_1));
|
||
|
Vector3 vector1 = Vector3.Cross(vector3_1, vector3_2);
|
||
|
matrix.m00 = vector3_2.x;
|
||
|
matrix.m10 = vector1.x;
|
||
|
matrix.m20 = vector3_1.x;
|
||
|
matrix.m30 = 0.0f;
|
||
|
matrix.m01 = vector3_2.y;
|
||
|
matrix.m11 = vector1.y;
|
||
|
matrix.m21 = vector3_1.y;
|
||
|
matrix.m31 = 0.0f;
|
||
|
matrix.m02 = vector3_2.z;
|
||
|
matrix.m12 = vector1.z;
|
||
|
matrix.m22 = vector3_1.z;
|
||
|
matrix.m32 = 0.0f;
|
||
|
matrix.m03 = -Vector3.Dot(vector3_2, cameraPosition);
|
||
|
matrix.m13 = -Vector3.Dot(vector1, cameraPosition);
|
||
|
matrix.m23 = -Vector3.Dot(vector3_1, cameraPosition);
|
||
|
matrix.m33 = 1f;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 CreateFromQuaternion(Quaternion quaternion)
|
||
|
{
|
||
|
float num1 = quaternion.x * quaternion.x;
|
||
|
float num2 = quaternion.y * quaternion.y;
|
||
|
float num3 = quaternion.z * quaternion.z;
|
||
|
float num4 = quaternion.x * quaternion.y;
|
||
|
float num5 = quaternion.z * quaternion.w;
|
||
|
float num6 = quaternion.z * quaternion.x;
|
||
|
float num7 = quaternion.y * quaternion.w;
|
||
|
float num8 = quaternion.y * quaternion.z;
|
||
|
float num9 = quaternion.x * quaternion.w;
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = (float) (1.0 - 2.0 * ((double) num2 + (double) num3));
|
||
|
matrix44.m10 = (float) (2.0 * ((double) num4 + (double) num5));
|
||
|
matrix44.m20 = (float) (2.0 * ((double) num6 - (double) num7));
|
||
|
matrix44.m30 = 0.0f;
|
||
|
matrix44.m01 = (float) (2.0 * ((double) num4 - (double) num5));
|
||
|
matrix44.m11 = (float) (1.0 - 2.0 * ((double) num3 + (double) num1));
|
||
|
matrix44.m21 = (float) (2.0 * ((double) num8 + (double) num9));
|
||
|
matrix44.m31 = 0.0f;
|
||
|
matrix44.m02 = (float) (2.0 * ((double) num6 + (double) num7));
|
||
|
matrix44.m12 = (float) (2.0 * ((double) num8 - (double) num9));
|
||
|
matrix44.m22 = (float) (1.0 - 2.0 * ((double) num2 + (double) num1));
|
||
|
matrix44.m32 = 0.0f;
|
||
|
matrix44.m03 = 0.0f;
|
||
|
matrix44.m13 = 0.0f;
|
||
|
matrix44.m23 = 0.0f;
|
||
|
matrix44.m33 = 1f;
|
||
|
return matrix44;
|
||
|
}
|
||
|
|
||
|
public static void CreateFromQuaternion(ref Quaternion quaternion, out Matrix4x4 matrix)
|
||
|
{
|
||
|
float num1 = quaternion.x * quaternion.x;
|
||
|
float num2 = quaternion.y * quaternion.y;
|
||
|
float num3 = quaternion.z * quaternion.z;
|
||
|
float num4 = quaternion.x * quaternion.y;
|
||
|
float num5 = quaternion.z * quaternion.w;
|
||
|
float num6 = quaternion.z * quaternion.x;
|
||
|
float num7 = quaternion.y * quaternion.w;
|
||
|
float num8 = quaternion.y * quaternion.z;
|
||
|
float num9 = quaternion.x * quaternion.w;
|
||
|
matrix.m00 = (float) (1.0 - 2.0 * ((double) num2 + (double) num3));
|
||
|
matrix.m10 = (float) (2.0 * ((double) num4 + (double) num5));
|
||
|
matrix.m20 = (float) (2.0 * ((double) num6 - (double) num7));
|
||
|
matrix.m30 = 0.0f;
|
||
|
matrix.m01 = (float) (2.0 * ((double) num4 - (double) num5));
|
||
|
matrix.m11 = (float) (1.0 - 2.0 * ((double) num3 + (double) num1));
|
||
|
matrix.m21 = (float) (2.0 * ((double) num8 + (double) num9));
|
||
|
matrix.m31 = 0.0f;
|
||
|
matrix.m02 = (float) (2.0 * ((double) num6 + (double) num7));
|
||
|
matrix.m12 = (float) (2.0 * ((double) num8 - (double) num9));
|
||
|
matrix.m22 = (float) (1.0 - 2.0 * ((double) num2 + (double) num1));
|
||
|
matrix.m32 = 0.0f;
|
||
|
matrix.m03 = 0.0f;
|
||
|
matrix.m13 = 0.0f;
|
||
|
matrix.m23 = 0.0f;
|
||
|
matrix.m33 = 1f;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 CreateFromYawPitchRoll(float yaw, float pitch, float roll)
|
||
|
{
|
||
|
Quaternion result;
|
||
|
Quaternion.CreateFromYawPitchRoll(yaw, pitch, roll, out result);
|
||
|
return Matrix4x4.CreateFromQuaternion(result);
|
||
|
}
|
||
|
|
||
|
public static void CreateFromYawPitchRoll(float yaw, float pitch, float roll, out Matrix4x4 result)
|
||
|
{
|
||
|
Quaternion result1;
|
||
|
Quaternion.CreateFromYawPitchRoll(yaw, pitch, roll, out result1);
|
||
|
result = Matrix4x4.CreateFromQuaternion(result1);
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 CreateRotationX(float radians)
|
||
|
{
|
||
|
float num1 = (float) Math.Cos((double) radians);
|
||
|
float num2 = (float) Math.Sin((double) radians);
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = 1f;
|
||
|
matrix44.m10 = 0.0f;
|
||
|
matrix44.m20 = 0.0f;
|
||
|
matrix44.m30 = 0.0f;
|
||
|
matrix44.m01 = 0.0f;
|
||
|
matrix44.m11 = num1;
|
||
|
matrix44.m21 = num2;
|
||
|
matrix44.m31 = 0.0f;
|
||
|
matrix44.m02 = 0.0f;
|
||
|
matrix44.m12 = -num2;
|
||
|
matrix44.m22 = num1;
|
||
|
matrix44.m32 = 0.0f;
|
||
|
matrix44.m03 = 0.0f;
|
||
|
matrix44.m13 = 0.0f;
|
||
|
matrix44.m23 = 0.0f;
|
||
|
matrix44.m33 = 1f;
|
||
|
return matrix44;
|
||
|
}
|
||
|
|
||
|
public static void CreateRotationX(float radians, out Matrix4x4 result)
|
||
|
{
|
||
|
float num1 = (float) Math.Cos((double) radians);
|
||
|
float num2 = (float) Math.Sin((double) radians);
|
||
|
result.m00 = 1f;
|
||
|
result.m10 = 0.0f;
|
||
|
result.m20 = 0.0f;
|
||
|
result.m30 = 0.0f;
|
||
|
result.m01 = 0.0f;
|
||
|
result.m11 = num1;
|
||
|
result.m21 = num2;
|
||
|
result.m31 = 0.0f;
|
||
|
result.m02 = 0.0f;
|
||
|
result.m12 = -num2;
|
||
|
result.m22 = num1;
|
||
|
result.m32 = 0.0f;
|
||
|
result.m03 = 0.0f;
|
||
|
result.m13 = 0.0f;
|
||
|
result.m23 = 0.0f;
|
||
|
result.m33 = 1f;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 CreateRotationY(float radians)
|
||
|
{
|
||
|
float num1 = (float) Math.Cos((double) radians);
|
||
|
float num2 = (float) Math.Sin((double) radians);
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = num1;
|
||
|
matrix44.m10 = 0.0f;
|
||
|
matrix44.m20 = -num2;
|
||
|
matrix44.m30 = 0.0f;
|
||
|
matrix44.m01 = 0.0f;
|
||
|
matrix44.m11 = 1f;
|
||
|
matrix44.m21 = 0.0f;
|
||
|
matrix44.m31 = 0.0f;
|
||
|
matrix44.m02 = num2;
|
||
|
matrix44.m12 = 0.0f;
|
||
|
matrix44.m22 = num1;
|
||
|
matrix44.m32 = 0.0f;
|
||
|
matrix44.m03 = 0.0f;
|
||
|
matrix44.m13 = 0.0f;
|
||
|
matrix44.m23 = 0.0f;
|
||
|
matrix44.m33 = 1f;
|
||
|
return matrix44;
|
||
|
}
|
||
|
|
||
|
public static void CreateRotationY(float radians, out Matrix4x4 result)
|
||
|
{
|
||
|
float num1 = (float) Math.Cos((double) radians);
|
||
|
float num2 = (float) Math.Sin((double) radians);
|
||
|
result.m00 = num1;
|
||
|
result.m10 = 0.0f;
|
||
|
result.m20 = -num2;
|
||
|
result.m30 = 0.0f;
|
||
|
result.m01 = 0.0f;
|
||
|
result.m11 = 1f;
|
||
|
result.m21 = 0.0f;
|
||
|
result.m31 = 0.0f;
|
||
|
result.m02 = num2;
|
||
|
result.m12 = 0.0f;
|
||
|
result.m22 = num1;
|
||
|
result.m32 = 0.0f;
|
||
|
result.m03 = 0.0f;
|
||
|
result.m13 = 0.0f;
|
||
|
result.m23 = 0.0f;
|
||
|
result.m33 = 1f;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 CreateRotationZ(float radians)
|
||
|
{
|
||
|
float num1 = (float) Math.Cos((double) radians);
|
||
|
float num2 = (float) Math.Sin((double) radians);
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = num1;
|
||
|
matrix44.m10 = num2;
|
||
|
matrix44.m20 = 0.0f;
|
||
|
matrix44.m30 = 0.0f;
|
||
|
matrix44.m01 = -num2;
|
||
|
matrix44.m11 = num1;
|
||
|
matrix44.m21 = 0.0f;
|
||
|
matrix44.m31 = 0.0f;
|
||
|
matrix44.m02 = 0.0f;
|
||
|
matrix44.m12 = 0.0f;
|
||
|
matrix44.m22 = 1f;
|
||
|
matrix44.m32 = 0.0f;
|
||
|
matrix44.m03 = 0.0f;
|
||
|
matrix44.m13 = 0.0f;
|
||
|
matrix44.m23 = 0.0f;
|
||
|
matrix44.m33 = 1f;
|
||
|
return matrix44;
|
||
|
}
|
||
|
|
||
|
public static void CreateRotationZ(float radians, out Matrix4x4 result)
|
||
|
{
|
||
|
float num1 = (float) Math.Cos((double) radians);
|
||
|
float num2 = (float) Math.Sin((double) radians);
|
||
|
result.m00 = num1;
|
||
|
result.m10 = num2;
|
||
|
result.m20 = 0.0f;
|
||
|
result.m30 = 0.0f;
|
||
|
result.m01 = -num2;
|
||
|
result.m11 = num1;
|
||
|
result.m21 = 0.0f;
|
||
|
result.m31 = 0.0f;
|
||
|
result.m02 = 0.0f;
|
||
|
result.m12 = 0.0f;
|
||
|
result.m22 = 1f;
|
||
|
result.m32 = 0.0f;
|
||
|
result.m03 = 0.0f;
|
||
|
result.m13 = 0.0f;
|
||
|
result.m23 = 0.0f;
|
||
|
result.m33 = 1f;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 CreateFromAxisAngle(Vector3 axis, float angle)
|
||
|
{
|
||
|
float x = axis.x;
|
||
|
float y = axis.y;
|
||
|
float z = axis.z;
|
||
|
float num1 = (float) Math.Sin((double) angle);
|
||
|
float num2 = (float) Math.Cos((double) angle);
|
||
|
float num3 = x * x;
|
||
|
float num4 = y * y;
|
||
|
float num5 = z * z;
|
||
|
float num6 = x * y;
|
||
|
float num7 = x * z;
|
||
|
float num8 = y * z;
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = num3 + num2 * (1f - num3);
|
||
|
matrix44.m10 = (float) ((double) num6 - (double) num2 * (double) num6 + (double) num1 * (double) z);
|
||
|
matrix44.m20 = (float) ((double) num7 - (double) num2 * (double) num7 - (double) num1 * (double) y);
|
||
|
matrix44.m30 = 0.0f;
|
||
|
matrix44.m01 = (float) ((double) num6 - (double) num2 * (double) num6 - (double) num1 * (double) z);
|
||
|
matrix44.m11 = num4 + num2 * (1f - num4);
|
||
|
matrix44.m21 = (float) ((double) num8 - (double) num2 * (double) num8 + (double) num1 * (double) x);
|
||
|
matrix44.m31 = 0.0f;
|
||
|
matrix44.m02 = (float) ((double) num7 - (double) num2 * (double) num7 + (double) num1 * (double) y);
|
||
|
matrix44.m12 = (float) ((double) num8 - (double) num2 * (double) num8 - (double) num1 * (double) x);
|
||
|
matrix44.m22 = num5 + num2 * (1f - num5);
|
||
|
matrix44.m32 = 0.0f;
|
||
|
matrix44.m03 = 0.0f;
|
||
|
matrix44.m13 = 0.0f;
|
||
|
matrix44.m23 = 0.0f;
|
||
|
matrix44.m33 = 1f;
|
||
|
return matrix44;
|
||
|
}
|
||
|
|
||
|
public static void CreateFromAxisAngle(ref Vector3 axis, float angle, out Matrix4x4 result)
|
||
|
{
|
||
|
float x = axis.x;
|
||
|
float y = axis.y;
|
||
|
float z = axis.z;
|
||
|
float num1 = (float) Math.Sin((double) angle);
|
||
|
float num2 = (float) Math.Cos((double) angle);
|
||
|
float num3 = x * x;
|
||
|
float num4 = y * y;
|
||
|
float num5 = z * z;
|
||
|
float num6 = x * y;
|
||
|
float num7 = x * z;
|
||
|
float num8 = y * z;
|
||
|
result.m00 = num3 + num2 * (1f - num3);
|
||
|
result.m10 = (float) ((double) num6 - (double) num2 * (double) num6 + (double) num1 * (double) z);
|
||
|
result.m20 = (float) ((double) num7 - (double) num2 * (double) num7 - (double) num1 * (double) y);
|
||
|
result.m30 = 0.0f;
|
||
|
result.m01 = (float) ((double) num6 - (double) num2 * (double) num6 - (double) num1 * (double) z);
|
||
|
result.m11 = num4 + num2 * (1f - num4);
|
||
|
result.m21 = (float) ((double) num8 - (double) num2 * (double) num8 + (double) num1 * (double) x);
|
||
|
result.m31 = 0.0f;
|
||
|
result.m02 = (float) ((double) num7 - (double) num2 * (double) num7 + (double) num1 * (double) y);
|
||
|
result.m12 = (float) ((double) num8 - (double) num2 * (double) num8 - (double) num1 * (double) x);
|
||
|
result.m22 = num5 + num2 * (1f - num5);
|
||
|
result.m32 = 0.0f;
|
||
|
result.m03 = 0.0f;
|
||
|
result.m13 = 0.0f;
|
||
|
result.m23 = 0.0f;
|
||
|
result.m33 = 1f;
|
||
|
}
|
||
|
|
||
|
public void Decompose(out Vector3 scale, out Quaternion rotation, out Vector3 translation)
|
||
|
{
|
||
|
Matrix4x4 identity = Matrix4x4.identity;
|
||
|
float num1 = 1f / (float) Math.Sqrt((double) this[0, 0] * (double) this[0, 0] + (double) this[1, 0] * (double) this[1, 0] +
|
||
|
(double) this[2, 0] * (double) this[2, 0]);
|
||
|
identity[0, 0] = this[0, 0] * num1;
|
||
|
identity[1, 0] = this[1, 0] * num1;
|
||
|
identity[2, 0] = this[2, 0] * num1;
|
||
|
float num2 = (float) ((double) identity[0, 0] * (double) this[0, 1] + (double) identity[1, 0] * (double) this[1, 1] +
|
||
|
(double) identity[2, 0] * (double) this[2, 1]);
|
||
|
identity[0, 1] = this[0, 1] - num2 * identity[0, 0];
|
||
|
identity[1, 1] = this[1, 1] - num2 * identity[1, 0];
|
||
|
identity[2, 1] = this[2, 1] - num2 * identity[2, 0];
|
||
|
float num3 = 1f / (float) Math.Sqrt((double) identity[0, 1] * (double) identity[0, 1] +
|
||
|
(double) identity[1, 1] * (double) identity[1, 1] +
|
||
|
(double) identity[2, 1] * (double) identity[2, 1]);
|
||
|
identity[0, 1] *= num3;
|
||
|
identity[1, 1] *= num3;
|
||
|
identity[2, 1] *= num3;
|
||
|
float num4 = (float) ((double) identity[0, 0] * (double) this[0, 2] + (double) identity[1, 0] * (double) this[1, 2] +
|
||
|
(double) identity[2, 0] * (double) this[2, 2]);
|
||
|
identity[0, 2] = this[0, 2] - num4 * identity[0, 0];
|
||
|
identity[1, 2] = this[1, 2] - num4 * identity[1, 0];
|
||
|
identity[2, 2] = this[2, 2] - num4 * identity[2, 0];
|
||
|
float num5 = (float) ((double) identity[0, 1] * (double) this[0, 2] + (double) identity[1, 1] * (double) this[1, 2] +
|
||
|
(double) identity[2, 1] * (double) this[2, 2]);
|
||
|
identity[0, 2] -= num5 * identity[0, 1];
|
||
|
identity[1, 2] -= num5 * identity[1, 1];
|
||
|
identity[2, 2] -= num5 * identity[2, 1];
|
||
|
float num6 = 1f / (float) Math.Sqrt((double) identity[0, 2] * (double) identity[0, 2] +
|
||
|
(double) identity[1, 2] * (double) identity[1, 2] +
|
||
|
(double) identity[2, 2] * (double) identity[2, 2]);
|
||
|
identity[0, 2] *= num6;
|
||
|
identity[1, 2] *= num6;
|
||
|
identity[2, 2] *= num6;
|
||
|
if ((double) identity[0, 0] * (double) identity[1, 1] * (double) identity[2, 2] +
|
||
|
(double) identity[0, 1] * (double) identity[1, 2] * (double) identity[2, 0] +
|
||
|
(double) identity[0, 2] * (double) identity[1, 0] * (double) identity[2, 1] -
|
||
|
(double) identity[0, 2] * (double) identity[1, 1] * (double) identity[2, 0] -
|
||
|
(double) identity[0, 1] * (double) identity[1, 0] * (double) identity[2, 2] -
|
||
|
(double) identity[0, 0] * (double) identity[1, 2] * (double) identity[2, 1] < 0.0)
|
||
|
{
|
||
|
for (int index1 = 0; index1 < 3; ++index1)
|
||
|
{
|
||
|
for (int index2 = 0; index2 < 3; ++index2)
|
||
|
identity[index1, index2] = -identity[index1, index2];
|
||
|
}
|
||
|
}
|
||
|
|
||
|
scale =
|
||
|
new
|
||
|
Vector3((float) ((double) identity[0, 0] * (double) this[0, 0] + (double) identity[1, 0] * (double) this[1, 0] + (double) identity[2, 0] * (double) this[2, 0]),
|
||
|
(float) ((double) identity[0, 1] * (double) this[0, 1] + (double) identity[1, 1] * (double) this[1, 1] +
|
||
|
(double) identity[2, 1] * (double) this[2, 1]),
|
||
|
(float) ((double) identity[0, 2] * (double) this[0, 2] + (double) identity[1, 2] * (double) this[1, 2] +
|
||
|
(double) identity[2, 2] * (double) this[2, 2]));
|
||
|
rotation = Quaternion.CreateFromRotationMatrix(identity);
|
||
|
translation = new Vector3(this[0, 3], this[1, 3], this[2, 3]);
|
||
|
}
|
||
|
|
||
|
public override string ToString()
|
||
|
{
|
||
|
CultureInfo currentCulture = CultureInfo.CurrentCulture;
|
||
|
return
|
||
|
string.Format((IFormatProvider) currentCulture, "{0}, {1}, {2}, {3}; ",
|
||
|
(object) this.m00.ToString((IFormatProvider) currentCulture),
|
||
|
(object) this.m01.ToString((IFormatProvider) currentCulture),
|
||
|
(object) this.m02.ToString((IFormatProvider) currentCulture),
|
||
|
(object) this.m03.ToString((IFormatProvider) currentCulture)) +
|
||
|
string.Format((IFormatProvider) currentCulture, "{0}, {1}, {2}, {3}; ",
|
||
|
(object) this.m10.ToString((IFormatProvider) currentCulture),
|
||
|
(object) this.m11.ToString((IFormatProvider) currentCulture),
|
||
|
(object) this.m12.ToString((IFormatProvider) currentCulture),
|
||
|
(object) this.m13.ToString((IFormatProvider) currentCulture)) +
|
||
|
string.Format((IFormatProvider) currentCulture, "{0}, {1}, {2}, {3}; ",
|
||
|
(object) this.m20.ToString((IFormatProvider) currentCulture),
|
||
|
(object) this.m21.ToString((IFormatProvider) currentCulture),
|
||
|
(object) this.m22.ToString((IFormatProvider) currentCulture),
|
||
|
(object) this.m23.ToString((IFormatProvider) currentCulture)) + string.Format((IFormatProvider) currentCulture,
|
||
|
"{0}, {1}, {2}, {3}",
|
||
|
(object) this.m30
|
||
|
.ToString((IFormatProvider)
|
||
|
currentCulture),
|
||
|
(object) this.m31
|
||
|
.ToString((IFormatProvider)
|
||
|
currentCulture),
|
||
|
(object) this.m32
|
||
|
.ToString((IFormatProvider)
|
||
|
currentCulture),
|
||
|
(object) this.m33
|
||
|
.ToString((IFormatProvider)
|
||
|
currentCulture));
|
||
|
}
|
||
|
|
||
|
public bool Equals(Matrix4x4 other)
|
||
|
{
|
||
|
if ((double) this.m00 == (double) other.m00 && (double) this.m11 == (double) other.m11 &&
|
||
|
((double) this.m22 == (double) other.m22 && (double) this.m33 == (double) other.m33) &&
|
||
|
((double) this.m01 == (double) other.m01 && (double) this.m02 == (double) other.m02 &&
|
||
|
((double) this.m03 == (double) other.m03 && (double) this.m10 == (double) other.m10)) &&
|
||
|
((double) this.m12 == (double) other.m12 && (double) this.m13 == (double) other.m13 &&
|
||
|
((double) this.m20 == (double) other.m20 && (double) this.m21 == (double) other.m21) &&
|
||
|
((double) this.m23 == (double) other.m23 && (double) this.m30 == (double) other.m30 && (double) this.m31 == (double) other.m31)))
|
||
|
return (double) this.m32 == (double) other.m32;
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public override bool Equals(object obj)
|
||
|
{
|
||
|
bool flag = false;
|
||
|
if (obj is Matrix4x4)
|
||
|
flag = this.Equals((Matrix4x4) obj);
|
||
|
return flag;
|
||
|
}
|
||
|
|
||
|
public override int GetHashCode()
|
||
|
{
|
||
|
return this.m00.GetHashCode() + this.m01.GetHashCode() + this.m02.GetHashCode() + this.m03.GetHashCode() + this.m10.GetHashCode() +
|
||
|
this.m11.GetHashCode() + this.m12.GetHashCode() + this.m13.GetHashCode() + this.m20.GetHashCode() + this.m21.GetHashCode() +
|
||
|
this.m22.GetHashCode() + this.m23.GetHashCode() + this.m30.GetHashCode() + this.m31.GetHashCode() + this.m32.GetHashCode() +
|
||
|
this.m33.GetHashCode();
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 Transpose(Matrix4x4 matrix)
|
||
|
{
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = matrix.m00;
|
||
|
matrix44.m01 = matrix.m10;
|
||
|
matrix44.m02 = matrix.m20;
|
||
|
matrix44.m03 = matrix.m30;
|
||
|
matrix44.m10 = matrix.m01;
|
||
|
matrix44.m11 = matrix.m11;
|
||
|
matrix44.m12 = matrix.m21;
|
||
|
matrix44.m13 = matrix.m31;
|
||
|
matrix44.m20 = matrix.m02;
|
||
|
matrix44.m21 = matrix.m12;
|
||
|
matrix44.m22 = matrix.m22;
|
||
|
matrix44.m23 = matrix.m32;
|
||
|
matrix44.m30 = matrix.m03;
|
||
|
matrix44.m31 = matrix.m13;
|
||
|
matrix44.m32 = matrix.m23;
|
||
|
matrix44.m33 = matrix.m33;
|
||
|
return matrix44;
|
||
|
}
|
||
|
|
||
|
public static void Transpose(ref Matrix4x4 matrix, out Matrix4x4 result)
|
||
|
{
|
||
|
result.m00 = matrix.m00;
|
||
|
result.m01 = matrix.m10;
|
||
|
result.m02 = matrix.m20;
|
||
|
result.m03 = matrix.m30;
|
||
|
result.m10 = matrix.m01;
|
||
|
result.m11 = matrix.m11;
|
||
|
result.m12 = matrix.m21;
|
||
|
result.m13 = matrix.m31;
|
||
|
result.m20 = matrix.m02;
|
||
|
result.m21 = matrix.m12;
|
||
|
result.m22 = matrix.m22;
|
||
|
result.m23 = matrix.m32;
|
||
|
result.m30 = matrix.m03;
|
||
|
result.m31 = matrix.m13;
|
||
|
result.m32 = matrix.m23;
|
||
|
result.m33 = matrix.m33;
|
||
|
}
|
||
|
|
||
|
public float Determinant()
|
||
|
{
|
||
|
float m00 = this.m00;
|
||
|
float m10 = this.m10;
|
||
|
float m20 = this.m20;
|
||
|
float m30 = this.m30;
|
||
|
float m01 = this.m01;
|
||
|
float m11 = this.m11;
|
||
|
float m21 = this.m21;
|
||
|
float m31 = this.m31;
|
||
|
float m02 = this.m02;
|
||
|
float m12 = this.m12;
|
||
|
float m22 = this.m22;
|
||
|
float m32 = this.m32;
|
||
|
float m03 = this.m03;
|
||
|
float m13 = this.m13;
|
||
|
float m23 = this.m23;
|
||
|
float m33 = this.m33;
|
||
|
float num1 = (float) ((double) m22 * (double) m33 - (double) m32 * (double) m23);
|
||
|
float num2 = (float) ((double) m12 * (double) m33 - (double) m32 * (double) m13);
|
||
|
float num3 = (float) ((double) m12 * (double) m23 - (double) m22 * (double) m13);
|
||
|
float num4 = (float) ((double) m02 * (double) m33 - (double) m32 * (double) m03);
|
||
|
float num5 = (float) ((double) m02 * (double) m23 - (double) m22 * (double) m03);
|
||
|
float num6 = (float) ((double) m02 * (double) m13 - (double) m12 * (double) m03);
|
||
|
return (float) ((double) m00 * ((double) m11 * (double) num1 - (double) m21 * (double) num2 + (double) m31 * (double) num3) -
|
||
|
(double) m10 * ((double) m01 * (double) num1 - (double) m21 * (double) num4 + (double) m31 * (double) num5) +
|
||
|
(double) m20 * ((double) m01 * (double) num2 - (double) m11 * (double) num4 + (double) m31 * (double) num6) -
|
||
|
(double) m30 * ((double) m01 * (double) num3 - (double) m11 * (double) num5 + (double) m21 * (double) num6));
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 Invert(Matrix4x4 matrix)
|
||
|
{
|
||
|
float m00 = matrix.m00;
|
||
|
float m10 = matrix.m10;
|
||
|
float m20 = matrix.m20;
|
||
|
float m30 = matrix.m30;
|
||
|
float m01 = matrix.m01;
|
||
|
float m11 = matrix.m11;
|
||
|
float m21 = matrix.m21;
|
||
|
float m31 = matrix.m31;
|
||
|
float m02 = matrix.m02;
|
||
|
float m12 = matrix.m12;
|
||
|
float m22 = matrix.m22;
|
||
|
float m32 = matrix.m32;
|
||
|
float m03 = matrix.m03;
|
||
|
float m13 = matrix.m13;
|
||
|
float m23 = matrix.m23;
|
||
|
float m33 = matrix.m33;
|
||
|
float num1 = (float) ((double) m22 * (double) m33 - (double) m32 * (double) m23);
|
||
|
float num2 = (float) ((double) m12 * (double) m33 - (double) m32 * (double) m13);
|
||
|
float num3 = (float) ((double) m12 * (double) m23 - (double) m22 * (double) m13);
|
||
|
float num4 = (float) ((double) m02 * (double) m33 - (double) m32 * (double) m03);
|
||
|
float num5 = (float) ((double) m02 * (double) m23 - (double) m22 * (double) m03);
|
||
|
float num6 = (float) ((double) m02 * (double) m13 - (double) m12 * (double) m03);
|
||
|
float num7 = (float) ((double) m11 * (double) num1 - (double) m21 * (double) num2 + (double) m31 * (double) num3);
|
||
|
float num8 = (float) -((double) m01 * (double) num1 - (double) m21 * (double) num4 + (double) m31 * (double) num5);
|
||
|
float num9 = (float) ((double) m01 * (double) num2 - (double) m11 * (double) num4 + (double) m31 * (double) num6);
|
||
|
float num10 = (float) -((double) m01 * (double) num3 - (double) m11 * (double) num5 + (double) m21 * (double) num6);
|
||
|
float num11 = (float) (1.0 / ((double) m00 * (double) num7 + (double) m10 * (double) num8 + (double) m20 * (double) num9 +
|
||
|
(double) m30 * (double) num10));
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = num7 * num11;
|
||
|
matrix44.m01 = num8 * num11;
|
||
|
matrix44.m02 = num9 * num11;
|
||
|
matrix44.m03 = num10 * num11;
|
||
|
matrix44.m10 = (float) -((double) m10 * (double) num1 - (double) m20 * (double) num2 + (double) m30 * (double) num3) * num11;
|
||
|
matrix44.m11 = (float) ((double) m00 * (double) num1 - (double) m20 * (double) num4 + (double) m30 * (double) num5) * num11;
|
||
|
matrix44.m12 = (float) -((double) m00 * (double) num2 - (double) m10 * (double) num4 + (double) m30 * (double) num6) * num11;
|
||
|
matrix44.m13 = (float) ((double) m00 * (double) num3 - (double) m10 * (double) num5 + (double) m20 * (double) num6) * num11;
|
||
|
float num12 = (float) ((double) m21 * (double) m33 - (double) m31 * (double) m23);
|
||
|
float num13 = (float) ((double) m11 * (double) m33 - (double) m31 * (double) m13);
|
||
|
float num14 = (float) ((double) m11 * (double) m23 - (double) m21 * (double) m13);
|
||
|
float num15 = (float) ((double) m01 * (double) m33 - (double) m31 * (double) m03);
|
||
|
float num16 = (float) ((double) m01 * (double) m23 - (double) m21 * (double) m03);
|
||
|
float num17 = (float) ((double) m01 * (double) m13 - (double) m11 * (double) m03);
|
||
|
matrix44.m20 = (float) ((double) m10 * (double) num12 - (double) m20 * (double) num13 + (double) m30 * (double) num14) * num11;
|
||
|
matrix44.m21 = (float) -((double) m00 * (double) num12 - (double) m20 * (double) num15 + (double) m30 * (double) num16) * num11;
|
||
|
matrix44.m22 = (float) ((double) m00 * (double) num13 - (double) m10 * (double) num15 + (double) m30 * (double) num17) * num11;
|
||
|
matrix44.m23 = (float) -((double) m00 * (double) num14 - (double) m10 * (double) num16 + (double) m20 * (double) num17) * num11;
|
||
|
float num18 = (float) ((double) m21 * (double) m32 - (double) m31 * (double) m22);
|
||
|
float num19 = (float) ((double) m11 * (double) m32 - (double) m31 * (double) m12);
|
||
|
float num20 = (float) ((double) m11 * (double) m22 - (double) m21 * (double) m12);
|
||
|
float num21 = (float) ((double) m01 * (double) m32 - (double) m31 * (double) m02);
|
||
|
float num22 = (float) ((double) m01 * (double) m22 - (double) m21 * (double) m02);
|
||
|
float num23 = (float) ((double) m01 * (double) m12 - (double) m11 * (double) m02);
|
||
|
matrix44.m30 = (float) -((double) m10 * (double) num18 - (double) m20 * (double) num19 + (double) m30 * (double) num20) * num11;
|
||
|
matrix44.m31 = (float) ((double) m00 * (double) num18 - (double) m20 * (double) num21 + (double) m30 * (double) num22) * num11;
|
||
|
matrix44.m32 = (float) -((double) m00 * (double) num19 - (double) m10 * (double) num21 + (double) m30 * (double) num23) * num11;
|
||
|
matrix44.m33 = (float) ((double) m00 * (double) num20 - (double) m10 * (double) num22 + (double) m20 * (double) num23) * num11;
|
||
|
return matrix44;
|
||
|
}
|
||
|
|
||
|
public static void Invert(ref Matrix4x4 matrix, out Matrix4x4 result)
|
||
|
{
|
||
|
float m00 = matrix.m00;
|
||
|
float m10 = matrix.m10;
|
||
|
float m20 = matrix.m20;
|
||
|
float m30 = matrix.m30;
|
||
|
float m01 = matrix.m01;
|
||
|
float m11 = matrix.m11;
|
||
|
float m21 = matrix.m21;
|
||
|
float m31 = matrix.m31;
|
||
|
float m02 = matrix.m02;
|
||
|
float m12 = matrix.m12;
|
||
|
float m22 = matrix.m22;
|
||
|
float m32 = matrix.m32;
|
||
|
float m03 = matrix.m03;
|
||
|
float m13 = matrix.m13;
|
||
|
float m23 = matrix.m23;
|
||
|
float m33 = matrix.m33;
|
||
|
float num1 = (float) ((double) m22 * (double) m33 - (double) m32 * (double) m23);
|
||
|
float num2 = (float) ((double) m12 * (double) m33 - (double) m32 * (double) m13);
|
||
|
float num3 = (float) ((double) m12 * (double) m23 - (double) m22 * (double) m13);
|
||
|
float num4 = (float) ((double) m02 * (double) m33 - (double) m32 * (double) m03);
|
||
|
float num5 = (float) ((double) m02 * (double) m23 - (double) m22 * (double) m03);
|
||
|
float num6 = (float) ((double) m02 * (double) m13 - (double) m12 * (double) m03);
|
||
|
float num7 = (float) ((double) m11 * (double) num1 - (double) m21 * (double) num2 + (double) m31 * (double) num3);
|
||
|
float num8 = (float) -((double) m01 * (double) num1 - (double) m21 * (double) num4 + (double) m31 * (double) num5);
|
||
|
float num9 = (float) ((double) m01 * (double) num2 - (double) m11 * (double) num4 + (double) m31 * (double) num6);
|
||
|
float num10 = (float) -((double) m01 * (double) num3 - (double) m11 * (double) num5 + (double) m21 * (double) num6);
|
||
|
float num11 = (float) (1.0 / ((double) m00 * (double) num7 + (double) m10 * (double) num8 + (double) m20 * (double) num9 +
|
||
|
(double) m30 * (double) num10));
|
||
|
result.m00 = num7 * num11;
|
||
|
result.m01 = num8 * num11;
|
||
|
result.m02 = num9 * num11;
|
||
|
result.m03 = num10 * num11;
|
||
|
result.m10 = (float) -((double) m10 * (double) num1 - (double) m20 * (double) num2 + (double) m30 * (double) num3) * num11;
|
||
|
result.m11 = (float) ((double) m00 * (double) num1 - (double) m20 * (double) num4 + (double) m30 * (double) num5) * num11;
|
||
|
result.m12 = (float) -((double) m00 * (double) num2 - (double) m10 * (double) num4 + (double) m30 * (double) num6) * num11;
|
||
|
result.m13 = (float) ((double) m00 * (double) num3 - (double) m10 * (double) num5 + (double) m20 * (double) num6) * num11;
|
||
|
float num12 = (float) ((double) m21 * (double) m33 - (double) m31 * (double) m23);
|
||
|
float num13 = (float) ((double) m11 * (double) m33 - (double) m31 * (double) m13);
|
||
|
float num14 = (float) ((double) m11 * (double) m23 - (double) m21 * (double) m13);
|
||
|
float num15 = (float) ((double) m01 * (double) m33 - (double) m31 * (double) m03);
|
||
|
float num16 = (float) ((double) m01 * (double) m23 - (double) m21 * (double) m03);
|
||
|
float num17 = (float) ((double) m01 * (double) m13 - (double) m11 * (double) m03);
|
||
|
result.m20 = (float) ((double) m10 * (double) num12 - (double) m20 * (double) num13 + (double) m30 * (double) num14) * num11;
|
||
|
result.m21 = (float) -((double) m00 * (double) num12 - (double) m20 * (double) num15 + (double) m30 * (double) num16) * num11;
|
||
|
result.m22 = (float) ((double) m00 * (double) num13 - (double) m10 * (double) num15 + (double) m30 * (double) num17) * num11;
|
||
|
result.m23 = (float) -((double) m00 * (double) num14 - (double) m10 * (double) num16 + (double) m20 * (double) num17) * num11;
|
||
|
float num18 = (float) ((double) m21 * (double) m32 - (double) m31 * (double) m22);
|
||
|
float num19 = (float) ((double) m11 * (double) m32 - (double) m31 * (double) m12);
|
||
|
float num20 = (float) ((double) m11 * (double) m22 - (double) m21 * (double) m12);
|
||
|
float num21 = (float) ((double) m01 * (double) m32 - (double) m31 * (double) m02);
|
||
|
float num22 = (float) ((double) m01 * (double) m22 - (double) m21 * (double) m02);
|
||
|
float num23 = (float) ((double) m01 * (double) m12 - (double) m11 * (double) m02);
|
||
|
result.m30 = (float) -((double) m10 * (double) num18 - (double) m20 * (double) num19 + (double) m30 * (double) num20) * num11;
|
||
|
result.m31 = (float) ((double) m00 * (double) num18 - (double) m20 * (double) num21 + (double) m30 * (double) num22) * num11;
|
||
|
result.m32 = (float) -((double) m00 * (double) num19 - (double) m10 * (double) num21 + (double) m30 * (double) num23) * num11;
|
||
|
result.m33 = (float) ((double) m00 * (double) num20 - (double) m10 * (double) num22 + (double) m20 * (double) num23) * num11;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 Add(Matrix4x4 matrix1, Matrix4x4 matrix2)
|
||
|
{
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = matrix1.m00 + matrix2.m00;
|
||
|
matrix44.m01 = matrix1.m01 + matrix2.m01;
|
||
|
matrix44.m02 = matrix1.m02 + matrix2.m02;
|
||
|
matrix44.m03 = matrix1.m03 + matrix2.m03;
|
||
|
matrix44.m10 = matrix1.m10 + matrix2.m10;
|
||
|
matrix44.m11 = matrix1.m11 + matrix2.m11;
|
||
|
matrix44.m12 = matrix1.m12 + matrix2.m12;
|
||
|
matrix44.m13 = matrix1.m13 + matrix2.m13;
|
||
|
matrix44.m20 = matrix1.m20 + matrix2.m20;
|
||
|
matrix44.m21 = matrix1.m21 + matrix2.m21;
|
||
|
matrix44.m22 = matrix1.m22 + matrix2.m22;
|
||
|
matrix44.m23 = matrix1.m23 + matrix2.m23;
|
||
|
matrix44.m30 = matrix1.m30 + matrix2.m30;
|
||
|
matrix44.m31 = matrix1.m31 + matrix2.m31;
|
||
|
matrix44.m32 = matrix1.m32 + matrix2.m32;
|
||
|
matrix44.m33 = matrix1.m33 + matrix2.m33;
|
||
|
return matrix44;
|
||
|
}
|
||
|
|
||
|
public static void Add(ref Matrix4x4 matrix1, ref Matrix4x4 matrix2, out Matrix4x4 result)
|
||
|
{
|
||
|
result.m00 = matrix1.m00 + matrix2.m00;
|
||
|
result.m01 = matrix1.m01 + matrix2.m01;
|
||
|
result.m02 = matrix1.m02 + matrix2.m02;
|
||
|
result.m03 = matrix1.m03 + matrix2.m03;
|
||
|
result.m10 = matrix1.m10 + matrix2.m10;
|
||
|
result.m11 = matrix1.m11 + matrix2.m11;
|
||
|
result.m12 = matrix1.m12 + matrix2.m12;
|
||
|
result.m13 = matrix1.m13 + matrix2.m13;
|
||
|
result.m20 = matrix1.m20 + matrix2.m20;
|
||
|
result.m21 = matrix1.m21 + matrix2.m21;
|
||
|
result.m22 = matrix1.m22 + matrix2.m22;
|
||
|
result.m23 = matrix1.m23 + matrix2.m23;
|
||
|
result.m30 = matrix1.m30 + matrix2.m30;
|
||
|
result.m31 = matrix1.m31 + matrix2.m31;
|
||
|
result.m32 = matrix1.m32 + matrix2.m32;
|
||
|
result.m33 = matrix1.m33 + matrix2.m33;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 Sub(Matrix4x4 matrix1, Matrix4x4 matrix2)
|
||
|
{
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = matrix1.m00 - matrix2.m00;
|
||
|
matrix44.m01 = matrix1.m01 - matrix2.m01;
|
||
|
matrix44.m02 = matrix1.m02 - matrix2.m02;
|
||
|
matrix44.m03 = matrix1.m03 - matrix2.m03;
|
||
|
matrix44.m10 = matrix1.m10 - matrix2.m10;
|
||
|
matrix44.m11 = matrix1.m11 - matrix2.m11;
|
||
|
matrix44.m12 = matrix1.m12 - matrix2.m12;
|
||
|
matrix44.m13 = matrix1.m13 - matrix2.m13;
|
||
|
matrix44.m20 = matrix1.m20 - matrix2.m20;
|
||
|
matrix44.m21 = matrix1.m21 - matrix2.m21;
|
||
|
matrix44.m22 = matrix1.m22 - matrix2.m22;
|
||
|
matrix44.m23 = matrix1.m23 - matrix2.m23;
|
||
|
matrix44.m30 = matrix1.m30 - matrix2.m30;
|
||
|
matrix44.m31 = matrix1.m31 - matrix2.m31;
|
||
|
matrix44.m32 = matrix1.m32 - matrix2.m32;
|
||
|
matrix44.m33 = matrix1.m33 - matrix2.m33;
|
||
|
return matrix44;
|
||
|
}
|
||
|
|
||
|
public static void Sub(ref Matrix4x4 matrix1, ref Matrix4x4 matrix2, out Matrix4x4 result)
|
||
|
{
|
||
|
result.m00 = matrix1.m00 - matrix2.m00;
|
||
|
result.m01 = matrix1.m01 - matrix2.m01;
|
||
|
result.m02 = matrix1.m02 - matrix2.m02;
|
||
|
result.m03 = matrix1.m03 - matrix2.m03;
|
||
|
result.m10 = matrix1.m10 - matrix2.m10;
|
||
|
result.m11 = matrix1.m11 - matrix2.m11;
|
||
|
result.m12 = matrix1.m12 - matrix2.m12;
|
||
|
result.m13 = matrix1.m13 - matrix2.m13;
|
||
|
result.m20 = matrix1.m20 - matrix2.m20;
|
||
|
result.m21 = matrix1.m21 - matrix2.m21;
|
||
|
result.m22 = matrix1.m22 - matrix2.m22;
|
||
|
result.m23 = matrix1.m23 - matrix2.m23;
|
||
|
result.m30 = matrix1.m30 - matrix2.m30;
|
||
|
result.m31 = matrix1.m31 - matrix2.m31;
|
||
|
result.m32 = matrix1.m32 - matrix2.m32;
|
||
|
result.m33 = matrix1.m33 - matrix2.m33;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 Multiply(Matrix4x4 matrix1, Matrix4x4 matrix2)
|
||
|
{
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = (float) ((double) matrix1.m00 * (double) matrix2.m00 + (double) matrix1.m01 * (double) matrix2.m10 +
|
||
|
(double) matrix1.m02 * (double) matrix2.m20 + (double) matrix1.m03 * (double) matrix2.m30);
|
||
|
matrix44.m01 = (float) ((double) matrix1.m00 * (double) matrix2.m01 + (double) matrix1.m01 * (double) matrix2.m11 +
|
||
|
(double) matrix1.m02 * (double) matrix2.m21 + (double) matrix1.m03 * (double) matrix2.m31);
|
||
|
matrix44.m02 = (float) ((double) matrix1.m00 * (double) matrix2.m02 + (double) matrix1.m01 * (double) matrix2.m12 +
|
||
|
(double) matrix1.m02 * (double) matrix2.m22 + (double) matrix1.m03 * (double) matrix2.m32);
|
||
|
matrix44.m03 = (float) ((double) matrix1.m00 * (double) matrix2.m03 + (double) matrix1.m01 * (double) matrix2.m13 +
|
||
|
(double) matrix1.m02 * (double) matrix2.m23 + (double) matrix1.m03 * (double) matrix2.m33);
|
||
|
matrix44.m10 = (float) ((double) matrix1.m10 * (double) matrix2.m00 + (double) matrix1.m11 * (double) matrix2.m10 +
|
||
|
(double) matrix1.m12 * (double) matrix2.m20 + (double) matrix1.m13 * (double) matrix2.m30);
|
||
|
matrix44.m11 = (float) ((double) matrix1.m10 * (double) matrix2.m01 + (double) matrix1.m11 * (double) matrix2.m11 +
|
||
|
(double) matrix1.m12 * (double) matrix2.m21 + (double) matrix1.m13 * (double) matrix2.m31);
|
||
|
matrix44.m12 = (float) ((double) matrix1.m10 * (double) matrix2.m02 + (double) matrix1.m11 * (double) matrix2.m12 +
|
||
|
(double) matrix1.m12 * (double) matrix2.m22 + (double) matrix1.m13 * (double) matrix2.m32);
|
||
|
matrix44.m13 = (float) ((double) matrix1.m10 * (double) matrix2.m03 + (double) matrix1.m11 * (double) matrix2.m13 +
|
||
|
(double) matrix1.m12 * (double) matrix2.m23 + (double) matrix1.m13 * (double) matrix2.m33);
|
||
|
matrix44.m20 = (float) ((double) matrix1.m20 * (double) matrix2.m00 + (double) matrix1.m21 * (double) matrix2.m10 +
|
||
|
(double) matrix1.m22 * (double) matrix2.m20 + (double) matrix1.m23 * (double) matrix2.m30);
|
||
|
matrix44.m21 = (float) ((double) matrix1.m20 * (double) matrix2.m01 + (double) matrix1.m21 * (double) matrix2.m11 +
|
||
|
(double) matrix1.m22 * (double) matrix2.m21 + (double) matrix1.m23 * (double) matrix2.m31);
|
||
|
matrix44.m22 = (float) ((double) matrix1.m20 * (double) matrix2.m02 + (double) matrix1.m21 * (double) matrix2.m12 +
|
||
|
(double) matrix1.m22 * (double) matrix2.m22 + (double) matrix1.m23 * (double) matrix2.m32);
|
||
|
matrix44.m23 = (float) ((double) matrix1.m20 * (double) matrix2.m03 + (double) matrix1.m21 * (double) matrix2.m13 +
|
||
|
(double) matrix1.m22 * (double) matrix2.m23 + (double) matrix1.m23 * (double) matrix2.m33);
|
||
|
matrix44.m30 = (float) ((double) matrix1.m30 * (double) matrix2.m00 + (double) matrix1.m31 * (double) matrix2.m10 +
|
||
|
(double) matrix1.m32 * (double) matrix2.m20 + (double) matrix1.m33 * (double) matrix2.m30);
|
||
|
matrix44.m31 = (float) ((double) matrix1.m30 * (double) matrix2.m01 + (double) matrix1.m31 * (double) matrix2.m11 +
|
||
|
(double) matrix1.m32 * (double) matrix2.m21 + (double) matrix1.m33 * (double) matrix2.m31);
|
||
|
matrix44.m32 = (float) ((double) matrix1.m30 * (double) matrix2.m02 + (double) matrix1.m31 * (double) matrix2.m12 +
|
||
|
(double) matrix1.m32 * (double) matrix2.m22 + (double) matrix1.m33 * (double) matrix2.m32);
|
||
|
matrix44.m33 = (float) ((double) matrix1.m30 * (double) matrix2.m03 + (double) matrix1.m31 * (double) matrix2.m13 +
|
||
|
(double) matrix1.m32 * (double) matrix2.m23 + (double) matrix1.m33 * (double) matrix2.m33);
|
||
|
return matrix44;
|
||
|
}
|
||
|
|
||
|
public static void Multiply(ref Matrix4x4 matrix1, ref Matrix4x4 matrix2, out Matrix4x4 result)
|
||
|
{
|
||
|
float num1 = (float) ((double) matrix1.m00 * (double) matrix2.m00 + (double) matrix1.m01 * (double) matrix2.m10 +
|
||
|
(double) matrix1.m02 * (double) matrix2.m20 + (double) matrix1.m03 * (double) matrix2.m30);
|
||
|
float num2 = (float) ((double) matrix1.m00 * (double) matrix2.m01 + (double) matrix1.m01 * (double) matrix2.m11 +
|
||
|
(double) matrix1.m02 * (double) matrix2.m21 + (double) matrix1.m03 * (double) matrix2.m31);
|
||
|
float num3 = (float) ((double) matrix1.m00 * (double) matrix2.m02 + (double) matrix1.m01 * (double) matrix2.m12 +
|
||
|
(double) matrix1.m02 * (double) matrix2.m22 + (double) matrix1.m03 * (double) matrix2.m32);
|
||
|
float num4 = (float) ((double) matrix1.m00 * (double) matrix2.m03 + (double) matrix1.m01 * (double) matrix2.m13 +
|
||
|
(double) matrix1.m02 * (double) matrix2.m23 + (double) matrix1.m03 * (double) matrix2.m33);
|
||
|
float num5 = (float) ((double) matrix1.m10 * (double) matrix2.m00 + (double) matrix1.m11 * (double) matrix2.m10 +
|
||
|
(double) matrix1.m12 * (double) matrix2.m20 + (double) matrix1.m13 * (double) matrix2.m30);
|
||
|
float num6 = (float) ((double) matrix1.m10 * (double) matrix2.m01 + (double) matrix1.m11 * (double) matrix2.m11 +
|
||
|
(double) matrix1.m12 * (double) matrix2.m21 + (double) matrix1.m13 * (double) matrix2.m31);
|
||
|
float num7 = (float) ((double) matrix1.m10 * (double) matrix2.m02 + (double) matrix1.m11 * (double) matrix2.m12 +
|
||
|
(double) matrix1.m12 * (double) matrix2.m22 + (double) matrix1.m13 * (double) matrix2.m32);
|
||
|
float num8 = (float) ((double) matrix1.m10 * (double) matrix2.m03 + (double) matrix1.m11 * (double) matrix2.m13 +
|
||
|
(double) matrix1.m12 * (double) matrix2.m23 + (double) matrix1.m13 * (double) matrix2.m33);
|
||
|
float num9 = (float) ((double) matrix1.m20 * (double) matrix2.m00 + (double) matrix1.m21 * (double) matrix2.m10 +
|
||
|
(double) matrix1.m22 * (double) matrix2.m20 + (double) matrix1.m23 * (double) matrix2.m30);
|
||
|
float num10 = (float) ((double) matrix1.m20 * (double) matrix2.m01 + (double) matrix1.m21 * (double) matrix2.m11 +
|
||
|
(double) matrix1.m22 * (double) matrix2.m21 + (double) matrix1.m23 * (double) matrix2.m31);
|
||
|
float num11 = (float) ((double) matrix1.m20 * (double) matrix2.m02 + (double) matrix1.m21 * (double) matrix2.m12 +
|
||
|
(double) matrix1.m22 * (double) matrix2.m22 + (double) matrix1.m23 * (double) matrix2.m32);
|
||
|
float num12 = (float) ((double) matrix1.m20 * (double) matrix2.m03 + (double) matrix1.m21 * (double) matrix2.m13 +
|
||
|
(double) matrix1.m22 * (double) matrix2.m23 + (double) matrix1.m23 * (double) matrix2.m33);
|
||
|
float num13 = (float) ((double) matrix1.m30 * (double) matrix2.m00 + (double) matrix1.m31 * (double) matrix2.m10 +
|
||
|
(double) matrix1.m32 * (double) matrix2.m20 + (double) matrix1.m33 * (double) matrix2.m30);
|
||
|
float num14 = (float) ((double) matrix1.m30 * (double) matrix2.m01 + (double) matrix1.m31 * (double) matrix2.m11 +
|
||
|
(double) matrix1.m32 * (double) matrix2.m21 + (double) matrix1.m33 * (double) matrix2.m31);
|
||
|
float num15 = (float) ((double) matrix1.m30 * (double) matrix2.m02 + (double) matrix1.m31 * (double) matrix2.m12 +
|
||
|
(double) matrix1.m32 * (double) matrix2.m22 + (double) matrix1.m33 * (double) matrix2.m32);
|
||
|
float num16 = (float) ((double) matrix1.m30 * (double) matrix2.m03 + (double) matrix1.m31 * (double) matrix2.m13 +
|
||
|
(double) matrix1.m32 * (double) matrix2.m23 + (double) matrix1.m33 * (double) matrix2.m33);
|
||
|
result.m00 = num1;
|
||
|
result.m01 = num2;
|
||
|
result.m02 = num3;
|
||
|
result.m03 = num4;
|
||
|
result.m10 = num5;
|
||
|
result.m11 = num6;
|
||
|
result.m12 = num7;
|
||
|
result.m13 = num8;
|
||
|
result.m20 = num9;
|
||
|
result.m21 = num10;
|
||
|
result.m22 = num11;
|
||
|
result.m23 = num12;
|
||
|
result.m30 = num13;
|
||
|
result.m31 = num14;
|
||
|
result.m32 = num15;
|
||
|
result.m33 = num16;
|
||
|
}
|
||
|
|
||
|
public static Vector4 TransformVector4(Matrix4x4 matrix, Vector4 vector)
|
||
|
{
|
||
|
float num1 = (float) ((double) vector.x * (double) matrix.m00 + (double) vector.y * (double) matrix.m01 +
|
||
|
(double) vector.z * (double) matrix.m02 + (double) vector.w * (double) matrix.m03);
|
||
|
float num2 = (float) ((double) vector.x * (double) matrix.m10 + (double) vector.y * (double) matrix.m11 +
|
||
|
(double) vector.z * (double) matrix.m12 + (double) vector.w * (double) matrix.m13);
|
||
|
float num3 = (float) ((double) vector.x * (double) matrix.m20 + (double) vector.y * (double) matrix.m21 +
|
||
|
(double) vector.z * (double) matrix.m22 + (double) vector.w * (double) matrix.m23);
|
||
|
float num4 = (float) ((double) vector.x * (double) matrix.m30 + (double) vector.y * (double) matrix.m31 +
|
||
|
(double) vector.z * (double) matrix.m32 + (double) vector.w * (double) matrix.m33);
|
||
|
Vector4 vector4;
|
||
|
vector4.x = num1;
|
||
|
vector4.y = num2;
|
||
|
vector4.z = num3;
|
||
|
vector4.w = num4;
|
||
|
return vector4;
|
||
|
}
|
||
|
|
||
|
public static void TransformVector4(ref Matrix4x4 matrix, ref Vector4 vector, out Vector4 result)
|
||
|
{
|
||
|
float num1 = (float) ((double) vector.x * (double) matrix.m00 + (double) vector.y * (double) matrix.m01 +
|
||
|
(double) vector.z * (double) matrix.m02 + (double) vector.w * (double) matrix.m03);
|
||
|
float num2 = (float) ((double) vector.x * (double) matrix.m10 + (double) vector.y * (double) matrix.m11 +
|
||
|
(double) vector.z * (double) matrix.m12 + (double) vector.w * (double) matrix.m13);
|
||
|
float num3 = (float) ((double) vector.x * (double) matrix.m20 + (double) vector.y * (double) matrix.m21 +
|
||
|
(double) vector.z * (double) matrix.m22 + (double) vector.w * (double) matrix.m23);
|
||
|
float num4 = (float) ((double) vector.x * (double) matrix.m30 + (double) vector.y * (double) matrix.m31 +
|
||
|
(double) vector.z * (double) matrix.m32 + (double) vector.w * (double) matrix.m33);
|
||
|
result.x = num1;
|
||
|
result.y = num2;
|
||
|
result.z = num3;
|
||
|
result.w = num4;
|
||
|
}
|
||
|
|
||
|
public static Vector3 TransformPosition(Matrix4x4 matrix, Vector3 position)
|
||
|
{
|
||
|
float num1 = (float) ((double) position.x * (double) matrix.m00 + (double) position.y * (double) matrix.m01 +
|
||
|
(double) position.z * (double) matrix.m02) + matrix.m03;
|
||
|
float num2 = (float) ((double) position.x * (double) matrix.m10 + (double) position.y * (double) matrix.m11 +
|
||
|
(double) position.z * (double) matrix.m12) + matrix.m13;
|
||
|
float num3 = (float) ((double) position.x * (double) matrix.m20 + (double) position.y * (double) matrix.m21 +
|
||
|
(double) position.z * (double) matrix.m22) + matrix.m23;
|
||
|
Vector3 vector3;
|
||
|
vector3.x = num1;
|
||
|
vector3.y = num2;
|
||
|
vector3.z = num3;
|
||
|
return vector3;
|
||
|
}
|
||
|
|
||
|
public static void TransformPosition(ref Matrix4x4 matrix, ref Vector3 position, out Vector3 result)
|
||
|
{
|
||
|
float num1 = (float) ((double) position.x * (double) matrix.m00 + (double) position.y * (double) matrix.m01 +
|
||
|
(double) position.z * (double) matrix.m02) + matrix.m03;
|
||
|
float num2 = (float) ((double) position.x * (double) matrix.m10 + (double) position.y * (double) matrix.m11 +
|
||
|
(double) position.z * (double) matrix.m12) + matrix.m13;
|
||
|
float num3 = (float) ((double) position.x * (double) matrix.m20 + (double) position.y * (double) matrix.m21 +
|
||
|
(double) position.z * (double) matrix.m22) + matrix.m23;
|
||
|
result.x = num1;
|
||
|
result.y = num2;
|
||
|
result.z = num3;
|
||
|
}
|
||
|
|
||
|
public Vector3 MultiplyPoint3x4(Vector3 point)
|
||
|
{
|
||
|
return TransformPosition(this, point);
|
||
|
}
|
||
|
|
||
|
public Vector3 MultiplyVector(Vector3 vector)
|
||
|
{
|
||
|
return TransformDirection(this, vector);
|
||
|
}
|
||
|
|
||
|
public static Vector3 TransformDirection(Matrix4x4 matrix, Vector3 direction)
|
||
|
{
|
||
|
float num1 = (float) ((double) direction.x * (double) matrix.m00 + (double) direction.y * (double) matrix.m01 +
|
||
|
(double) direction.z * (double) matrix.m02);
|
||
|
float num2 = (float) ((double) direction.x * (double) matrix.m10 + (double) direction.y * (double) matrix.m11 +
|
||
|
(double) direction.z * (double) matrix.m12);
|
||
|
float num3 = (float) ((double) direction.x * (double) matrix.m20 + (double) direction.y * (double) matrix.m21 +
|
||
|
(double) direction.z * (double) matrix.m22);
|
||
|
Vector3 vector3;
|
||
|
vector3.x = num1;
|
||
|
vector3.y = num2;
|
||
|
vector3.z = num3;
|
||
|
return vector3;
|
||
|
}
|
||
|
|
||
|
public static void TransformDirection(ref Matrix4x4 matrix, ref Vector3 direction, out Vector3 result)
|
||
|
{
|
||
|
float num1 = (float) ((double) direction.x * (double) matrix.m00 + (double) direction.y * (double) matrix.m01 +
|
||
|
(double) direction.z * (double) matrix.m02);
|
||
|
float num2 = (float) ((double) direction.x * (double) matrix.m10 + (double) direction.y * (double) matrix.m11 +
|
||
|
(double) direction.z * (double) matrix.m12);
|
||
|
float num3 = (float) ((double) direction.x * (double) matrix.m20 + (double) direction.y * (double) matrix.m21 +
|
||
|
(double) direction.z * (double) matrix.m22);
|
||
|
result.x = num1;
|
||
|
result.y = num2;
|
||
|
result.z = num3;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 operator -(Matrix4x4 matrix1)
|
||
|
{
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = -matrix1.m00;
|
||
|
matrix44.m01 = -matrix1.m01;
|
||
|
matrix44.m02 = -matrix1.m02;
|
||
|
matrix44.m03 = -matrix1.m03;
|
||
|
matrix44.m10 = -matrix1.m10;
|
||
|
matrix44.m11 = -matrix1.m11;
|
||
|
matrix44.m12 = -matrix1.m12;
|
||
|
matrix44.m13 = -matrix1.m13;
|
||
|
matrix44.m20 = -matrix1.m20;
|
||
|
matrix44.m21 = -matrix1.m21;
|
||
|
matrix44.m22 = -matrix1.m22;
|
||
|
matrix44.m23 = -matrix1.m23;
|
||
|
matrix44.m30 = -matrix1.m30;
|
||
|
matrix44.m31 = -matrix1.m31;
|
||
|
matrix44.m32 = -matrix1.m32;
|
||
|
matrix44.m33 = -matrix1.m33;
|
||
|
return matrix44;
|
||
|
}
|
||
|
|
||
|
public static bool operator ==(Matrix4x4 matrix1, Matrix4x4 matrix2)
|
||
|
{
|
||
|
if ((double) matrix1.m00 == (double) matrix2.m00 && (double) matrix1.m11 == (double) matrix2.m11 &&
|
||
|
((double) matrix1.m22 == (double) matrix2.m22 && (double) matrix1.m33 == (double) matrix2.m33) &&
|
||
|
((double) matrix1.m01 == (double) matrix2.m01 && (double) matrix1.m02 == (double) matrix2.m02 &&
|
||
|
((double) matrix1.m03 == (double) matrix2.m03 && (double) matrix1.m10 == (double) matrix2.m10)) &&
|
||
|
((double) matrix1.m12 == (double) matrix2.m12 && (double) matrix1.m13 == (double) matrix2.m13 &&
|
||
|
((double) matrix1.m20 == (double) matrix2.m20 && (double) matrix1.m21 == (double) matrix2.m21) &&
|
||
|
((double) matrix1.m23 == (double) matrix2.m23 && (double) matrix1.m30 == (double) matrix2.m30 &&
|
||
|
(double) matrix1.m31 == (double) matrix2.m31)))
|
||
|
return (double) matrix1.m32 == (double) matrix2.m32;
|
||
|
return false;
|
||
|
}
|
||
|
|
||
|
public static bool operator !=(Matrix4x4 matrix1, Matrix4x4 matrix2)
|
||
|
{
|
||
|
if ((double) matrix1.m00 == (double) matrix2.m00 && (double) matrix1.m01 == (double) matrix2.m01 &&
|
||
|
((double) matrix1.m02 == (double) matrix2.m02 && (double) matrix1.m03 == (double) matrix2.m03) &&
|
||
|
((double) matrix1.m10 == (double) matrix2.m10 && (double) matrix1.m11 == (double) matrix2.m11 &&
|
||
|
((double) matrix1.m12 == (double) matrix2.m12 && (double) matrix1.m13 == (double) matrix2.m13)) &&
|
||
|
((double) matrix1.m20 == (double) matrix2.m20 && (double) matrix1.m21 == (double) matrix2.m21 &&
|
||
|
((double) matrix1.m22 == (double) matrix2.m22 && (double) matrix1.m23 == (double) matrix2.m23) &&
|
||
|
((double) matrix1.m30 == (double) matrix2.m30 && (double) matrix1.m31 == (double) matrix2.m31 &&
|
||
|
(double) matrix1.m32 == (double) matrix2.m32)))
|
||
|
return (double) matrix1.m33 != (double) matrix2.m33;
|
||
|
return true;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 operator +(Matrix4x4 matrix1, Matrix4x4 matrix2)
|
||
|
{
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = matrix1.m00 + matrix2.m00;
|
||
|
matrix44.m01 = matrix1.m01 + matrix2.m01;
|
||
|
matrix44.m02 = matrix1.m02 + matrix2.m02;
|
||
|
matrix44.m03 = matrix1.m03 + matrix2.m03;
|
||
|
matrix44.m10 = matrix1.m10 + matrix2.m10;
|
||
|
matrix44.m11 = matrix1.m11 + matrix2.m11;
|
||
|
matrix44.m12 = matrix1.m12 + matrix2.m12;
|
||
|
matrix44.m13 = matrix1.m13 + matrix2.m13;
|
||
|
matrix44.m20 = matrix1.m20 + matrix2.m20;
|
||
|
matrix44.m21 = matrix1.m21 + matrix2.m21;
|
||
|
matrix44.m22 = matrix1.m22 + matrix2.m22;
|
||
|
matrix44.m23 = matrix1.m23 + matrix2.m23;
|
||
|
matrix44.m30 = matrix1.m30 + matrix2.m30;
|
||
|
matrix44.m31 = matrix1.m31 + matrix2.m31;
|
||
|
matrix44.m32 = matrix1.m32 + matrix2.m32;
|
||
|
matrix44.m33 = matrix1.m33 + matrix2.m33;
|
||
|
return matrix44;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 operator -(Matrix4x4 matrix1, Matrix4x4 matrix2)
|
||
|
{
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = matrix1.m00 - matrix2.m00;
|
||
|
matrix44.m01 = matrix1.m01 - matrix2.m01;
|
||
|
matrix44.m02 = matrix1.m02 - matrix2.m02;
|
||
|
matrix44.m03 = matrix1.m03 - matrix2.m03;
|
||
|
matrix44.m10 = matrix1.m10 - matrix2.m10;
|
||
|
matrix44.m11 = matrix1.m11 - matrix2.m11;
|
||
|
matrix44.m12 = matrix1.m12 - matrix2.m12;
|
||
|
matrix44.m13 = matrix1.m13 - matrix2.m13;
|
||
|
matrix44.m20 = matrix1.m20 - matrix2.m20;
|
||
|
matrix44.m21 = matrix1.m21 - matrix2.m21;
|
||
|
matrix44.m22 = matrix1.m22 - matrix2.m22;
|
||
|
matrix44.m23 = matrix1.m23 - matrix2.m23;
|
||
|
matrix44.m30 = matrix1.m30 - matrix2.m30;
|
||
|
matrix44.m31 = matrix1.m31 - matrix2.m31;
|
||
|
matrix44.m32 = matrix1.m32 - matrix2.m32;
|
||
|
matrix44.m33 = matrix1.m33 - matrix2.m33;
|
||
|
return matrix44;
|
||
|
}
|
||
|
|
||
|
public static Matrix4x4 operator *(Matrix4x4 matrix1, Matrix4x4 matrix2)
|
||
|
{
|
||
|
Matrix4x4 matrix44;
|
||
|
matrix44.m00 = (float) ((double) matrix1.m00 * (double) matrix2.m00 + (double) matrix1.m01 * (double) matrix2.m10 +
|
||
|
(double) matrix1.m02 * (double) matrix2.m20 + (double) matrix1.m03 * (double) matrix2.m30);
|
||
|
matrix44.m01 = (float) ((double) matrix1.m00 * (double) matrix2.m01 + (double) matrix1.m01 * (double) matrix2.m11 +
|
||
|
(double) matrix1.m02 * (double) matrix2.m21 + (double) matrix1.m03 * (double) matrix2.m31);
|
||
|
matrix44.m02 = (float) ((double) matrix1.m00 * (double) matrix2.m02 + (double) matrix1.m01 * (double) matrix2.m12 +
|
||
|
(double) matrix1.m02 * (double) matrix2.m22 + (double) matrix1.m03 * (double) matrix2.m32);
|
||
|
matrix44.m03 = (float) ((double) matrix1.m00 * (double) matrix2.m03 + (double) matrix1.m01 * (double) matrix2.m13 +
|
||
|
(double) matrix1.m02 * (double) matrix2.m23 + (double) matrix1.m03 * (double) matrix2.m33);
|
||
|
matrix44.m10 = (float) ((double) matrix1.m10 * (double) matrix2.m00 + (double) matrix1.m11 * (double) matrix2.m10 +
|
||
|
(double) matrix1.m12 * (double) matrix2.m20 + (double) matrix1.m13 * (double) matrix2.m30);
|
||
|
matrix44.m11 = (float) ((double) matrix1.m10 * (double) matrix2.m01 + (double) matrix1.m11 * (double) matrix2.m11 +
|
||
|
(double) matrix1.m12 * (double) matrix2.m21 + (double) matrix1.m13 * (double) matrix2.m31);
|
||
|
matrix44.m12 = (float) ((double) matrix1.m10 * (double) matrix2.m02 + (double) matrix1.m11 * (double) matrix2.m12 +
|
||
|
(double) matrix1.m12 * (double) matrix2.m22 + (double) matrix1.m13 * (double) matrix2.m32);
|
||
|
matrix44.m13 = (float) ((double) matrix1.m10 * (double) matrix2.m03 + (double) matrix1.m11 * (double) matrix2.m13 +
|
||
|
(double) matrix1.m12 * (double) matrix2.m23 + (double) matrix1.m13 * (double) matrix2.m33);
|
||
|
matrix44.m20 = (float) ((double) matrix1.m20 * (double) matrix2.m00 + (double) matrix1.m21 * (double) matrix2.m10 +
|
||
|
(double) matrix1.m22 * (double) matrix2.m20 + (double) matrix1.m23 * (double) matrix2.m30);
|
||
|
matrix44.m21 = (float) ((double) matrix1.m20 * (double) matrix2.m01 + (double) matrix1.m21 * (double) matrix2.m11 +
|
||
|
(double) matrix1.m22 * (double) matrix2.m21 + (double) matrix1.m23 * (double) matrix2.m31);
|
||
|
matrix44.m22 = (float) ((double) matrix1.m20 * (double) matrix2.m02 + (double) matrix1.m21 * (double) matrix2.m12 +
|
||
|
(double) matrix1.m22 * (double) matrix2.m22 + (double) matrix1.m23 * (double) matrix2.m32);
|
||
|
matrix44.m23 = (float) ((double) matrix1.m20 * (double) matrix2.m03 + (double) matrix1.m21 * (double) matrix2.m13 +
|
||
|
(double) matrix1.m22 * (double) matrix2.m23 + (double) matrix1.m23 * (double) matrix2.m33);
|
||
|
matrix44.m30 = (float) ((double) matrix1.m30 * (double) matrix2.m00 + (double) matrix1.m31 * (double) matrix2.m10 +
|
||
|
(double) matrix1.m32 * (double) matrix2.m20 + (double) matrix1.m33 * (double) matrix2.m30);
|
||
|
matrix44.m31 = (float) ((double) matrix1.m30 * (double) matrix2.m01 + (double) matrix1.m31 * (double) matrix2.m11 +
|
||
|
(double) matrix1.m32 * (double) matrix2.m21 + (double) matrix1.m33 * (double) matrix2.m31);
|
||
|
matrix44.m32 = (float) ((double) matrix1.m30 * (double) matrix2.m02 + (double) matrix1.m31 * (double) matrix2.m12 +
|
||
|
(double) matrix1.m32 * (double) matrix2.m22 + (double) matrix1.m33 * (double) matrix2.m32);
|
||
|
matrix44.m33 = (float) ((double) matrix1.m30 * (double) matrix2.m03 + (double) matrix1.m31 * (double) matrix2.m13 +
|
||
|
(double) matrix1.m32 * (double) matrix2.m23 + (double) matrix1.m33 * (double) matrix2.m33);
|
||
|
return matrix44;
|
||
|
}
|
||
|
}
|
||
|
}
|