2017-01-29 11 views
1

У меня есть сцена, работающая с orbitControls в трехjs (r84), и я хочу добавить событие мыши для raycasting. Функция работает, но я не могу назвать оба события. Они работают, только если я выключу другого.Trjs добавить событие мыши с элементами управления орбиты

Внутри моей функции инициализации У меня есть

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

Я изменил «controls.addEventListener» на прослушиватель событий add элемента dom, и он сработал. Но он не работал раньше, поэтому я хотел посмотреть, могу ли я добавить слушателей событий в элементы управления 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»; –

 Смежные вопросы

  • Нет связанных вопросов^_^