Detect clicked object in THREE.js

后端 未结 4 2236
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-01 01:20

I have a THREE.js scene where a lot of elements appear, and I need to detect what object the user is clicking on.

What I have done so far is the following. The camer

4条回答
  •  旧巷少年郎
    2020-12-01 02:14

    Check out this one:

    var camera = new THREE.PerspectiveCamera(45, window.innerWidth / window.innerHeight, 1, 5000);
    var object; //your object
    
    document.addEventListener('mousedown', onMouseDown, false);
    
    function onMouseDown(e) {
        var vectorMouse = new THREE.Vector3( //vector from camera to mouse
            -(window.innerWidth/2-e.clientX)*2/window.innerWidth,
            (window.innerHeight/2-e.clientY)*2/window.innerHeight,
            -1/Math.tan(22.5*Math.PI/180)); //22.5 is half of camera frustum angle 45 degree
        vectorMouse.applyQuaternion(camera.quaternion);
        vectorMouse.normalize();        
    
        var vectorObject = new THREE.Vector3(); //vector from camera to object
        vectorObject.set(object.x - camera.position.x,
                         object.y - camera.position.y,
                         object.z - camera.position.z);
        vectorObject.normalize();
        if (vectorMouse.angleTo(vectorObject)*180/Math.PI < 1) {
            //mouse's position is near object's position
    
        }
    }
    

提交回复
热议问题