Mega Code Archive

 
Categories / C# / 2D Graphics
 

Matrix Util

using System; using System.Collections.Generic; using System.Text; using Microsoft.Xna.Framework; public class Utils {     public static Vector3 Gravity = new Vector3(0.0f, -9.81f, 0.0f);     public static void AddScaledVector(ref Vector3 vector, float scale, ref Vector3 result)     {         Vector3 temp;         Vector3.Multiply(ref vector, scale, out temp);         Vector3.Add(ref result, ref temp, out result);     }     public static void AddScaledVector(ref Vector3 vector, float scale, ref Quaternion result)     {         Quaternion q = new Quaternion(vector, scale);         Quaternion.Multiply(ref q, ref result, out q);         result.W += q.W * 0.5f;         result.X += q.X * 0.5f;         result.Y += q.Y * 0.5f;         result.Z += q.Z * 0.5f;     }     public static Vector3 TransformInverseDirection(ref Vector3 vector, ref Matrix tensor)     {         return new Vector3(             vector.X * tensor.M11 + vector.Y * tensor.M21 + vector.Z * tensor.M31,             vector.X * tensor.M12 + vector.Y * tensor.M22 + vector.Z * tensor.M32,             vector.X * tensor.M13 + vector.Y * tensor.M23 + vector.Z * tensor.M33             );     }     public static void LinearInterpolation(ref Matrix a, ref Matrix b, float prop, out Matrix result)     {         // TODO: Optimize if needed!!         Matrix t1;         Matrix.Multiply(ref a, prop, out t1);         Matrix t2;         Matrix.Multiply(ref b, (1 - prop), out t2);         Matrix.Add(ref t1, ref t1, out result);     }     public static Matrix CreateMatrix(float m11, float m12, float m13, float m21, float m22, float m23, float m31, float m32, float m33)     {         Matrix m = Matrix.Identity;         m.M11 = m11; m.M12 = m12; m.M13 = m13;         m.M21 = m21; m.M22 = m22; m.M23 = m23;         m.M31 = m31; m.M32 = m32; m.M33 = m33;         return m;     } }