how to get clicked element in THREE.js

前端 未结 4 1661
长情又很酷
长情又很酷 2020-12-04 20:34

Say I have some elements in the canvas, they may be overridden with each other. When clicking on a point, how can I get that very element?

update: t

4条回答
  •  难免孤独
    2020-12-04 21:06

    Use the following code. This will allow you to add a click event and do what you need to when that happens. You can view the source of the page to see what they are doing which is were I got this code from.

    document.addEventListener( 'mousedown', onDocumentMouseDown, false );
    
    var projector = new THREE.Projector();
    
    function onDocumentMouseDown( event ) {
    
        event.preventDefault();
    
        var vector = new THREE.Vector3(
            ( event.clientX / window.innerWidth ) * 2 - 1,
          - ( event.clientY / window.innerHeight ) * 2 + 1,
            0.5
        );
        projector.unprojectVector( vector, camera );
    
        var ray = new THREE.Ray( camera.position, 
                                 vector.subSelf( camera.position ).normalize() );
    
        var intersects = ray.intersectObjects( objects );
    
        if ( intersects.length > 0 ) {
    
            intersects[ 0 ].object.materials[ 0 ].color.setHex( Math.random() * 0xffffff );
    
            var particle = new THREE.Particle( particleMaterial );
            particle.position = intersects[ 0 ].point;
            particle.scale.x = particle.scale.y = 8;
            scene.add( particle );
    
        }
    
        /*
        // Parse all the faces
        for ( var i in intersects ) {
            intersects[ i ].face.material[ 0 ].color
                .setHex( Math.random() * 0xffffff | 0x80000000 );
        }
        */
    }
    

提交回复
热议问题