2016-09-16 100 views

回答

1

由于轨迹球控制旋转摄像头而不是网格。旋转后的旋转似乎很奇怪。因此,而不是使用轨迹球控制旋转基于四元数的网格。 在mousemove事件包括该代码

trackBallControls.noRotate = true; 
      if (isDragging === true) { 
       var deltaMove = { 
        x: event.offsetX -previousMousePosition.x, 
        y: event.offsetY -previousMousePosition.y 
       }; 
       var deltaRotationQuaternion = new THREE.Quaternion() 
         .setFromEuler(new THREE.Euler(toRadians(deltaMove.y * 0.3), 
           toRadians(deltaMove.x * 0.3), 
           0, 
           'XYZ' 
           )); 
       if (event.which === 1) { 
        mesh.quaternion.multiplyQuaternions(deltaRotationQuaternion, mesh.quaternion); 
       } 
      } 
      previousMousePosition = { 
       x: event.offsetX, 
       y: event.offsetY 
      }; 

在鼠标向上事件集isDragging为false。 在mousedown中设置isDragging为true。

function toRadians(angle) { 
      return angle * (Math.PI/180); 
     }