为什么Three.Raycaster仅在一个对象中起作用?

时间:2019-03-23 11:27:21

标签: javascript three.js

您好,我的场景中大约有300个Three.Line对象,一个Three.GridHelper和其他对象(球,立方体,金字塔,相机,灯光)。我想做的是用THREE.RayCaster引用每一行,以便我可以检测到该行是否与当前场景中的另一个对象发生碰撞。

这是我目前使用的函数,但是for循环仅进行2次迭代,这意味着其他对象不会被raycaster引用(或至少没有进一步的交集)。

intersect: function(){

    //var thisNormal;
    var raycaster = new THREE.Raycaster();
    var intersects = raycaster.intersectObjects(scene_Main.children);

    for(var i=0; i<intersects.length; i++){

        console.log("intersects loop = " + i);
        if(intersects.length > 0){
            console.log("not empty");
            intersects[i].object.material = ray_material_yellow;
        }
    } 
}

DEMO

从上图中可以看到,将材质更改为黄色的唯一对象是GridHelper。如果您对此熟悉,请告诉我发生了什么。为什么这仅获得GridHelper对象,而没有其他任何对象? 我认为创建对象的方式可能是问题。这是一个代码图,也正好提到这一点。

enter image description here


更新:

intersect: function(){

    if(!f_Ray_intersected_check){

        //var thisNormal;
        var counter = 0;
        var intersects = [];

        for(var i=0; i<f_Ray_List[0].length; i++) {

            console.log(f_Ray_List[i]);
            for(var j=0; j<f_Ray_List[0].length; j++) {

                var raycaster = new THREE.Raycaster();
                intersects[i] = raycaster.intersectObjects(f_Ray_List[i], true);


            }
        }
        for(var i=0; i<intersects.length; i++) {  
            if(intersects[i].length > 0){
                counter++;
                intersects.object.material = ray_material_yellow;
            }
        }
        alert(counter);
        f_Ray_intersected_check = true; //Exit entry of this function - do not enter again
    }  
},

0 个答案:

没有答案