一旦Box3注册点击,我想获取用于设置Box3(带有Box.setFromObject)的对象。

当前,我将Box3推送到一个数组,然后将对象(设置了Box3的对象)推送到另一个数组:

var cube = new THREE.Mesh( geometry, material );
cube.name = "box0";
scene.add( cube );
var bbox = new THREE.Box3();
bbox.setFromObject( cube );
bboxList.push(bbox);
bboxObjectNameList.push(cube.name);


然后每帧检查两个数组:

  for(i=0;i<bboxList.length;i++)
  {
    if(bboxList[i].containsPoint(camera.position)) {
      hitName = bboxObjectNameList[i];
      hitObj = scene.getObjectByName(hitName);
    }
  }


有谁知道找到Box3设置对象的更好方法?

Three.js R84

最佳答案

关于three.js javascript对象的妙处在于,它们是javascript对象。这意味着您可以将所需的任何属性添加到Box3中,包括“从中设置对象”。

为了遵循three.js约定,我建议对添加的任何自定义属性使用.userData包装器属性。这样可以避免与将来版本中可能添加的任何内部three.js属性发生命名冲突。

实际上,这会使您的代码看起来像

var bbox = new THREE.Box3();
bbox.setFromObject( cube );
bbox.userData = { sourceObject: cube };

...

if (bboxList[i].containsPoint(camera.position)) {
  hitObj = bboxList[i].userData.sourceObject;
}

09-20 18:14