2017-01-29 4 views
1

orbitControlsを3js(r84)で使用するシーンがあり、レイキャスティングのためにマウスイベントを追加したいと思います。関数は機能しますが、私は両方のイベントを呼び出すことはできません。彼らは私が他をオフにする場合にのみ動作します。私のinit関数内3jsは軌道制御でマウスイベントを追加します

私は

controls = new THREE.OrbitControls(cameraB1, rendererB1.domElement); 
controls.addEventListener('change', render); 
controls.enableZoom = true; 
controls.enableRotate= false; 
controls.addEventListener('mousedown',myOnMouseDownFunction ,false); 
controls.update(); 

を持っている機能は、私は軌道や私の関数を呼び出すので、どちらか

function myOnMouseDownFunction(evt) { 
    evt.preventDefault(); 
    var array = getMousePosition(contB1, evt.clientX, evt.clientY); 
    onClickPosition.fromArray(array); 
    var intersects = getIntersects(onClickPosition, sceneB1.children); 
    if (intersects.length > 0 && intersects[ 0 ].uv) { 
      var uv = intersects[ 0 ].uv; 
      console.log(uv); 
    } 
    console.log("I am being called"); 
} 

を呼び出す必要があります。私に何ができる?私を助けてください。

+0

本の作業用コピーはこちらをhttp://cb.uu.se/~lesso657/3D/first.htmlことができますコードを確認してください –

+0

domエレメントのaddイベントリスナーで "controls.addEventListener"を変更しました。しかしそれは以前は機能していなかったので、ThreeJSコントロールにイベントリスナーを追加できるかどうかを確認したかったのです。 –

+0

あなたは両方とも働きたいですか? – Tlatis

答えて

1

あなたはリスナー変更する必要があります。

controls.addEventListener('mousedown',myOnMouseDownFunction ,false); 

を、ドキュメントまたはTHREE.jsシーンのコンテナにリスナーを追加します。

あなたが何かに触れたときにのみOrbitControlを無効にするワンド場合:

function myOnMouseDownFunction(evt) { 
    evt.preventDefault(); 
    var array = getMousePosition(contB1, evt.clientX, evt.clientY); 
    onClickPosition.fromArray(array); 
    var intersects = getIntersects(onClickPosition, sceneB1.children); 
    if (intersects.length > 0 && intersects[ 0 ].uv) { 
     controls.enabled = false; 
     var uv = intersects[ 0 ].uv; 
     console.log(uv); 
    }else { 
     controls.enabled = true; 
    } 
    console.log("I am being called"); 
} 
+1

ありがとうございます。実際には、適切なdom要素に変更しました。また、ローテーションのような軌道オプションを無効にするには、 "controls.enableRotate = false;"を使用することができます。 –

関連する問題