public static void CreateFromQuaternion(ref Quaternion quaternion, out Matrix3x3 result)
{
float XX = 2 * quaternion.X * quaternion.X;
float YY = 2 * quaternion.Y * quaternion.Y;
float ZZ = 2 * quaternion.Z * quaternion.Z;
float XY = 2 * quaternion.X * quaternion.Y;
float XZ = 2 * quaternion.X * quaternion.Z;
float XW = 2 * quaternion.X * quaternion.W;
float YZ = 2 * quaternion.Y * quaternion.Z;
float YW = 2 * quaternion.Y * quaternion.W;
float ZW = 2 * quaternion.Z * quaternion.W;
result.M11 = 1 - YY - ZZ;
result.M21 = XY - ZW;
result.M31 = XZ + YW;
result.M12 = XY + ZW;
result.M22 = 1 - XX - ZZ;
result.M32 = YZ - XW;
result.M13 = XZ - YW;
result.M23 = YZ + XW;
result.M33 = 1 - XX - YY;
}