我有一个在threejs(r84)中使用orbitControls的场景,我想为光线投射添加一个鼠标事件。该功能有效,但我无法调用这两个事件。它们只有在我关掉另一个时才能工作。
在我的初始化函数中我有
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 :(得分:2)
你应该改变听众:
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");
}