Javascript 单击事件在gltf模型中不提供网格名称

Javascript 单击事件在gltf模型中不提供网格名称,javascript,dom-events,aframe,gltf,Javascript,Dom Events,Aframe,Gltf,是否有一种简单的方法来计算在gltf模型中单击的子网格的名称?我在一帧的0.8.0上 我尝试了以下方法- HTML来源: <a-scene embedded="" raycaster-autorefresh cursor="rayOrigin: mouse"> <a-assets> <a-asset-item id="male" src="../images/trying/scene.glt

是否有一种简单的方法来计算在gltf模型中单击的子网格的名称?我在一帧的0.8.0上

我尝试了以下方法-

HTML来源:

  <a-scene embedded="" raycaster-autorefresh cursor="rayOrigin: mouse">
                <a-assets>
                    <a-asset-item id="male" src="../images/trying/scene.gltf"> 
                    </a-asset-item>         
                </a-assets>

 <a-entity id="camera" camera="" position="0 1.6 0" look-controls wasd-controls>
 </a-entity> 

 <a-entity gltf-model="#male" position="-14 -30 -125" rotation= "0 160 0" material-displacements></a-entity> 

</a-scene>
但是,它仅提供第一个子网格的名称。类似地,evt.detail.intersection.point仅提供相同的x、y和z坐标,而与我在模型上单击的位置无关

我的要求是能够找出在gltf模型中单击了哪个子网格

类似地,evt.detail.intersection.point仅提供相同的x、y和z坐标,而与我在模型上单击的位置无关

这是一个错误-更新到a-Frame 0.8.2 per。在A帧0.8+中也不需要
raycaster autorefresh

对于从连接到被单击的节点的节点获取名称的剩余问题,请考虑此代码:

this.el.addEventListener('click', (evt) => {
  var object = evt.detail.intersection.object;

  // name of entity to which component is attached
  console.log(this.el.getObject3D('mesh').name);

  // name of object directly clicked
  console.log(object.name);

  // name of object's parent
  console.log(object.parent.name);

  // name of object and its children
  object.traverse((node) => console.log(node.name));
});

以上所有内容都将给出所单击网格周围的节点名称。如果没有演示,我无法猜测您希望单击哪些节点,或者存在哪些节点,因此我认为您需要从那里进行实验。另请参阅。

谢谢您,唐。没有你我们怎么办。我升级到0.8.2,问题得到解决。我还删除了raycaster autorefresh,它工作得非常好
this.el.addEventListener('click', (evt) => {
  var object = evt.detail.intersection.object;

  // name of entity to which component is attached
  console.log(this.el.getObject3D('mesh').name);

  // name of object directly clicked
  console.log(object.name);

  // name of object's parent
  console.log(object.parent.name);

  // name of object and its children
  object.traverse((node) => console.log(node.name));
});