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