Javascript 使用raycaster的three.js轨道控制

Javascript 使用raycaster的three.js轨道控制,javascript,three.js,Javascript,Three.js,我用的是three.js。要在场景中四处移动,我使用“动态观察控制”,要选择对象,我使用“光线投射器”。单击时会发送光线投射器以及环绕控制。因此,如果选择了一个对象,并且我在释放鼠标时移动相机,则会选择另一个对象。是否有办法检查轨道控制中的摄像机移动 或者,防止不必要选择的常见方法是什么 这是我的选择处理程序: function onMouseClick( event ) { // calculate mouse position in normalized device coordi

我用的是three.js。要在场景中四处移动,我使用“动态观察控制”,要选择对象,我使用“光线投射器”。单击时会发送光线投射器以及环绕控制。因此,如果选择了一个对象,并且我在释放鼠标时移动相机,则会选择另一个对象。是否有办法检查轨道控制中的摄像机移动

或者,防止不必要选择的常见方法是什么

这是我的选择处理程序:

function onMouseClick( event ) {

    // calculate mouse position in normalized device coordinates
    // (-1 to +1) for both components
    mouse.x = ( event.clientX / canvasWidth) * 2 - 1;
    mouse.y = - ( event.clientY / window.innerHeight ) * 2 + 1;

    // update the picking ray with the camera and mouse position
    raycaster.setFromCamera( mouse, camera );

    // calculate objects intersecting the picking ray
    var intersects = raycaster.intersectObjects( CentroLite.children, true );
    if (intersects.length === 0){
    intersects = raycaster.intersectObjects( millingTable.children, true );
    }

    SELECTED = intersects[0].object;
    // DO SOMETHING
}

谢谢

旗帜可能会在这里派上用场。如果移动鼠标,可以防止选择发生。比如:

var doClickOnRelease = false;

document.onmousedown = function() {
    // Get ready to see if the user wants to select something
    doClickOnRelease = true
};

document.onmouseup = function() {
    if (doClickOnRelease) {
        // Your select function
    };

document.onmousemove = function() {
    // Since you're dragging, that must be because you
    // didn't intend to select something in the first place
    doClickOnRelease = false;
};

旗帜可能在这里派上用场。如果移动鼠标,可以防止选择发生。比如:

var doClickOnRelease = false;

document.onmousedown = function() {
    // Get ready to see if the user wants to select something
    doClickOnRelease = true
};

document.onmouseup = function() {
    if (doClickOnRelease) {
        // Your select function
    };

document.onmousemove = function() {
    // Since you're dragging, that must be because you
    // didn't intend to select something in the first place
    doClickOnRelease = false;
};

所以,如果我理解正确的话。您可以通过左键单击选择对象,也可以通过左键单击移动相机。是吗?是的,是的。我可以检查鼠标按下和鼠标释放之间的相机切换来实现这一点,因为选择是在鼠标释放时触发的,但我希望找到一种轨道控制内的方法。因此,如果我理解正确的话。您可以通过左键单击选择对象,也可以通过左键单击移动相机。是吗?是的,是的。我可以在鼠标按下和鼠标释放之间检查相机的变化来实现这一点,因为选择是在鼠标释放时触发的,但我希望在轨道控制中找到一种方法。