总是通过计算A帧中对象的绑定框来获得Infinity

时间:2018-07-21 10:35:11

标签: javascript three.js aframe

我使用three.js在A-Frame场景中获取对象的边界框。

let boundingBox = new THREE.Box3().setFromObject(element.object3D);

但是boundingBox中的6个值始终是Infinity或-Infinity作为Three.Box3的默认值。

在A-Frame的基本示例和我自己的gltf 2.0模型中,我用a-box进行了尝试。

项目:https://glitch.com/edit/#!/get-bounding-box

有人知道原因吗?还是一些在A-Frame中获取边框的方法?

谢谢您的帮助。

2 个答案:

答案 0 :(得分:4)

您正在加载实际模型之前计算边界框。像这样尝试:

leftDoor.addEventListener( 'model-loaded', () => {

     getWorldBound( leftDoor );  

} );

答案 1 :(得分:0)

必须实际加载glTF网格,这需要时间。尝试类似

el.addEventListener('loaded', function() { doStuffWithModelSize(el); } );

function doStuffWithModelSize(el){
  var bbox = new THREE.Box3().setFromObject( el.mesh );
  var width = bbox.max.x - bbox.min.x;
  var height = bbox.max.y - bbox.min.y;
  var depth = bbox.max.z - bbox.min.z;
  if (Number.isFinite( height ) ) { 
    // do stuff with those values
  } else { 
    window.setTimeout( () => { verticalAdjust(el) }, 2000)
    // sometimes it's actually still not enough to you can try until it is
  }
}