Three.js 光线投射器可以与组相交吗?

2024-04-30

我想知道我的光线投射器是否正在查看我已加载的 OBJ。由于从 Cinema4D 导出的方式,我相信 OBJ 是一个具有 3 个子级的 THREE.Group,而不是 THREE.Object。我可以更改我的 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
            }
         }
       }

onOff Cubes 是 6 个 OBJ/THREE.js 组的数组:

Console.log(onOffCubes[0]) is this: enter image description here


很近。相交对象是一个网格,该网格的父级是该组。您需要匹配相交的父对象而不是相交的对象。那是:

intersects[ 0 ].object.parent === onOffCubes[ i ]

而不是:

intersects[ 0 ].object === onOffCubes[ i ]

TL;DR

为了测试类似的结构,我生成了六组,每组三个网格,每组网格共享相同的材质。请注意,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 )
}

检查全场景

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

或仅检查 OffCubes

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
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Three.js 光线投射器可以与组相交吗? 的相关文章