Всегда получайте Бесконечность, накапливая коробку объекта в A-Frame

Я использую three.js, чтобы получить ограничивающую рамку объектов в сцене A-Frame.

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

Но 6 значений в boundingBox всегда равны Infinity или -Infinity в качестве значений по умолчанию Three.Box3.

Я попробовал это с a-box в базовом примере A-Frame и одной из моих собственных моделей gltf 2.0.

Проект: https://glitch.com/edit/

Кто-то знает причину? Или какие-нибудь способы получить ограничивающую рамку в A-Frame?

Спасибо за любую помощь.

2 ответа

Решение

Вы вычисляете ограничивающую рамку до загрузки фактической модели. Попробуйте это так:

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

     getWorldBound( leftDoor );  

} );

Сетка 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
  }
}
Другие вопросы по тегам