17 float m44) : IEquatable<Matrix> {
18 public float M11 = m11;
19 public float M21 = m21;
20 public float M31 = m31;
21 public float M41 = m41;
22 public float M12 = m12;
23 public float M22 = m22;
24 public float M32 = m32;
25 public float M42 = m42;
26 public float M13 = m13;
27 public float M23 = m23;
28 public float M33 = m33;
29 public float M43 = m43;
30 public float M14 = m14;
31 public float M24 = m24;
32 public float M34 = m34;
33 public float M44 = m44;
169 public override string ToString() => $
"{M11},{M12},{M13},{M14}, {M21},{M22},{M23},{M24}, {M31},{M32},{M33},{M34}, {M41},{M42},{M43},{M44}";
203 return rotation.ToYawPitchRoll();
249 float num = MathF.Sin(angle);
250 float num2 = MathF.Cos(angle);
258 result.M11 = num3 + num2 * (1f - num3);
259 result.M12 = num6 - num2 * num6 + num * z;
260 result.M13 = num7 - num2 * num7 - num * y;
262 result.M21 = num6 - num2 * num6 - num * z;
263 result.M22 = num4 + num2 * (1f - num4);
264 result.M23 = num8 - num2 * num8 + num * x;
266 result.M31 = num7 - num2 * num7 + num * y;
267 result.M32 = num8 - num2 * num8 - num * x;
268 result.M33 = num5 + num2 * (1f - num5);
287 result.M11 = vector2.
X;
289 result.M13 = vector.
X;
291 result.M21 = vector2.
Y;
293 result.M23 = vector.
Y;
295 result.M31 = vector2.
Z;
297 result.M33 = vector.
Z;
299 result.M41 = 0f -
Vector3.
Dot(vector2, position);
301 result.M43 = 0f -
Vector3.
Dot(vector, position);
308 result.M11 = 2f / width;
309 result.M12 = result.M13 = result.M14 = 0f;
310 result.M22 = 2f / height;
311 result.M21 = result.M23 = result.M24 = 0f;
312 result.M33 = 1f / (nearPlane - farPlane);
313 result.M31 = result.M32 = result.M34 = 0f;
314 result.M41 = result.M42 = 0f;
315 result.M43 = nearPlane / (nearPlane - farPlane);
322 result.M11 = 2f / (right - left);
327 result.M22 = 2f / (top - bottom);
332 result.M33 = 1f / (nearPlane - farPlane);
334 result.M41 = (left + right) / (left - right);
335 result.M42 = (top + bottom) / (bottom - top);
336 result.M43 = nearPlane / (nearPlane - farPlane);
343 result.M11 = 2f * nearPlane / width;
344 result.M12 = result.M13 = result.M14 = 0f;
345 result.M22 = 2f * nearPlane / height;
346 result.M21 = result.M23 = result.M24 = 0f;
347 result.M33 = farPlane / (nearPlane - farPlane);
348 result.M31 = result.M32 = 0f;
350 result.M41 = result.M42 = result.M44 = 0f;
351 result.M43 = nearPlane * farPlane / (nearPlane - farPlane);
356 float num = 1f / MathF.Tan(fieldOfViewY * 0.5f);
358 result.M11 = num / aspectRatio;
359 result.M12 = result.M13 = result.M14 = 0f;
361 result.M21 = result.M23 = result.M24 = 0f;
362 result.M31 = result.M32 = 0f;
363 result.M33 = farPlane / (nearPlane - farPlane);
365 result.M41 = result.M42 = result.M44 = 0f;
366 result.M43 = nearPlane * farPlane / (nearPlane - farPlane);
372 result.M11 = 2f * nearPlane / (right - left);
373 result.M12 = result.M13 = result.M14 = 0f;
374 result.M22 = 2f * nearPlane / (top - bottom);
375 result.M21 = result.M23 = result.M24 = 0f;
376 result.M31 = (left + right) / (right - left);
377 result.M32 = (top + bottom) / (top - bottom);
378 result.M33 = farPlane / (nearPlane - farPlane);
380 result.M43 = nearPlane * farPlane / (nearPlane - farPlane);
381 result.M41 = result.M42 = result.M44 = 0f;
386 float num = MathF.Cos(radians);
387 float num2 = MathF.Sin(radians);
409 float num = MathF.Cos(radians);
410 float num2 = MathF.Sin(radians);
425 num2 * center.
Z - num * center.
Y + center.
Y,
426 (0f - num) * center.
Z - num2 * center.
Y + center.
Z,
432 float num = MathF.Cos(radians);
433 float num2 = MathF.Sin(radians);
455 float num = MathF.Cos(radians);
456 float num2 = MathF.Sin(radians);
470 (0f - num2) * center.
Z - num * center.
X + center.
X,
472 (0f - num) * center.
Z + num2 * center.
X + center.
Z,
478 float num = MathF.Cos(radians);
479 float num2 = MathF.Sin(radians);
501 float num = MathF.Cos(radians);
502 float num2 = MathF.Sin(radians);
516 num2 * center.
Y - num * center.
X + center.
X,
517 (0f - num) * center.
Y - num2 * center.
X + center.
Y,
623 result.Right = vector;
625 result.Forward = forward;
626 result.Translation = position;
632 float num = plane.Normal.X * lightDirection.X + plane.Normal.Y * lightDirection.Y + plane.Normal.Z * lightDirection.
Z;
633 float num2 = 0f - plane.
Normal.
X;
634 float num3 = 0f - plane.
Normal.
Y;
635 float num4 = 0f - plane.
Normal.
Z;
636 float num5 = 0f - plane.
D;
638 result.M11 = num2 * lightDirection.X + num;
639 result.M21 = num3 * lightDirection.
X;
640 result.M31 = num4 * lightDirection.
X;
641 result.M41 = num5 * lightDirection.
X;
642 result.M12 = num2 * lightDirection.
Y;
643 result.M22 = num3 * lightDirection.Y + num;
644 result.M32 = num4 * lightDirection.
Y;
645 result.M42 = num5 * lightDirection.
Y;
646 result.M13 = num2 * lightDirection.
Z;
647 result.M23 = num3 * lightDirection.
Z;
648 result.M33 = num4 * lightDirection.Z + num;
649 result.M43 = num5 * lightDirection.
Z;
650 result.M14 = num2 * lightDirection.
W;
651 result.M24 = num3 * lightDirection.
W;
652 result.M34 = num4 * lightDirection.
W;
653 result.M44 = num5 * lightDirection.W + num;
693 float num = m12 * m17 - m13 * m16;
694 float num2 = m11 * m17 - m13 * m15;
695 float num3 = m11 * m16 - m12 * m15;
696 float num4 = m10 * m17 - m13 * m14;
697 float num5 = m10 * m16 - m12 * m14;
698 float num6 = m10 * m15 - m11 * m14;
699 float num7 = m7 * num - m8 * num2 + m9 * num3;
700 float num8 = 0f - (m6 * num - m8 * num4 + m9 * num5);
701 float num9 = m6 * num2 - m7 * num4 + m9 * num6;
702 float num10 = 0f - (m6 * num3 - m7 * num5 + m8 * num6);
703 float num11 = 1f / (m2 * num7 + m3 * num8 + m4 * num9 + m5 * num10);
705 result.M11 = num7 * num11;
706 result.M21 = num8 * num11;
707 result.M31 = num9 * num11;
708 result.M41 = num10 * num11;
709 result.M12 = (0f - (m3 * num - m4 * num2 + m5 * num3)) * num11;
710 result.M22 = (m2 * num - m4 * num4 + m5 * num5) * num11;
711 result.M32 = (0f - (m2 * num2 - m3 * num4 + m5 * num6)) * num11;
712 result.M42 = (m2 * num3 - m3 * num5 + m4 * num6) * num11;
713 float num12 = m8 * m17 - m9 * m16;
714 float num13 = m7 * m17 - m9 * m15;
715 float num14 = m7 * m16 - m8 * m15;
716 float num15 = m6 * m17 - m9 * m14;
717 float num16 = m6 * m16 - m8 * m14;
718 float num17 = m6 * m15 - m7 * m14;
719 result.M13 = (m3 * num12 - m4 * num13 + m5 * num14) * num11;
720 result.M23 = (0f - (m2 * num12 - m4 * num15 + m5 * num16)) * num11;
721 result.M33 = (m2 * num13 - m3 * num15 + m5 * num17) * num11;
722 result.M43 = (0f - (m2 * num14 - m3 * num16 + m4 * num17)) * num11;
723 float num18 = m8 * m13 - m9 * m12;
724 float num19 = m7 * m13 - m9 * m11;
725 float num20 = m7 * m12 - m8 * m11;
726 float num21 = m6 * m13 - m9 * m10;
727 float num22 = m6 * m12 - m8 * m10;
728 float num23 = m6 * m11 - m7 * m10;
729 result.M14 = (0f - (m3 * num18 - m4 * num19 + m5 * num20)) * num11;
730 result.M24 = (m2 * num18 - m4 * num21 + m5 * num22) * num11;
731 result.M34 = (0f - (m2 * num19 - m3 * num21 + m5 * num23)) * num11;
732 result.M44 = (m2 * num20 - m3 * num22 + m4 * num23) * num11;
737 m1.M11 += (m2.M11 - m1.
M11) * f;
738 m1.M12 += (m2.M12 - m1.
M12) * f;
739 m1.M13 += (m2.M13 - m1.
M13) * f;
740 m1.M14 += (m2.M14 - m1.
M14) * f;
741 m1.M21 += (m2.M21 - m1.
M21) * f;
742 m1.M22 += (m2.M22 - m1.
M22) * f;
743 m1.M23 += (m2.M23 - m1.
M23) * f;
744 m1.M24 += (m2.M24 - m1.
M24) * f;
745 m1.M31 += (m2.M31 - m1.
M31) * f;
746 m1.M32 += (m2.M32 - m1.
M32) * f;
747 m1.M33 += (m2.M33 - m1.
M33) * f;
748 m1.M34 += (m2.M34 - m1.
M34) * f;
749 m1.M41 += (m2.M41 - m1.
M41) * f;
750 m1.M42 += (m2.M42 - m1.
M42) * f;
751 m1.M43 += (m2.M43 - m1.
M43) * f;
752 m1.M44 += (m2.M44 - m1.
M44) * f;
757 result.M11 = m1.M11 * m2.M11 + m1.M12 * m2.M21 + m1.M13 * m2.M31 + m1.M14 * m2.M41;
758 result.M12 = m1.M11 * m2.M12 + m1.M12 * m2.M22 + m1.M13 * m2.M32 + m1.M14 * m2.M42;
759 result.M13 = m1.M11 * m2.M13 + m1.M12 * m2.M23 + m1.M13 * m2.M33 + m1.M14 * m2.M43;
760 result.M14 = m1.M11 * m2.M14 + m1.M12 * m2.M24 + m1.M13 * m2.M34 + m1.M14 * m2.M44;
761 result.M21 = m1.M21 * m2.M11 + m1.M22 * m2.M21 + m1.M23 * m2.M31 + m1.M24 * m2.M41;
762 result.M22 = m1.M21 * m2.M12 + m1.M22 * m2.M22 + m1.M23 * m2.M32 + m1.M24 * m2.M42;
763 result.M23 = m1.M21 * m2.M13 + m1.M22 * m2.M23 + m1.M23 * m2.M33 + m1.M24 * m2.M43;
764 result.M24 = m1.M21 * m2.M14 + m1.M22 * m2.M24 + m1.M23 * m2.M34 + m1.M24 * m2.M44;
765 result.M31 = m1.M31 * m2.M11 + m1.M32 * m2.M21 + m1.M33 * m2.M31 + m1.M34 * m2.M41;
766 result.M32 = m1.M31 * m2.M12 + m1.M32 * m2.M22 + m1.M33 * m2.M32 + m1.M34 * m2.M42;
767 result.M33 = m1.M31 * m2.M13 + m1.M32 * m2.M23 + m1.M33 * m2.M33 + m1.M34 * m2.M43;
768 result.M34 = m1.M31 * m2.M14 + m1.M32 * m2.M24 + m1.M33 * m2.M34 + m1.M34 * m2.M44;
769 result.M41 = m1.M41 * m2.M11 + m1.M42 * m2.M21 + m1.M43 * m2.M31 + m1.M44 * m2.M41;
770 result.M42 = m1.M41 * m2.M12 + m1.M42 * m2.M22 + m1.M43 * m2.M32 + m1.M44 * m2.M42;
771 result.M43 = m1.M41 * m2.M13 + m1.M42 * m2.M23 + m1.M43 * m2.M33 + m1.M44 * m2.M43;
772 result.M44 = m1.M41 * m2.M14 + m1.M42 * m2.M24 + m1.M43 * m2.M34 + m1.M44 * m2.M44;
static Matrix CreateRotationY(float radians, Vector3 center)
bool Decompose(out Vector3 scale, out Quaternion rotation, out Vector3 translation)
static Matrix Invert(Matrix m)
static bool operator==(Matrix m1, Matrix m2)
static Matrix CreatePerspective(float width, float height, float nearPlane, float farPlane)
static Matrix CreateShadow(Vector4 lightDirection, Plane plane)
static Matrix CreateRotationX(float radians)
static Matrix CreateScale(Vector3 scale)
static Matrix operator-(Matrix m)
static Matrix CreateFromQuaternion(Quaternion quaternion)
static Matrix CreateTranslation(float x, float y, float z)
static readonly Matrix Zero
static Matrix CreateScale(float x, float y, float z)
static Matrix CreateRotationZ(float radians)
static Matrix CreatePerspectiveOffCenter(float left, float right, float bottom, float top, float nearPlane, float farPlane)
override int GetHashCode()
static Matrix CreatePerspectiveFieldOfView(float fieldOfViewY, float aspectRatio, float nearPlane, float farPlane)
static void MultiplyRestricted(ref Matrix m1, ref Matrix m2, out Matrix result)
static readonly Matrix Identity
static Matrix Transpose(Matrix m)
override bool Equals(object obj)
static Matrix CreateLookAt(Vector3 position, Vector3 target, Vector3 up)
static Matrix CreateFromYawPitchRoll(float yaw, float pitch, float roll)
static Matrix CreateFromAxisAngle(Vector3 axis, float angle)
static Matrix CreateWorld(Vector3 position, Vector3 forward, Vector3 up)
static Matrix CreateRotationY(float radians)
static Matrix Lerp(Matrix m1, Matrix m2, float f)
static Matrix CreateTranslation(Vector3 position)
bool Equals(Matrix other)
static Matrix CreateRotationX(float radians, Vector3 center)
static Matrix operator+(Matrix m)
static Matrix operator*(Matrix m1, Matrix m2)
static Matrix operator/(Matrix m1, Matrix m2)
static Matrix CreateScale(float scale)
static Matrix CreateOrthographicOffCenter(float left, float right, float bottom, float top, float nearPlane, float farPlane)
static Matrix CreateRotationZ(float radians, Vector3 center)
override string ToString()
static bool operator!=(Matrix m1, Matrix m2)
static Matrix CreateOrthographic(float width, float height, float nearPlane, float farPlane)
static Quaternion CreateFromYawPitchRoll(float yaw, float pitch, float roll)
static readonly Quaternion Identity
static Quaternion CreateFromRotationMatrix(Matrix m)
static Vector3 Cross(Vector3 v1, Vector3 v2)
static Vector3 Normalize(Vector3 v)
static float Dot(Vector3 v1, Vector3 v2)