diff --git a/Source/OpenTK/Math/Matrix2.cs b/Source/OpenTK/Math/Matrix2.cs index a3d46933..bfefb914 100644 --- a/Source/OpenTK/Math/Matrix2.cs +++ b/Source/OpenTK/Math/Matrix2.cs @@ -44,6 +44,16 @@ namespace OpenTK /// public Vector2 Row1; + /// + /// The identity matrix. + /// + public static Matrix2 Identity = new Matrix2(Vector2.UnitX, Vector2.UnitY); + + /// + /// The zero matrix. + /// + public static readonly Matrix2 Zero = new Matrix2(Vector2.Zero, Vector2.Zero); + #endregion #region Constructors @@ -280,6 +290,33 @@ namespace OpenTK #region Multiply Functions + /// + /// Multiplies and instance by a scalar. + /// + /// The left operand of the multiplication. + /// The right operand of the multiplication. + /// A new instance that is the result of the multiplication. + public static void Mult(ref Matrix2 left, float right, out Matrix2 result) + { + result.Row0.X = left.Row0.X * right; + result.Row0.Y = left.Row0.Y * right; + result.Row1.X = left.Row1.X * right; + result.Row1.Y = left.Row1.Y * right; + } + + /// + /// Multiplies and instance by a scalar. + /// + /// The left operand of the multiplication. + /// The right operand of the multiplication. + /// A new instance that is the result of the multiplication. + public static Matrix2 Mult(Matrix2 left, float right) + { + Matrix2 result; + Mult(ref left, right, out result); + return result; + } + /// /// Multiplies two instances. /// @@ -485,6 +522,28 @@ namespace OpenTK #region Operators + /// + /// Scalar multiplication. + /// + /// left-hand operand + /// right-hand operand + /// A new Matrix2 which holds the result of the multiplication + public static Matrix2 operator *(float left, Matrix2 right) + { + return Matrix2.Mult(right, left); + } + + /// + /// Scalar multiplication. + /// + /// left-hand operand + /// right-hand operand + /// A new Matrix2 which holds the result of the multiplication + public static Matrix2 operator *(Matrix2 left, float right) + { + return Matrix2.Mult(left, right); + } + /// /// Matrix multiplication /// @@ -564,7 +623,7 @@ namespace OpenTK #endregion - #region Overloads + #region Overrides #region public override string ToString() diff --git a/Source/OpenTK/Math/Matrix2x3.cs b/Source/OpenTK/Math/Matrix2x3.cs index 3546669d..b2aaae8e 100644 --- a/Source/OpenTK/Math/Matrix2x3.cs +++ b/Source/OpenTK/Math/Matrix2x3.cs @@ -44,6 +44,11 @@ namespace OpenTK /// public Vector3 Row1; + /// + /// The zero matrix. + /// + public static Matrix2x3 Zero = new Matrix2x3(Vector3.Zero, Vector3.Zero); + #endregion #region Constructors @@ -162,6 +167,15 @@ namespace OpenTK } } + #endregion + + #region Instance + #endregion + + #region Static + + + #endregion #region Operators diff --git a/Source/OpenTK/Math/Matrix2x4.cs b/Source/OpenTK/Math/Matrix2x4.cs index 5f9bfefb..848091b1 100644 --- a/Source/OpenTK/Math/Matrix2x4.cs +++ b/Source/OpenTK/Math/Matrix2x4.cs @@ -34,6 +34,11 @@ namespace OpenTK public Vector4 Row0; public Vector4 Row1; + /// + /// The zero matrix. + /// + public static Matrix2x4 Zero = new Matrix2x4(Vector4.Zero, Vector4.Zero); + #endregion #region Constructors diff --git a/Source/OpenTK/Math/Matrix3.cs b/Source/OpenTK/Math/Matrix3.cs index 52c41bb5..10423c37 100644 --- a/Source/OpenTK/Math/Matrix3.cs +++ b/Source/OpenTK/Math/Matrix3.cs @@ -54,7 +54,12 @@ namespace OpenTK /// /// The identity matrix. /// - public static Matrix3 Identity = new Matrix3(Vector3.UnitX, Vector3.UnitY, Vector3.UnitZ); + public static readonly Matrix3 Identity = new Matrix3(Vector3.UnitX, Vector3.UnitY, Vector3.UnitZ); + + /// + /// The zero matrix. + /// + public static readonly Matrix3 Zero = new Matrix3(Vector3.Zero, Vector3.Zero, Vector3.Zero); #endregion diff --git a/Source/OpenTK/Math/Matrix3x2.cs b/Source/OpenTK/Math/Matrix3x2.cs index c9a1f760..8eceb7bb 100644 --- a/Source/OpenTK/Math/Matrix3x2.cs +++ b/Source/OpenTK/Math/Matrix3x2.cs @@ -31,10 +31,26 @@ namespace OpenTK { #region Fields + /// + /// Top row of the matrix. + /// public Vector2 Row0; + + /// + /// Second row of the matrix. + /// public Vector2 Row1; + + /// + /// Bottom row of the matrix. + /// public Vector2 Row2; + /// + /// The zero matrix. + /// + public static Matrix3x2 Zero = new Matrix3x2(Vector2.Zero, Vector2.Zero, Vector2.Zero); + #endregion #region Constructors @@ -108,6 +124,62 @@ namespace OpenTK #endregion + #region Instance + #endregion + + #region Static + #endregion + + #region Operators + #endregion + + #region Overrides + + #region public override string ToString() + + /// + /// Returns a System.String that represents the current Matrix3d. + /// + /// The string representation of the matrix. + public override string ToString() + { + return String.Format("{0}\n{1}\n{2}", Row0, Row1, Row2); + } + + #endregion + + #region public override int GetHashCode() + + /// + /// Returns the hashcode for this instance. + /// + /// A System.Int32 containing the unique hashcode for this instance. + public override int GetHashCode() + { + return Row0.GetHashCode() ^ Row1.GetHashCode() ^ Row2.GetHashCode(); + } + + #endregion + + #region public override bool Equals(object obj) + + /// + /// Indicates whether this instance and a specified object are equal. + /// + /// The object to compare to. + /// True if the instances are equal; false otherwise. + public override bool Equals(object obj) + { + if (!(obj is Matrix3x2)) + return false; + + return this.Equals((Matrix3x2)obj); + } + + #endregion + + #endregion + #endregion #region IEquatable Members diff --git a/Source/OpenTK/Math/Matrix3x4.cs b/Source/OpenTK/Math/Matrix3x4.cs index ef3c4f8a..7abb7d7f 100644 --- a/Source/OpenTK/Math/Matrix3x4.cs +++ b/Source/OpenTK/Math/Matrix3x4.cs @@ -52,9 +52,9 @@ namespace OpenTK public Vector4 Row2; /// - /// The identity matrix + /// The zero matrix /// - public static Matrix3x4 Identity = new Matrix3x4(Vector4.UnitX, Vector4.UnitY, Vector4.UnitZ); + public static Matrix3x4 Zero = new Matrix3x4(Vector4.Zero, Vector4.Zero, Vector4.Zero); #endregion @@ -355,11 +355,18 @@ namespace OpenTK float cos = (float)System.Math.Cos(angle); float sin = (float)System.Math.Sin(angle); - result = Identity; + result.Row0.X = 1; + result.Row0.Y = 0; + result.Row0.Z = 0; + result.Row0.W = 0; + result.Row1.X = 0; result.Row1.Y = cos; result.Row1.Z = sin; + result.Row1.W = 0; + result.Row2.X = 0; result.Row2.Y = -sin; result.Row2.Z = cos; + result.Row2.W = 0; } /// @@ -384,11 +391,18 @@ namespace OpenTK float cos = (float)System.Math.Cos(angle); float sin = (float)System.Math.Sin(angle); - result = Identity; result.Row0.X = cos; + result.Row0.Y = 0; result.Row0.Z = -sin; + result.Row0.W = 0; + result.Row1.X = 0; + result.Row1.Y = 1; + result.Row1.Z = 0; + result.Row1.W = 0; result.Row2.X = sin; + result.Row2.Y = 0; result.Row2.Z = cos; + result.Row2.W = 0; } /// @@ -413,11 +427,18 @@ namespace OpenTK float cos = (float)System.Math.Cos(angle); float sin = (float)System.Math.Sin(angle); - result = Identity; result.Row0.X = cos; result.Row0.Y = sin; + result.Row0.Z = 0; + result.Row0.W = 0; result.Row1.X = -sin; result.Row1.Y = cos; + result.Row1.Z = 0; + result.Row1.W = 0; + result.Row2.X = 0; + result.Row2.Y = 0; + result.Row2.Z = 1; + result.Row2.W = 0; } /// @@ -445,9 +466,17 @@ namespace OpenTK /// The resulting Matrix4 instance. public static void CreateTranslation(float x, float y, float z, out Matrix3x4 result) { - result = Identity; + result.Row0.X = 1; + result.Row0.Y = 0; + result.Row0.Z = 0; result.Row0.W = x; + result.Row1.X = 0; + result.Row1.Y = 1; + result.Row1.Z = 0; result.Row1.W = y; + result.Row2.X = 0; + result.Row2.Y = 0; + result.Row2.Z = 1; result.Row2.W = z; } @@ -458,9 +487,17 @@ namespace OpenTK /// The resulting Matrix4 instance. public static void CreateTranslation(ref Vector3 vector, out Matrix3x4 result) { - result = Identity; + result.Row0.X = 1; + result.Row0.Y = 0; + result.Row0.Z = 0; result.Row0.W = vector.X; + result.Row1.X = 0; + result.Row1.Y = 1; + result.Row1.Z = 0; result.Row1.W = vector.Y; + result.Row2.X = 0; + result.Row2.Y = 0; + result.Row2.Z = 1; result.Row2.W = vector.Z; } @@ -523,10 +560,19 @@ namespace OpenTK /// A scaling matrix public static Matrix3x4 CreateScale(float x, float y, float z) { - Matrix3x4 result = Identity; + Matrix3x4 result; result.Row0.X = x; + result.Row0.Y = 0; + result.Row0.Z = 0; + result.Row0.W = 0; + result.Row1.X = 0; result.Row1.Y = y; + result.Row1.Z = 0; + result.Row1.W = 0; + result.Row2.X = 0; + result.Row2.Y = 0; result.Row2.Z = z; + result.Row2.W = 0; return result; } diff --git a/Source/OpenTK/Math/Matrix4.cs b/Source/OpenTK/Math/Matrix4.cs index 08177283..858cf462 100644 --- a/Source/OpenTK/Math/Matrix4.cs +++ b/Source/OpenTK/Math/Matrix4.cs @@ -59,7 +59,12 @@ namespace OpenTK /// /// The identity matrix. /// - public static Matrix4 Identity = new Matrix4(Vector4.UnitX, Vector4.UnitY, Vector4.UnitZ, Vector4.UnitW); + public static readonly Matrix4 Identity = new Matrix4(Vector4.UnitX, Vector4.UnitY, Vector4.UnitZ, Vector4.UnitW); + + /// + /// The zero matrix. + /// + public static readonly Matrix4 Zero = new Matrix4(Vector4.Zero, Vector4.Zero, Vector4.Zero, Vector4.Zero); #endregion diff --git a/Source/OpenTK/Math/Matrix4x2.cs b/Source/OpenTK/Math/Matrix4x2.cs index ab08a7b7..209aaad2 100644 --- a/Source/OpenTK/Math/Matrix4x2.cs +++ b/Source/OpenTK/Math/Matrix4x2.cs @@ -36,6 +36,11 @@ namespace OpenTK public Vector2 Row2; public Vector2 Row3; + /// + /// The zero matrix. + /// + public static Matrix4x2 Zero = new Matrix4x2(Vector2.Zero, Vector2.Zero, Vector2.Zero, Vector2.Zero); + #endregion #region Constructors diff --git a/Source/OpenTK/Math/Matrix4x3.cs b/Source/OpenTK/Math/Matrix4x3.cs index b43c44be..a9a39e08 100644 --- a/Source/OpenTK/Math/Matrix4x3.cs +++ b/Source/OpenTK/Math/Matrix4x3.cs @@ -57,9 +57,9 @@ namespace OpenTK public Vector3 Row3; /// - /// The identity matrix + /// The zero matrix /// - public static Matrix4x3 Identity = new Matrix4x3(Vector3.UnitX, Vector3.UnitY, Vector3.UnitZ, Vector3.Zero); + public static Matrix4x3 Zero = new Matrix4x3(Vector3.Zero, Vector3.Zero, Vector3.Zero, Vector3.Zero); #endregion @@ -358,11 +358,18 @@ namespace OpenTK float cos = (float)System.Math.Cos(angle); float sin = (float)System.Math.Sin(angle); - result = Identity; + result.Row0.X = 1; + result.Row0.Y = 0; + result.Row0.Z = 0; + result.Row1.X = 0; result.Row1.Y = cos; result.Row1.Z = sin; + result.Row2.X = 0; result.Row2.Y = -sin; result.Row2.Z = cos; + result.Row3.X = 0; + result.Row3.Y = 0; + result.Row3.Z = 0; } /// @@ -387,11 +394,18 @@ namespace OpenTK float cos = (float)System.Math.Cos(angle); float sin = (float)System.Math.Sin(angle); - result = Identity; result.Row0.X = cos; + result.Row0.Y = 0; result.Row0.Z = -sin; + result.Row1.X = 0; + result.Row1.Y = 1; + result.Row1.Z = 0; result.Row2.X = sin; + result.Row2.Y = 0; result.Row2.Z = cos; + result.Row3.X = 0; + result.Row3.Y = 0; + result.Row3.Z = 0; } /// @@ -416,11 +430,18 @@ namespace OpenTK float cos = (float)System.Math.Cos(angle); float sin = (float)System.Math.Sin(angle); - result = Identity; result.Row0.X = cos; result.Row0.Y = sin; + result.Row0.Z = 0; result.Row1.X = -sin; result.Row1.Y = cos; + result.Row1.Z = 0; + result.Row2.X = 0; + result.Row2.Y = 0; + result.Row2.Z = 1; + result.Row3.X = 0; + result.Row3.Y = 0; + result.Row3.Z = 0; } /// @@ -448,7 +469,15 @@ namespace OpenTK /// The resulting Matrix4 instance. public static void CreateTranslation(float x, float y, float z, out Matrix4x3 result) { - result = Identity; + result.Row0.X = 1; + result.Row0.Y = 0; + result.Row0.Z = 0; + result.Row1.X = 0; + result.Row1.Y = 1; + result.Row1.Z = 0; + result.Row2.X = 0; + result.Row2.Y = 0; + result.Row2.Z = 1; result.Row3.X = x; result.Row3.Y = y; result.Row3.Z = z; @@ -461,7 +490,15 @@ namespace OpenTK /// The resulting Matrix4 instance. public static void CreateTranslation(ref Vector3 vector, out Matrix4x3 result) { - result = Identity; + result.Row0.X = 1; + result.Row0.Y = 0; + result.Row0.Z = 0; + result.Row1.X = 0; + result.Row1.Y = 1; + result.Row1.Z = 0; + result.Row2.X = 0; + result.Row2.Y = 0; + result.Row2.Z = 1; result.Row3.X = vector.X; result.Row3.Y = vector.Y; result.Row3.Z = vector.Z; @@ -526,10 +563,19 @@ namespace OpenTK /// A scaling matrix public static Matrix4x3 CreateScale(float x, float y, float z) { - Matrix4x3 result = Identity; + Matrix4x3 result; result.Row0.X = x; + result.Row0.Y = 0; + result.Row0.Z = 0; + result.Row1.X = 0; result.Row1.Y = y; + result.Row1.Z = 0; + result.Row2.X = 0; + result.Row2.Y = 0; result.Row2.Z = z; + result.Row3.X = 0; + result.Row3.Y = 0; + result.Row3.Z = 0; return result; } diff --git a/Source/OpenTK/Math/Vector2d.cs b/Source/OpenTK/Math/Vector2d.cs index 9c81ca69..82c89722 100644 --- a/Source/OpenTK/Math/Vector2d.cs +++ b/Source/OpenTK/Math/Vector2d.cs @@ -44,17 +44,17 @@ namespace OpenTK /// /// Defines a unit-length Vector2d that points towards the X-axis. /// - public static Vector2d UnitX = new Vector2d(1, 0); + public static readonly Vector2d UnitX = new Vector2d(1, 0); /// /// Defines a unit-length Vector2d that points towards the Y-axis. /// - public static Vector2d UnitY = new Vector2d(0, 1); + public static readonly Vector2d UnitY = new Vector2d(0, 1); /// /// Defines a zero-length Vector2d. /// - public static Vector2d Zero = new Vector2d(0, 0); + public static readonly Vector2d Zero = new Vector2d(0, 0); /// /// Defines an instance with all components set to 1. diff --git a/Source/OpenTK/Math/Vector4.cs b/Source/OpenTK/Math/Vector4.cs index ac15479a..40b23bfb 100644 --- a/Source/OpenTK/Math/Vector4.cs +++ b/Source/OpenTK/Math/Vector4.cs @@ -60,27 +60,27 @@ namespace OpenTK /// /// Defines a unit-length Vector4 that points towards the X-axis. /// - public static Vector4 UnitX = new Vector4(1, 0, 0, 0); + public static readonly Vector4 UnitX = new Vector4(1, 0, 0, 0); /// /// Defines a unit-length Vector4 that points towards the Y-axis. /// - public static Vector4 UnitY = new Vector4(0, 1, 0, 0); + public static readonly Vector4 UnitY = new Vector4(0, 1, 0, 0); /// /// Defines a unit-length Vector4 that points towards the Z-axis. /// - public static Vector4 UnitZ = new Vector4(0, 0, 1, 0); + public static readonly Vector4 UnitZ = new Vector4(0, 0, 1, 0); /// /// Defines a unit-length Vector4 that points towards the W-axis. /// - public static Vector4 UnitW = new Vector4(0, 0, 0, 1); + public static readonly Vector4 UnitW = new Vector4(0, 0, 0, 1); /// /// Defines a zero-length Vector4. /// - public static Vector4 Zero = new Vector4(0, 0, 0, 0); + public static readonly Vector4 Zero = new Vector4(0, 0, 0, 0); /// /// Defines an instance with all components set to 1. diff --git a/Source/OpenTK/Math/Vector4d.cs b/Source/OpenTK/Math/Vector4d.cs index 0932f738..0480460f 100644 --- a/Source/OpenTK/Math/Vector4d.cs +++ b/Source/OpenTK/Math/Vector4d.cs @@ -58,27 +58,27 @@ namespace OpenTK /// /// Defines a unit-length Vector4d that points towards the X-axis. /// - public static Vector4d UnitX = new Vector4d(1, 0, 0, 0); + public static readonly Vector4d UnitX = new Vector4d(1, 0, 0, 0); /// /// Defines a unit-length Vector4d that points towards the Y-axis. /// - public static Vector4d UnitY = new Vector4d(0, 1, 0, 0); + public static readonly Vector4d UnitY = new Vector4d(0, 1, 0, 0); /// /// Defines a unit-length Vector4d that points towards the Z-axis. /// - public static Vector4d UnitZ = new Vector4d(0, 0, 1, 0); + public static readonly Vector4d UnitZ = new Vector4d(0, 0, 1, 0); /// /// Defines a unit-length Vector4d that points towards the W-axis. /// - public static Vector4d UnitW = new Vector4d(0, 0, 0, 1); + public static readonly Vector4d UnitW = new Vector4d(0, 0, 0, 1); /// /// Defines a zero-length Vector4d. /// - public static Vector4d Zero = new Vector4d(0, 0, 0, 0); + public static readonly Vector4d Zero = new Vector4d(0, 0, 0, 0); /// /// Defines an instance with all components set to 1.