Three.js 3.js,Raycaster,射线阵列?

Three.js 3.js,Raycaster,射线阵列?,three.js,raycasting,Three.js,Raycasting,我有两条光线,一条在摄影机中心高亮显示网格,另一条在单击时高亮显示网格 /。。。 Raycaster click=new THREE.Raycaster(); raycasterCenter=new-THREE.Raycaster(); // ... 函数animate(){ 请求动画帧(动画); // ... //清晰相交 对于(变量i=0;i

我有两条光线,一条在摄影机中心高亮显示网格,另一条在单击时高亮显示网格

/。。。
Raycaster click=new THREE.Raycaster();
raycasterCenter=new-THREE.Raycaster();
// ...
函数animate(){
请求动画帧(动画);
// ...
//清晰相交
对于(变量i=0;i如果(相交[0]。距离我认为没有光线阵列。即使可以构造阵列,光线投射器相交检查也会检查每个网格的每条光线,始终需要检查2*n(n:场景数量。子对象)也许我在射线阵列的概念中没有得到什么东西。你是说:
raycaster.setFromCamera([center,mouse],camera)
?但是,如果你得到了
相交
,你将如何区分哪个对象与哪个光线相交?它将需要重写
Raycaster.js
。只有在真正需要的时候才需要考虑资源。我刚接触过Three.js,非常复杂,我正在尝试提前思考。是的,类似于
raycaster.setFromCamera([center,mouse],camera)
我想到了,在
intersectObjects(scene.children)
中找到这个光线(可能通过索引)和那个对象。然后我想事情就结束了。
// ...
raycasterClick = new THREE.Raycaster();
raycasterCenter = new THREE.Raycaster();
// ...
function animate() {
  requestAnimationFrame(animate);
  // ...
  // clear intersected
  for (var i = 0; i < INTERSECTED.length; i++) {
    INTERSECTED[i].material.emissive.setHex(INTERSECTED[i].currentHex);
    INTERSECTED.splice(i, 1);
  }
  // click
  raycasterClick.setFromCamera(mouse, camera);
  var intersects = raycasterClick.intersectObjects(scene.children);
  for (var i = 0; clickedIn && i < intersects.length; i++) {
    var length = INTERSECTED.push(intersects[0].object) - 1;
    INTERSECTED.currentHex = INTERSECTED[length].material.emissive.getHex();
    INTERSECTED[length].material.emissive.setHex(0xff0000);
  }
  // center
  raycasterCenter.setFromCamera(center, camera);
  var intersects = raycasterCenter.intersectObjects(scene.children);
  for (var i = 0; i < intersects.length; i++) {
    var length = INTERSECTED.push(intersects[0].object) - 1;
    INTERSECTED.currentHex = INTERSECTED[length].material.emissive.getHex();
    INTERSECTED[length].material.emissive.setHex(0xff0000);
    if(intersects[0].distance<=2&&controls.moveZ==-1)controls.moveZ=0;
  }
  // ...
}