Three.js中几何的事件处理?

时间:2012-02-04 22:57:44

标签: javascript javascript-events event-handling three.js

我正在寻找在three.js中对几何/相机/灯光(我们添加到场景中的东西)进行某种事件处理?

我用谷歌搜索但找不到任何相关内容。我做了一个简单的Sphere渲染并尝试在firebug中看到DIV内容,但是只有一个画布,并且在画布上添加任何“onclick”会使所有画布的事件发生,也就是说,它不仅仅用于球体或光线

有什么建议吗?

1 个答案:

答案 0 :(得分:7)

你需要做几件事才能在3D中获得互动:

  1. 获取鼠标位置的矢量
  2. 根据相机取消投影鼠标矢量
  3. 从相机位置向未投影的鼠标矢量拍摄光线
  4. 检查哪些对象与该光线相互影响并相应地更新。
  5. 听起来可能很复杂,但代码已经存在:

    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.material.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 );
    
                    }
                    */
                }
    

    上面的代码来自库附带的canvas_interactive_cubes示例。 如果有疑问,检查是否有一个解决问题的例子总是好的。

    canvas_interactive_cubes sample preview