Browse Source

core: cleanup

Daniele Bartolini 5 years ago
parent
commit
ad75fe16cc
1 changed files with 19 additions and 9 deletions
  1. 19 9
      src/core/math/matrix3x3.cpp

+ 19 - 9
src/core/math/matrix3x3.cpp

@@ -35,18 +35,28 @@ Matrix3x3 from_axes(const Vector3& x, const Vector3& y, const Vector3& z)
 
 Matrix3x3 from_quaternion(const Quaternion& r)
 {
+	const float xx = r.x * r.x;
+	const float yy = r.y * r.y;
+	const float zz = r.z * r.z;
+	const float xy = r.x * r.y;
+	const float xz = r.x * r.z;
+	const float yz = r.y * r.z;
+	const float wx = r.w * r.x;
+	const float wy = r.w * r.y;
+	const float wz = r.w * r.z;
+
 	Matrix3x3 m;
-	m.x.x = 1.0f - 2.0f * r.y * r.y - 2.0f * r.z * r.z;
-	m.x.y = 2.0f * r.x * r.y + 2.0f * r.w * r.z;
-	m.x.z = 2.0f * r.x * r.z - 2.0f * r.w * r.y;
+	m.x.x = 1.0f - 2.0f * yy - 2.0f * zz;
+	m.x.y = 2.0f * xy + 2.0f * wz;
+	m.x.z = 2.0f * xz - 2.0f * wy;
 
-	m.y.x = 2.0f * r.x * r.y - 2.0f * r.w * r.z;
-	m.y.y = 1.0f - 2.0f * r.x * r.x - 2.0f * r.z * r.z;
-	m.y.z = 2.0f * r.y * r.z + 2.0f * r.w * r.x;
+	m.y.x = 2.0f * xy - 2.0f * wz;
+	m.y.y = 1.0f - 2.0f * xx - 2.0f * zz;
+	m.y.z = 2.0f * yz + 2.0f * wx;
 
-	m.z.x = 2.0f * r.x * r.z + 2.0f * r.w * r.y;
-	m.z.y = 2.0f * r.y * r.z - 2.0f * r.w * r.x;
-	m.z.z = 1.0f - 2.0f * r.x * r.x - 2.0f * r.y * r.y;
+	m.z.x = 2.0f * xz + 2.0f * wy;
+	m.z.y = 2.0f * yz - 2.0f * wx;
+	m.z.z = 1.0f - 2.0f * xx - 2.0f * yy;
 	return m;
 }