| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560 |
- using System;
- using System.Globalization;
- using PF;
- namespace PF
- {
- [Serializable]
- public struct Matrix4x4: IEquatable<Matrix4x4>
- {
- private 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 static Matrix4x4 identity
- {
- get
- {
- return Matrix4x4._identity;
- }
- }
-
- 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;
- }
- }
- #if !SERVER
- public static implicit operator UnityEngine.Matrix4x4(PF.Matrix4x4 m)
- {
- return new UnityEngine.Matrix4x4(
- new UnityEngine.Vector4(m.m00, m.m01, m.m02, m.m03),
- new UnityEngine.Vector4(m.m10, m.m11, m.m12, m.m13),
- new UnityEngine.Vector4(m.m20, m.m21, m.m22, m.m23),
- new UnityEngine.Vector4(m.m30, m.m31, m.m32, m.m33));
- }
-
- public static implicit operator Matrix4x4(UnityEngine.Matrix4x4 m)
- {
- return new Matrix4x4(m.m00, m.m01, m.m02, m.m03,
- m.m10, m.m11, m.m12, m.m13,
- m.m20, m.m21, m.m22, m.m23,
- m.m30, m.m31, m.m32, m.m33);
- }
- #endif
- 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 CreatePerspectiveFieldOfView(float fieldOfView, float aspectRatio, float nearPlaneDistance, float farPlaneDistance)
- {
- if ((double) fieldOfView <= 0.0 || (double) fieldOfView >= 3.14159297943115)
- throw new ArgumentOutOfRangeException(nameof (fieldOfView),
- string.Format((IFormatProvider) CultureInfo.CurrentCulture,
- FrameworkResources.OutRangeFieldOfView,
- new object[1] { (object) nameof (fieldOfView) }));
- if ((double) nearPlaneDistance <= 0.0)
- throw new ArgumentOutOfRangeException(nameof (nearPlaneDistance),
- string.Format((IFormatProvider) CultureInfo.CurrentCulture,
- FrameworkResources.NegativePlaneDistance,
- new object[1] { (object) nameof (nearPlaneDistance) }));
- if ((double) farPlaneDistance <= 0.0)
- throw new ArgumentOutOfRangeException(nameof (farPlaneDistance),
- string.Format((IFormatProvider) CultureInfo.CurrentCulture,
- FrameworkResources.NegativePlaneDistance,
- new object[1] { (object) nameof (farPlaneDistance) }));
- if ((double) nearPlaneDistance >= (double) farPlaneDistance)
- throw new ArgumentOutOfRangeException(nameof (nearPlaneDistance), FrameworkResources.OppositePlanes);
- float num1 = 1f / (float) Math.Tan((double) fieldOfView * 0.5);
- float num2 = num1 / aspectRatio;
- Matrix4x4 matrix44;
- matrix44.m00 = num2;
- matrix44.m10 = matrix44.m20 = matrix44.m30 = 0.0f;
- matrix44.m11 = num1;
- matrix44.m01 = matrix44.m21 = matrix44.m31 = 0.0f;
- matrix44.m02 = matrix44.m12 = 0.0f;
- matrix44.m22 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance);
- matrix44.m32 = -1f;
- matrix44.m03 = matrix44.m13 = matrix44.m33 = 0.0f;
- matrix44.m23 = (float) ((double) nearPlaneDistance * (double) farPlaneDistance /
- ((double) nearPlaneDistance - (double) farPlaneDistance));
- return matrix44;
- }
- public static void CreatePerspectiveFieldOfView(
- float fieldOfView, float aspectRatio, float nearPlaneDistance, float farPlaneDistance, out Matrix4x4 matrix)
- {
- if ((double) fieldOfView <= 0.0 || (double) fieldOfView >= 3.14159297943115)
- throw new ArgumentOutOfRangeException(nameof (fieldOfView),
- string.Format((IFormatProvider) CultureInfo.CurrentCulture,
- FrameworkResources.OutRangeFieldOfView,
- new object[1] { (object) nameof (fieldOfView) }));
- if ((double) nearPlaneDistance <= 0.0)
- throw new ArgumentOutOfRangeException(nameof (nearPlaneDistance),
- string.Format((IFormatProvider) CultureInfo.CurrentCulture,
- FrameworkResources.NegativePlaneDistance,
- new object[1] { (object) nameof (nearPlaneDistance) }));
- if ((double) farPlaneDistance <= 0.0)
- throw new ArgumentOutOfRangeException(nameof (farPlaneDistance),
- string.Format((IFormatProvider) CultureInfo.CurrentCulture,
- FrameworkResources.NegativePlaneDistance,
- new object[1] { (object) nameof (farPlaneDistance) }));
- if ((double) nearPlaneDistance >= (double) farPlaneDistance)
- throw new ArgumentOutOfRangeException(nameof (nearPlaneDistance), FrameworkResources.OppositePlanes);
- float num1 = 1f / (float) Math.Tan((double) fieldOfView * 0.5);
- float num2 = num1 / aspectRatio;
- matrix.m00 = num2;
- matrix.m10 = matrix.m20 = matrix.m30 = 0.0f;
- matrix.m11 = num1;
- matrix.m01 = matrix.m21 = matrix.m31 = 0.0f;
- matrix.m02 = matrix.m12 = 0.0f;
- matrix.m22 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance);
- matrix.m32 = -1f;
- matrix.m03 = matrix.m13 = matrix.m33 = 0.0f;
- matrix.m23 = (float) ((double) nearPlaneDistance * (double) farPlaneDistance / ((double) nearPlaneDistance - (double) farPlaneDistance));
- }
- public static Matrix4x4 CreatePerspective(float width, float height, float nearPlaneDistance, float farPlaneDistance)
- {
- if ((double) nearPlaneDistance <= 0.0)
- throw new ArgumentOutOfRangeException(nameof (nearPlaneDistance),
- string.Format((IFormatProvider) CultureInfo.CurrentCulture,
- FrameworkResources.NegativePlaneDistance,
- new object[1] { (object) nameof (nearPlaneDistance) }));
- if ((double) farPlaneDistance <= 0.0)
- throw new ArgumentOutOfRangeException(nameof (farPlaneDistance),
- string.Format((IFormatProvider) CultureInfo.CurrentCulture,
- FrameworkResources.NegativePlaneDistance,
- new object[1] { (object) nameof (farPlaneDistance) }));
- if ((double) nearPlaneDistance >= (double) farPlaneDistance)
- throw new ArgumentOutOfRangeException(nameof (nearPlaneDistance), FrameworkResources.OppositePlanes);
- Matrix4x4 matrix44;
- matrix44.m00 = 2f * nearPlaneDistance / width;
- matrix44.m10 = matrix44.m20 = matrix44.m30 = 0.0f;
- matrix44.m11 = 2f * nearPlaneDistance / height;
- matrix44.m01 = matrix44.m21 = matrix44.m31 = 0.0f;
- matrix44.m22 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance);
- matrix44.m02 = matrix44.m12 = 0.0f;
- matrix44.m32 = -1f;
- matrix44.m03 = matrix44.m13 = matrix44.m33 = 0.0f;
- matrix44.m23 = (float) ((double) nearPlaneDistance * (double) farPlaneDistance /
- ((double) nearPlaneDistance - (double) farPlaneDistance));
- return matrix44;
- }
- public static void CreatePerspective(float width, float height, float nearPlaneDistance, float farPlaneDistance, out Matrix4x4 matrix)
- {
- if ((double) nearPlaneDistance <= 0.0)
- throw new ArgumentOutOfRangeException(nameof (nearPlaneDistance),
- string.Format((IFormatProvider) CultureInfo.CurrentCulture,
- FrameworkResources.NegativePlaneDistance,
- new object[1] { (object) nameof (nearPlaneDistance) }));
- if ((double) farPlaneDistance <= 0.0)
- throw new ArgumentOutOfRangeException(nameof (farPlaneDistance),
- string.Format((IFormatProvider) CultureInfo.CurrentCulture,
- FrameworkResources.NegativePlaneDistance,
- new object[1] { (object) nameof (farPlaneDistance) }));
- if ((double) nearPlaneDistance >= (double) farPlaneDistance)
- throw new ArgumentOutOfRangeException(nameof (nearPlaneDistance), FrameworkResources.OppositePlanes);
- matrix.m00 = 2f * nearPlaneDistance / width;
- matrix.m10 = matrix.m20 = matrix.m30 = 0.0f;
- matrix.m11 = 2f * nearPlaneDistance / height;
- matrix.m01 = matrix.m21 = matrix.m31 = 0.0f;
- matrix.m22 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance);
- matrix.m02 = matrix.m12 = 0.0f;
- matrix.m32 = -1f;
- matrix.m03 = matrix.m13 = matrix.m33 = 0.0f;
- matrix.m23 = (float) ((double) nearPlaneDistance * (double) farPlaneDistance / ((double) nearPlaneDistance - (double) farPlaneDistance));
- }
- 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;
- }
- }
- }
|