Переглянути джерело

mol-math: fixed makeRotation edge case

David Sehnal 6 роки тому
батько
коміт
9f99a2c453
1 змінених файлів з 6 додано та 0 видалено
  1. 6 0
      src/mol-math/linear-algebra/3d/vec3.ts

+ 6 - 0
src/mol-math/linear-algebra/3d/vec3.ts

@@ -452,9 +452,15 @@ namespace Vec3 {
     }
 
     const rotTemp = zero();
+    const flipMatrix = Mat4.fromScaling(Mat4.zero(), create(-1, -1, -1))
     export function makeRotation(mat: Mat4, a: Vec3, b: Vec3): Mat4 {
         const by = angle(a, b);
         if (Math.abs(by) < 0.0001) return Mat4.setIdentity(mat);
+        if (Math.abs(by - Math.PI) < EPSILON.Value) {
+            // here, axis can be [0,0,0] but the rotation is a simple flip
+            Mat4.copy(mat, flipMatrix);
+            return mat;
+        }
         const axis = cross(rotTemp, a, b);
         return Mat4.fromRotation(mat, by, axis);
     }