xzw пре 2 недеља
родитељ
комит
fbef6a574a
2 измењених фајлова са 13 додато и 10 уклоњено
  1. 1 1
      src/custom/modules/mergeModel/MergeEditor.js
  2. 12 9
      src/custom/utils/math.js

+ 1 - 1
src/custom/modules/mergeModel/MergeEditor.js

@@ -133,7 +133,7 @@ let MergeEditor = {
                 showRotXYZE : true,
                 minScale: new THREE.Vector3(0.00001,0.00001,0.00001)
             });
-            //this.transformControls.space = 'local'//为了在当前方向上平移
+            this.transformControls.space = 'local'//为了在当前方向上平移
             this.transformControls.setSize(1.5)
             viewer.scene.scene.add(this.transformControls)
             this.transformControls._gizmo.hideAxis = {rotate:['e'] ,scale:['x','y','z' ] }

+ 12 - 9
src/custom/utils/math.js

@@ -443,15 +443,18 @@ var math = {
         
     } */
     
-    getQuaByAim: function (aim, center=new THREE.Vector3) { 
-        let forward = new THREE.Vector3(0, 1, 0)
-        let qua1 = new THREE.Quaternion().setFromUnitVectors(forward, aim.clone().sub(center).normalize())
-        /*  var _ = (new THREE.Matrix4).lookAt(center,aim,   new THREE.Vector3(0,1,0));  
-        let qua2 = (new THREE.Quaternion).setFromRotationMatrix(_);
-        let rot1 = new THREE.Euler().setFromQuaternion(qua1)
-        let rot2 = new THREE.Euler().setFromQuaternion(qua2)  //奇怪,qua2怎么都不对
-        console.log(rot1,rot2) */
-        return qua1
+    getQuaByAim: function (aim, center=new THREE.Vector3,  { rollFree, forward, up}={}){ 
+        let aimQua
+        if(rollFree){
+            forward = forward || new THREE.Vector3(0, 1, 0)
+            aimQua = new THREE.Quaternion().setFromUnitVectors(forward, aim.clone().sub(center).normalize())//一个单位向量旋转到另一个单位向量的最短路径
+        }else{
+            up = up || new THREE.Vector3(0, 0, 1)
+            let _ = (new THREE.Matrix4).lookAt(center, aim, up)  
+            aimQua = (new THREE.Quaternion).setFromRotationMatrix(_);
+        } 
+        //这二者结果不一定相同,setFromUnitVectors可能使roll不为0
+        return aimQua
     },
     getAimByQua: function (quaternion, center=new THREE.Vector3) {
         return new THREE.Vector3(0, 0, -1).applyQuaternion(quaternion).add(center)