Raycaster没有检测到某些物体 - Threejs

时间:2017-05-01 23:50:37

标签: javascript three.js

我一直试图在我的游戏中添加一个raycaster一段时间了。在测试了很多情况后,我发现raycaster正在运行。

有一个场景包含各种敌人物体和一个地板。同样的场景。 raycaster应该将光线从光标发送到此场景中的物体。但是,只有地板被检测为碰撞,而所有其他物体都无法被检测到。

目前正在此处托管:http://aceverything.com/cskelly/project2/

以下是一些相关的片段:

function render() {
            //console.log(object.position);
            // LATER: IMPLEMENT NICER GUN ANIMATION
            global_m60.position.x += ( mouseX - global_m60.position.x ) * .45;
            if(-mouseY < 1){
            global_m60.position.y += ( - mouseY - global_m60.position.y ) * .45;
            }
            else{
            global_m60.position.y = 1;
            }

            for(i = 0; i < enemy_tanks.length ; ++i){
             enemy_tanks[i].position.z += .01;
            }

            projector.unprojectVector( mouse, camera );   
            mouse.sub( camera.position );                
            mouse.normalize();
            var raycaster = new THREE.Raycaster( camera.position, mouse );
            var intersects = raycaster.intersectObjects( scene.children );
            for( var i = 0; i < intersects.length; ++i ){
                intersects[i].object.material.map = THREE.ImageUtils.loadTexture("models/red_checkerboard.jpg");
                intersects[i].object.material.needsUpdate = true;
                console.log("RAY STUFF HAPPENING");
            }


            camera.lookAt( scene.position );

            renderer.clear();
            renderer.render( scene, camera );
            renderer.clearDepth();
            renderer.render( sandbag_scene, camera );
            renderer.clearDepth();
            renderer.render( scene2, camera );
            framecount += 1;

        }

我在未检测到的对象中加载:

    // ENEMIES
            mtlLoader.setPath('models/');

            for(i = 0; i < max_tanks; ++i){
            mtlLoader.load( 'ultimate-tank.mtl', function( materials2 ) {

                //materials2.needsUpdate = true;
                materials2.preload();

                var objLoader = new THREE.OBJLoader();
                objLoader.setMaterials( materials2 );
                //objLoader.setPath( 'obj/male02/' );
                objLoader.load( 'models/ultimate-tank.obj', function ( object2 ) {

                    object2.position.x = (Math.random()*30)-15;
                    object2.position.y = -1;
                    object2.position.z = 220;
                    //object2.position.y = -95;
                    global_enemy_1 = object2;
                    global_enemy_1.rotateY(1.507);
                    //global_enemy_1.renderOrder = 1;
                    enemy_tanks.push(global_enemy_1);
                    scene.add( global_enemy_1 ); // THIS HAS TO BE DONE LIKE THIS.
                    //global_enemy_1.material.color.set( 0xff0000 ); THIS DOESNT WORK...



                }, onProgress, onError );

            }); 
            }

最初的目的是改变raycaster接触到的物体的材料,以便在视觉上向我显示发生碰撞。材料部分无关紧要。重要的部分是:

var intersects = raycaster.intersectObjects( scene.children );
显然没有给我这些物品。是什么给了什么?

0 个答案:

没有答案