2016-08-25 28 views
4

現在、THREE.jsプロジェクトで作業しています。トラックボールコントロールを使用している間は、モデルの中心を基準にズームしていますが、カーソルの位置に応じてズームしたいマウスホイールを使ってください。これに慣れている人は私を助けてください。 ありがとうございます。マウスホイールのカーソルの位置に基づいてズームします

+0

http://stackoverflow.com/questions/5613718/click-to-zoom-in-webgl – gaitat

+0

、あなたの参考のために@gaitatいますが、THREE.jsコードで私を導くことができますありがとうございます。 –

+0

それは私が探していたものではありませんでした。 –

答えて

1

mousewheelでは、モデルに相対的ではなく、カーソルの位置に基づいてズームするのに役立つこのコードを追加します。

トラックボールコントロールを使用している場合、これをパンや回転に使用できます。 mousewheelでトラックボールコントロールをfalseに設定しました。

renderer.domElement.addEventListener('mousewheel', 
      function (e) { 
       mousewheel(e); 
         }, 
      false); 


    function mousewheel(event) { 
      trackBallControls.noZoom = true; 
      event.preventDefault(); 
      var factor = 50; 
      var mX = (event.clientX/jQuery(container).width()) * 2 - 1; 
      var mY = -(event.clientY/jQuery(container).height()) * 2 + 1; 
      var vector = new THREE.Vector3(mX, mY, 0.5); 
      //console.log(vector); 
      vector.unproject(camera); 
      vector.sub(camera.position); 
      if (event.deltaY < 0) { 
       camera.position.addVectors(camera.position, 
      vector.setLength(factor)); 
       trackBallControls.target.addVectors(trackBallControls.target, 
      vector.setLength(factor)); 
       camera.updateProjectionMatrix(); 
      } else { 
       camera.position.subVectors(camera.position, 
       vector.setLength(factor)); 
       trackBallControls.target.subVectors(trackBallControls.target, 
       vector.setLength(factor)); 
       camera.updateProjectionMatrix(); 
      } 
     } 
関連する問題