ソースを参照

Fixed singularity check for quatLookAt #770

christophe 5 年 前
コミット
b4c5bb6c1a
2 ファイル変更5 行追加2 行削除
  1. 4 2
      glm/gtc/quaternion.inl
  2. 1 0
      readme.md

+ 4 - 2
glm/gtc/quaternion.inl

@@ -175,7 +175,8 @@ namespace glm
 		mat<3, 3, T, Q> Result;
 
 		Result[2] = -direction;
-		Result[0] = normalize(cross(up, Result[2]));
+		vec<3, T, Q> const& Right = cross(up, Result[2]);
+		Result[0] = Right * inversesqrt(max(static_cast<T>(0.00001), dot(Right, Right)));
 		Result[1] = cross(Result[2], Result[0]);
 
 		return quat_cast(Result);
@@ -187,7 +188,8 @@ namespace glm
 		mat<3, 3, T, Q> Result;
 
 		Result[2] = direction;
-		Result[0] = normalize(cross(up, Result[2]));
+		vec<3, T, Q> const& Right = cross(up, Result[2]);
+		Result[0] = Right * inversesqrt(max(static_cast<T>(0.00001), dot(Right, Right)));
 		Result[1] = cross(Result[2], Result[0]);
 
 		return quat_cast(Result);

+ 1 - 0
readme.md

@@ -65,6 +65,7 @@ glm::mat4 camera(float Translate, glm::vec2 const& Rotate)
 - Fixed unnecessary warnings from matrix_projection.inl #995
 - Fixed quaternion slerp overload which interpolates with extra spins #996
 - Fixed for glm::length using arch64 #992
+- Fixed singularity check for quatLookAt #770
 
 ### [GLM 0.9.9.7](https://github.com/g-truc/glm/releases/tag/0.9.9.7) - 2020-01-05
 #### Improvements: