Procházet zdrojové kódy

Merge pull request #123 from dustin-biser/0.9.5

Modified quaternion mat3_cast for faster results
Christophe Riccio před 12 roky
rodič
revize
f9d4aafb6d
1 změnil soubory, kde provedl 21 přidání a 11 odebrání
  1. 21 11
      glm/gtc/quaternion.inl

+ 21 - 11
glm/gtc/quaternion.inl

@@ -668,17 +668,27 @@ namespace detail
 	)
 	{
 		detail::tmat3x3<T, P> Result(T(1));
-		Result[0][0] = 1 - 2 * q.y * q.y - 2 * q.z * q.z;
-		Result[0][1] = 2 * q.x * q.y + 2 * q.w * q.z;
-		Result[0][2] = 2 * q.x * q.z - 2 * q.w * q.y;
-
-		Result[1][0] = 2 * q.x * q.y - 2 * q.w * q.z;
-		Result[1][1] = 1 - 2 * q.x * q.x - 2 * q.z * q.z;
-		Result[1][2] = 2 * q.y * q.z + 2 * q.w * q.x;
-
-		Result[2][0] = 2 * q.x * q.z + 2 * q.w * q.y;
-		Result[2][1] = 2 * q.y * q.z - 2 * q.w * q.x;
-		Result[2][2] = 1 - 2 * q.x * q.x - 2 * q.y * q.y;
+		T qxx(q.x * q.x);
+		T qyy(q.y * q.y);
+		T qzz(q.z * q.z);
+		T qxz(q.x * q.z);
+		T qxy(q.x * q.y);
+		T qyz(q.y * q.z);
+		T qwx(q.w * q.x);
+		T qwy(q.w * q.y);
+		T qwz(q.w * q.z);
+
+		Result[0][0] = 1 - 2 * (qyy -  qzz);
+		Result[0][1] = 2 * (qxy + qwz);
+		Result[0][2] = 2 * (qxz - qwy);
+
+		Result[1][0] = 2 * (qxy - qwz);
+		Result[1][1] = 1 - 2 * (qxx -  qzz);
+		Result[1][2] = 2 * (qyz + qwx);
+
+		Result[2][0] = 2 * (qxz + qwy);
+		Result[2][1] = 2 * (qyz - qwx);
+		Result[2][2] = 1 - 2 * (qxx -  qyy);
 		return Result;
 	}