math struct layouts + change Matrix projections to use right handed NDC space
							parent
							
								
									f2487cd71b
								
							
						
					
					
						commit
						45861e122d
					
				|  | @ -17,6 +17,7 @@ | ||||||
| #region Using Statements | #region Using Statements | ||||||
| using System; | using System; | ||||||
| using System.Diagnostics; | using System.Diagnostics; | ||||||
|  | using System.Runtime.InteropServices; | ||||||
| 
 | 
 | ||||||
| #endregion | #endregion | ||||||
| 
 | 
 | ||||||
|  | @ -24,9 +25,11 @@ namespace MoonWorks.Math | ||||||
| { | { | ||||||
| 	/// <summary> | 	/// <summary> | ||||||
| 	/// Represents the right-handed 4x4 floating point matrix, which can store translation, scale and rotation information. | 	/// Represents the right-handed 4x4 floating point matrix, which can store translation, scale and rotation information. | ||||||
|  | 	/// This differs from XNA in one major way: projections are modified to give right handed NDC space. | ||||||
| 	/// </summary> | 	/// </summary> | ||||||
| 	[Serializable] | 	[Serializable] | ||||||
| 	[DebuggerDisplay("{DebugDisplayString,nq}")] | 	[DebuggerDisplay("{DebugDisplayString,nq}")] | ||||||
|  | 	[StructLayout(LayoutKind.Sequential)] | ||||||
| 	public struct Matrix : IEquatable<Matrix> | 	public struct Matrix : IEquatable<Matrix> | ||||||
| 	{ | 	{ | ||||||
| 		#region Public Properties | 		#region Public Properties | ||||||
|  | @ -973,7 +976,7 @@ namespace MoonWorks.Math | ||||||
| 		) { | 		) { | ||||||
| 			result.M11 = 2f / width; | 			result.M11 = 2f / width; | ||||||
| 			result.M12 = result.M13 = result.M14 = 0f; | 			result.M12 = result.M13 = result.M14 = 0f; | ||||||
| 			result.M22 = 2f / height; | 			result.M22 = -2f / height; | ||||||
| 			result.M21 = result.M23 = result.M24 = 0f; | 			result.M21 = result.M23 = result.M24 = 0f; | ||||||
| 			result.M33 = 1f / (zNearPlane - zFarPlane); | 			result.M33 = 1f / (zNearPlane - zFarPlane); | ||||||
| 			result.M31 = result.M32 = result.M34 = 0f; | 			result.M31 = result.M32 = result.M34 = 0f; | ||||||
|  | @ -1037,7 +1040,7 @@ namespace MoonWorks.Math | ||||||
| 			result.M13 = 0.0f; | 			result.M13 = 0.0f; | ||||||
| 			result.M14 = 0.0f; | 			result.M14 = 0.0f; | ||||||
| 			result.M21 = 0.0f; | 			result.M21 = 0.0f; | ||||||
| 			result.M22 = (float) (2.0 / ((double) top - (double) bottom)); | 			result.M22 = -(float) (2.0 / ((double) top - (double) bottom)); | ||||||
| 			result.M23 = 0.0f; | 			result.M23 = 0.0f; | ||||||
| 			result.M24 = 0.0f; | 			result.M24 = 0.0f; | ||||||
| 			result.M31 = 0.0f; | 			result.M31 = 0.0f; | ||||||
|  | @ -1107,7 +1110,7 @@ namespace MoonWorks.Math | ||||||
| 			} | 			} | ||||||
| 			result.M11 = (2f * nearPlaneDistance) / width; | 			result.M11 = (2f * nearPlaneDistance) / width; | ||||||
| 			result.M12 = result.M13 = result.M14 = 0f; | 			result.M12 = result.M13 = result.M14 = 0f; | ||||||
| 			result.M22 = (2f * nearPlaneDistance) / height; | 			result.M22 = -(2f * nearPlaneDistance) / height; | ||||||
| 			result.M21 = result.M23 = result.M24 = 0f; | 			result.M21 = result.M23 = result.M24 = 0f; | ||||||
| 			result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance); | 			result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance); | ||||||
| 			result.M31 = result.M32 = 0f; | 			result.M31 = result.M32 = 0f; | ||||||
|  | @ -1176,10 +1179,9 @@ namespace MoonWorks.Math | ||||||
| 				throw new ArgumentException("nearPlaneDistance >= farPlaneDistance"); | 				throw new ArgumentException("nearPlaneDistance >= farPlaneDistance"); | ||||||
| 			} | 			} | ||||||
| 			float num = 1f / ((float) System.Math.Tan((double) (fieldOfView * 0.5f))); | 			float num = 1f / ((float) System.Math.Tan((double) (fieldOfView * 0.5f))); | ||||||
| 			float num9 = num / aspectRatio; | 			result.M11 = num / aspectRatio; | ||||||
| 			result.M11 = num9; |  | ||||||
| 			result.M12 = result.M13 = result.M14 = 0; | 			result.M12 = result.M13 = result.M14 = 0; | ||||||
| 			result.M22 = num; | 			result.M22 = -num; | ||||||
| 			result.M21 = result.M23 = result.M24 = 0; | 			result.M21 = result.M23 = result.M24 = 0; | ||||||
| 			result.M31 = result.M32 = 0f; | 			result.M31 = result.M32 = 0f; | ||||||
| 			result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance); | 			result.M33 = farPlaneDistance / (nearPlaneDistance - farPlaneDistance); | ||||||
|  | @ -1255,7 +1257,7 @@ namespace MoonWorks.Math | ||||||
| 			} | 			} | ||||||
| 			result.M11 = (2f * nearPlaneDistance) / (right - left); | 			result.M11 = (2f * nearPlaneDistance) / (right - left); | ||||||
| 			result.M12 = result.M13 = result.M14 = 0; | 			result.M12 = result.M13 = result.M14 = 0; | ||||||
| 			result.M22 = (2f * nearPlaneDistance) / (top - bottom); | 			result.M22 = -(2f * nearPlaneDistance) / (top - bottom); | ||||||
| 			result.M21 = result.M23 = result.M24 = 0; | 			result.M21 = result.M23 = result.M24 = 0; | ||||||
| 			result.M31 = (left + right) / (right - left); | 			result.M31 = (left + right) / (right - left); | ||||||
| 			result.M32 = (top + bottom) / (top - bottom); | 			result.M32 = (top + bottom) / (top - bottom); | ||||||
|  |  | ||||||
|  | @ -17,6 +17,7 @@ | ||||||
| #region Using Statements | #region Using Statements | ||||||
| using System; | using System; | ||||||
| using System.Diagnostics; | using System.Diagnostics; | ||||||
|  | using System.Runtime.InteropServices; | ||||||
| 
 | 
 | ||||||
| #endregion | #endregion | ||||||
| 
 | 
 | ||||||
|  | @ -27,6 +28,7 @@ namespace MoonWorks.Math | ||||||
| 	/// </summary> | 	/// </summary> | ||||||
| 	[Serializable] | 	[Serializable] | ||||||
| 	[DebuggerDisplay("{DebugDisplayString,nq}")] | 	[DebuggerDisplay("{DebugDisplayString,nq}")] | ||||||
|  | 	[StructLayout(LayoutKind.Explicit)] | ||||||
| 	public struct Vector2 : IEquatable<Vector2> | 	public struct Vector2 : IEquatable<Vector2> | ||||||
| 	{ | 	{ | ||||||
| 		#region Public Static Properties | 		#region Public Static Properties | ||||||
|  | @ -97,11 +99,13 @@ namespace MoonWorks.Math | ||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// The x coordinate of this <see cref="Vector2"/>. | 		/// The x coordinate of this <see cref="Vector2"/>. | ||||||
| 		/// </summary> | 		/// </summary> | ||||||
|  | 		[FieldOffset(0)] | ||||||
| 		public float X; | 		public float X; | ||||||
| 
 | 
 | ||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// The y coordinate of this <see cref="Vector2"/>. | 		/// The y coordinate of this <see cref="Vector2"/>. | ||||||
| 		/// </summary> | 		/// </summary> | ||||||
|  | 		[FieldOffset(4)] | ||||||
| 		public float Y; | 		public float Y; | ||||||
| 
 | 
 | ||||||
| 		#endregion | 		#endregion | ||||||
|  |  | ||||||
|  | @ -17,6 +17,7 @@ | ||||||
| #region Using Statements | #region Using Statements | ||||||
| using System; | using System; | ||||||
| using System.Diagnostics; | using System.Diagnostics; | ||||||
|  | using System.Runtime.InteropServices; | ||||||
| using System.Text; | using System.Text; | ||||||
| 
 | 
 | ||||||
| #endregion | #endregion | ||||||
|  | @ -28,6 +29,7 @@ namespace MoonWorks.Math | ||||||
| 	/// </summary> | 	/// </summary> | ||||||
| 	[Serializable] | 	[Serializable] | ||||||
| 	[DebuggerDisplay("{DebugDisplayString,nq}")] | 	[DebuggerDisplay("{DebugDisplayString,nq}")] | ||||||
|  | 	[StructLayout(LayoutKind.Explicit)] | ||||||
| 	public struct Vector3 : IEquatable<Vector3> | 	public struct Vector3 : IEquatable<Vector3> | ||||||
| 	{ | 	{ | ||||||
| 		#region Public Static Properties | 		#region Public Static Properties | ||||||
|  | @ -192,16 +194,19 @@ namespace MoonWorks.Math | ||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// The x coordinate of this <see cref="Vector3"/>. | 		/// The x coordinate of this <see cref="Vector3"/>. | ||||||
| 		/// </summary> | 		/// </summary> | ||||||
|  | 		[FieldOffset(0)] | ||||||
| 		public float X; | 		public float X; | ||||||
| 
 | 
 | ||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// The y coordinate of this <see cref="Vector3"/>. | 		/// The y coordinate of this <see cref="Vector3"/>. | ||||||
| 		/// </summary> | 		/// </summary> | ||||||
|  | 		[FieldOffset(4)] | ||||||
| 		public float Y; | 		public float Y; | ||||||
| 
 | 
 | ||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// The z coordinate of this <see cref="Vector3"/>. | 		/// The z coordinate of this <see cref="Vector3"/>. | ||||||
| 		/// </summary> | 		/// </summary> | ||||||
|  | 		[FieldOffset(8)] | ||||||
| 		public float Z; | 		public float Z; | ||||||
| 
 | 
 | ||||||
| 		#endregion | 		#endregion | ||||||
|  |  | ||||||
|  | @ -17,6 +17,7 @@ | ||||||
| #region Using Statements | #region Using Statements | ||||||
| using System; | using System; | ||||||
| using System.Diagnostics; | using System.Diagnostics; | ||||||
|  | using System.Runtime.InteropServices; | ||||||
| 
 | 
 | ||||||
| #endregion | #endregion | ||||||
| 
 | 
 | ||||||
|  | @ -27,6 +28,7 @@ namespace MoonWorks.Math | ||||||
| 	/// </summary> | 	/// </summary> | ||||||
| 	[Serializable] | 	[Serializable] | ||||||
| 	[DebuggerDisplay("{DebugDisplayString,nq}")] | 	[DebuggerDisplay("{DebugDisplayString,nq}")] | ||||||
|  | 	[StructLayout(LayoutKind.Explicit)] | ||||||
| 	public struct Vector4 : IEquatable<Vector4> | 	public struct Vector4 : IEquatable<Vector4> | ||||||
| 	{ | 	{ | ||||||
| 		#region Public Static Properties | 		#region Public Static Properties | ||||||
|  | @ -121,21 +123,25 @@ namespace MoonWorks.Math | ||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// The x coordinate of this <see cref="Vector4"/>. | 		/// The x coordinate of this <see cref="Vector4"/>. | ||||||
| 		/// </summary> | 		/// </summary> | ||||||
|  | 		[FieldOffset(0)] | ||||||
| 		public float X; | 		public float X; | ||||||
| 
 | 
 | ||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// The y coordinate of this <see cref="Vector4"/>. | 		/// The y coordinate of this <see cref="Vector4"/>. | ||||||
| 		/// </summary> | 		/// </summary> | ||||||
|  | 		[FieldOffset(4)] | ||||||
| 		public float Y; | 		public float Y; | ||||||
| 
 | 
 | ||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// The z coordinate of this <see cref="Vector4"/>. | 		/// The z coordinate of this <see cref="Vector4"/>. | ||||||
| 		/// </summary> | 		/// </summary> | ||||||
|  | 		[FieldOffset(8)] | ||||||
| 		public float Z; | 		public float Z; | ||||||
| 
 | 
 | ||||||
| 		/// <summary> | 		/// <summary> | ||||||
| 		/// The w coordinate of this <see cref="Vector4"/>. | 		/// The w coordinate of this <see cref="Vector4"/>. | ||||||
| 		/// </summary> | 		/// </summary> | ||||||
|  | 		[FieldOffset(12)] | ||||||
| 		public float W; | 		public float W; | ||||||
| 
 | 
 | ||||||
| 		#endregion | 		#endregion | ||||||
|  |  | ||||||
		Loading…
	
		Reference in New Issue