Всегда получайте Бесконечность, накапливая коробку объекта в 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
}
}