Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 一个Three.js raycaster可以与一个组相交吗?_Javascript_Three.js_Raycasting - Fatal编程技术网

Javascript 一个Three.js raycaster可以与一个组相交吗?

Javascript 一个Three.js raycaster可以与一个组相交吗?,javascript,three.js,raycasting,Javascript,Three.js,Raycasting,我想知道我的raycaster是否正在查看我加载的OBJ。由于Cinema4D的输出方式,我相信OBJ是一个三个孩子的三人组,而不是三个孩子。我可以改变我的raycaster代码行来寻找这个组而不是一个对象吗 raycaster.set(controls.getObject().position, controls.getDirection(), 0, 40) var intersects = raycaster.intersectObjects(scene.children, true);

我想知道我的raycaster是否正在查看我加载的OBJ。由于Cinema4D的输出方式,我相信OBJ是一个三个孩子的三人组,而不是三个孩子。我可以改变我的raycaster代码行来寻找这个组而不是一个对象吗

raycaster.set(controls.getObject().position, controls.getDirection(), 0, 40)

var intersects = raycaster.intersectObjects(scene.children, true);

     if (intersects.length > 0) {
      //CURRENTLY INTERSECTING SOMETHING
      for (var i = 0; i < onOffCubes.length; i++) {
      //if the first thing the raycaster sees is a one of my cubes
        if (intersects[0].object == onOffCubes[i]) {
                ExperiencesData[i].userClose = true
            }
         }
       }
raycaster.set(controls.getObject().position,controls.getDirection(),0,40)
var intersects=raycaster.intersectObjects(scene.children,true);
如果(相交长度>0){
//正在相交的东西
for(var i=0;i
onOffCubes是一个由6个OBJs/THREE.js组组成的数组:

Console.log(onOffCubes[0])是这样的:

试着浏览一下你们小组的孩子们:

var intersects = raycaster.intersectObjects(YOUR_OBJECT.children, true);

组继承自THREE.Object3D,因此它可能工作得很近。相交对象是网格,该网格的父对象是组。您需要匹配相交的父对象,而不是相交的对象。即:

intersects[ 0 ].object.parent === onOffCubes[ i ]
而不是:

intersects[ 0 ].object === onOffCubes[ i ]
TL;博士

为了使用类似的结构进行测试,我生成了六组,每组三个网格,每组网格共享相同的材质。注意,onOffCubes不是一个THREE.js组,它是一个组数组。这就像原始海报的onOffCubes:

var onOffCubes = []
for ( var i = 0; i < 6; i++ ) {
    var material = new THREE.MeshBasicMaterial({ color: 0xee55aa })
    var group = new THREE.Group()
    for ( var j = 0; j < 3; j++ ) {
        var mesh = new THREE.Mesh( geometry, material );
        mesh.position.x = Math.random() * 100 - 50;
        mesh.position.y = Math.random() * 100 - 50;
        mesh.position.z = Math.random() * 200 - 200;
        group.add( mesh );
    }
    onOffCubes.push( group )
    scene.add( group )
}
或者只检查onOffCubes

var intersects = raycaster.intersectObjects( onOffCubes, true );
基本上与原始海报的代码相同,只有一个修复:

if (intersects.length > 0) {
    for (var i = 0; i < onOffCubes.length; i++) { 
        if (intersects[ 0 ].object.parent === onOffCubes[ i ]) {
            // What I tested with
            //intersects[ 0 ].object.material.color.set( 0xff0000 )
            // Your code
            ExperiencesData[i].userClose = true
        }
    }
}
if(intersects.length>0){
对于(var i=0;i
hmmm。因为实际上我需要查看6个组,所以我尝试:
for(I in experiences){var intersects=raycaster.intersectObjects(onOffCubes[I].children,true);}
但出现错误:无法读取undefinedTry的属性“children”来查看一个组内的内容:var intersects=raycaster.intersectObjects(onOffCubes[0]。children,true);它能工作吗?有错误吗?你能做一个:console.log(onOffCubes[0])并发布输出吗?或者更好,一个jsfiddle,这样我可以测试一些东西。我在原始帖子中添加了console.log,这很奇怪。组是一个带有子对象的实际Object3D,因此它应该可以工作
if (intersects.length > 0) {
    for (var i = 0; i < onOffCubes.length; i++) { 
        if (intersects[ 0 ].object.parent === onOffCubes[ i ]) {
            // What I tested with
            //intersects[ 0 ].object.material.color.set( 0xff0000 )
            // Your code
            ExperiencesData[i].userClose = true
        }
    }
}