Browse Source

Fix precision loss on small angles in qua's angle

Quentin Santos 6 years ago
parent
commit
3a41107d10
1 changed files with 7 additions and 0 deletions
  1. 7 0
      glm/ext/quaternion_trigonometric.inl

+ 7 - 0
glm/ext/quaternion_trigonometric.inl

@@ -1,8 +1,15 @@
+#include "scalar_constants.hpp"
+
 namespace glm
 {
 	template<typename T, qualifier Q>
 	GLM_FUNC_QUALIFIER T angle(qua<T, Q> const& x)
 	{
+		if (abs(x.w) > cos_one_over_two<T>())
+		{
+			return asin(sqrt(x.x * x.x + x.y * x.y + x.z * x.z)) * static_cast<T>(2);
+		}
+
 		return acos(x.w) * static_cast<T>(2);
 	}