public static void CreateRT(ref Quaternion rotation, ref Vector3 translation, out Matrix4x4 result) { Matrix4x4ex.QuaternionToRotationMatrix(ref rotation, out result); result.m03 = translation.x; result.m13 = translation.y; result.m23 = translation.z; }
public static void CreateRT(ref Vector3 rotationOrigin, ref Quaternion rotation, ref Vector3 translation, out Matrix4x4 result) { Matrix4x4ex.QuaternionToRotationMatrix(ref rotation, out result); result.m03 = -(result.m00 * rotationOrigin.x + result.m01 * rotationOrigin.y + result.m02 * rotationOrigin.z - rotationOrigin.x) + translation.x; result.m13 = -(result.m10 * rotationOrigin.x + result.m11 * rotationOrigin.y + result.m12 * rotationOrigin.z - rotationOrigin.y) + translation.y; result.m23 = -(result.m20 * rotationOrigin.x + result.m21 * rotationOrigin.y + result.m22 * rotationOrigin.z - rotationOrigin.z) + translation.z; }
public static void CreateRotation(Vector3 rotationOrigin, Quaternion rotation, out Matrix4x4 result) { Matrix4x4ex.QuaternionToRotationMatrix(ref rotation, out result); result.m03 = -(result.m00 * rotationOrigin.x + result.m01 * rotationOrigin.y + result.m02 * rotationOrigin.z - rotationOrigin.x); result.m13 = -(result.m10 * rotationOrigin.x + result.m11 * rotationOrigin.y + result.m12 * rotationOrigin.z - rotationOrigin.y); result.m23 = -(result.m20 * rotationOrigin.x + result.m21 * rotationOrigin.y + result.m22 * rotationOrigin.z - rotationOrigin.z); }
public static void CreateSRT(float scaling, ref Quaternion rotation, ref Vector3 translation, out Matrix4x4 result) { Matrix4x4ex.QuaternionToRotationMatrix(ref rotation, out result); result.m00 *= scaling; result.m10 *= scaling; result.m20 *= scaling; result.m01 *= scaling; result.m11 *= scaling; result.m21 *= scaling; result.m02 *= scaling; result.m12 *= scaling; result.m22 *= scaling; result.m03 = translation.x; result.m13 = translation.y; result.m23 = translation.z; }
public static void MultiplyLeft(ref Matrix4x4 matrix1, ref Matrix4x4 matrix0) { Matrix4x4 matrix4x; matrix4x.m00 = matrix0.m00 * matrix1.m00 + matrix0.m01 * matrix1.m10 + matrix0.m02 * matrix1.m20 + matrix0.m03 * matrix1.m30; matrix4x.m01 = matrix0.m00 * matrix1.m01 + matrix0.m01 * matrix1.m11 + matrix0.m02 * matrix1.m21 + matrix0.m03 * matrix1.m31; matrix4x.m02 = matrix0.m00 * matrix1.m02 + matrix0.m01 * matrix1.m12 + matrix0.m02 * matrix1.m22 + matrix0.m03 * matrix1.m32; matrix4x.m03 = matrix0.m00 * matrix1.m03 + matrix0.m01 * matrix1.m13 + matrix0.m02 * matrix1.m23 + matrix0.m03 * matrix1.m33; matrix4x.m10 = matrix0.m10 * matrix1.m00 + matrix0.m11 * matrix1.m10 + matrix0.m12 * matrix1.m20 + matrix0.m13 * matrix1.m30; matrix4x.m11 = matrix0.m10 * matrix1.m01 + matrix0.m11 * matrix1.m11 + matrix0.m12 * matrix1.m21 + matrix0.m13 * matrix1.m31; matrix4x.m12 = matrix0.m10 * matrix1.m02 + matrix0.m11 * matrix1.m12 + matrix0.m12 * matrix1.m22 + matrix0.m13 * matrix1.m32; matrix4x.m13 = matrix0.m10 * matrix1.m03 + matrix0.m11 * matrix1.m13 + matrix0.m12 * matrix1.m23 + matrix0.m13 * matrix1.m33; matrix4x.m20 = matrix0.m20 * matrix1.m00 + matrix0.m21 * matrix1.m10 + matrix0.m22 * matrix1.m20 + matrix0.m23 * matrix1.m30; matrix4x.m21 = matrix0.m20 * matrix1.m01 + matrix0.m21 * matrix1.m11 + matrix0.m22 * matrix1.m21 + matrix0.m23 * matrix1.m31; matrix4x.m22 = matrix0.m20 * matrix1.m02 + matrix0.m21 * matrix1.m12 + matrix0.m22 * matrix1.m22 + matrix0.m23 * matrix1.m32; matrix4x.m23 = matrix0.m20 * matrix1.m03 + matrix0.m21 * matrix1.m13 + matrix0.m22 * matrix1.m23 + matrix0.m23 * matrix1.m33; matrix4x.m30 = matrix0.m30 * matrix1.m00 + matrix0.m31 * matrix1.m10 + matrix0.m32 * matrix1.m20 + matrix0.m33 * matrix1.m30; matrix4x.m31 = matrix0.m30 * matrix1.m01 + matrix0.m31 * matrix1.m11 + matrix0.m32 * matrix1.m21 + matrix0.m33 * matrix1.m31; matrix4x.m32 = matrix0.m30 * matrix1.m02 + matrix0.m31 * matrix1.m12 + matrix0.m32 * matrix1.m22 + matrix0.m33 * matrix1.m32; matrix4x.m33 = matrix0.m30 * matrix1.m03 + matrix0.m31 * matrix1.m13 + matrix0.m32 * matrix1.m23 + matrix0.m33 * matrix1.m33; Matrix4x4ex.CopyMatrix(ref matrix4x, out matrix1); }
public void Include(ref Box3 box) { Box3 box2 = default(Box3); box2.Center = 0.5f * (this.Center + box.Center); Matrix4x4 matrix4x; Matrix4x4ex.CreateRotationFromColumns(ref this.Axis0, ref this.Axis1, ref this.Axis2, out matrix4x); Quaternion a; Matrix4x4ex.RotationMatrixToQuaternion(ref matrix4x, out a); Matrix4x4 matrix4x2; Matrix4x4ex.CreateRotationFromColumns(ref box.Axis0, ref box.Axis1, ref box.Axis2, out matrix4x2); Quaternion b; Matrix4x4ex.RotationMatrixToQuaternion(ref matrix4x2, out b); if (Quaternion.Dot(a, b) < 0f) { b.x = -b.x; b.y = -b.y; b.z = -b.z; b.w = -b.w; } Quaternion quaternion; quaternion.x = a.x + b.x; quaternion.y = a.x + b.y; quaternion.z = a.x + b.z; quaternion.w = a.x + b.w; float num = Mathfex.InvSqrt(Quaternion.Dot(quaternion, quaternion)); quaternion.x *= num; quaternion.y *= num; quaternion.z *= num; quaternion.w *= num; Matrix4x4 matrix4x3; Matrix4x4ex.QuaternionToRotationMatrix(ref quaternion, out matrix4x3); box2.Axis0 = matrix4x3.GetColumn(0); box2.Axis1 = matrix4x3.GetColumn(1); box2.Axis2 = matrix4x3.GetColumn(2); Vector3 zero = Vector3ex.Zero; Vector3 zero2 = Vector3ex.Zero; Vector3[] array = this.CalcVertices(); for (int i = 0; i < 8; i++) { Vector3 vector = array[i] - box2.Center; for (int j = 0; j < 3; j++) { float num2 = vector.Dot(box2.GetAxis(j)); if (num2 > zero2[j]) { zero2[j] = num2; } else if (num2 < zero[j]) { zero[j] = num2; } } } box.CalcVertices(out array[0], out array[1], out array[2], out array[3], out array[4], out array[5], out array[6], out array[7]); for (int i = 0; i < 8; i++) { Vector3 vector = array[i] - box2.Center; for (int j = 0; j < 3; j++) { float num2 = vector.Dot(box2.GetAxis(j)); if (num2 > zero2[j]) { zero2[j] = num2; } else if (num2 < zero[j]) { zero[j] = num2; } } } for (int j = 0; j < 3; j++) { box2.Center += 0.5f * (zero2[j] + zero[j]) * box2.GetAxis(j); box2.Extents[j] = 0.5f * (zero2[j] - zero[j]); } this = box2; }
public static void CreateRotationEuler(ref Vector3 eulerAngles, out Matrix4x4 matrix) { Quaternion quaternion = Quaternion.Euler(eulerAngles.x, eulerAngles.y, eulerAngles.z); Matrix4x4ex.QuaternionToRotationMatrix(ref quaternion, out matrix); }
public static void CreateRotationEuler(float eulerX, float eulerY, float eulerZ, out Matrix4x4 matrix) { Quaternion quaternion = Quaternion.Euler(eulerX, eulerY, eulerZ); Matrix4x4ex.QuaternionToRotationMatrix(ref quaternion, out matrix); }