javascript - 用鼠标选择对象 - Three.js

标签 javascript three.js mouseclick-event

我知道这个问题已经被问过。我希望能够更改用鼠标选择的对象的颜色。我尝试自己编写代码,但似乎不起作用,所以我想我错过了一些东西。这基本上就是脚本:

    <script>
        var scene = new THREE.Scene();
        var camera = new THREE.PerspectiveCamera( 75, window.innerWidth/window.innerHeight, 0.1, 1000 );
        var renderer = new THREE.WebGLRenderer();
        renderer.setSize( window.innerWidth/2, window.innerHeight/2 );
        renderer.setClearColor( 0xcccccc, 1 ); 
        document.body.appendChild( renderer.domElement );
        scene.add(camera);

        var geometry = new THREE.Geometry();
        geometry.vertices.push(
            new THREE.Vector3( -5,  5, 0 ),
            new THREE.Vector3( -5, -5, 0 ),
            new THREE.Vector3(  5, -5, 0 )
        );
        var face = new THREE.Face3(0, 1, 2);
        geometry.faces.push(face);
        var material = new THREE.MeshBasicMaterial({color: 0x3300ff});
        var triangle = new THREE.Mesh(geometry, material);
        scene.add(triangle);

        camera.position.z = 10;

        document.addEventListener( 'mousedown', onDocumentMouseDown );

        function onDocumentMouseDown( event ) {    
            event.preventDefault();
            var mouse3D = new THREE.Vector3( ( event.clientX / window.innerWidth ) * 2 - 1,   
                                    -( event.clientY / window.innerHeight ) * 2 + 1,  
                                    0.5 );     
            var projector = new THREE.Projector();                                        
            var raycaster = projector.pickingRay( mouse3D.clone(), camera );
            var intersects = raycaster.intersectObjects( objects );

            if ( intersects.length > 0 ) {
                intersects[ 0 ].object.material.color.setHex( Math.random() * 0xffffff );
            }
        }

        var render = function () {
            requestAnimationFrame( render );
            camera.lookAt( scene.position );
            renderer.render( scene, camera );
        };

        render();
    </script>

如果有人可以帮助我,我将不胜感激。

最佳答案

更新了您的代码并制作了 jsfiddle

在onDocumentMouseDown中添加

var raycaster =  new THREE.Raycaster();                                        
raycaster.setFromCamera( mouse3D, camera );

而不是

var projector = new THREE.Projector();                                        
var raycaster = projector.pickingRay( mouse3D.clone(), camera );

向对象数组添加三 Angular 形网格并更新渲染器的大小。 我建议您开始使用控制台并进行一些调试。您可以自己轻松地发现这些错误。

关于javascript - 用鼠标选择对象 - Three.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32955103/

相关文章:

java - 使用 Javafx 在 ListView 中模仿 CTRL+单击多选

java - 将 mouseClicked 事件监听器添加到 JXMapViewer 上的航点

java - 即使鼠标不在文本上,为什么 viewToModel 也会返回最后一个字符的位置?

javascript - 将输入框中的值乘以表中的固定值 (HTML)

three.js - Three.js Object3D.clone() 会创建几何的深拷贝吗?

algorithm - 将墙合并为统一的网格,并进行角归一化

javascript - Grafana面板开发: Using external Lib in plugins

javascript - 尝试调用 Controller 方法时,Angular 指令抛出 $digest已经在进行中

javascript - ASP.Net - 在错误页面上隐藏子菜单

javascript - 提交 MVC 后禁用 BootstrapButton