Я пытаюсь получить ограничивающую рамку для obj-модели в A-рамке. Я ссылаюсь на эти две полезные ссылки, которые я нашел в stackoverflow:
Как получить информацию о ограничительной рамке из трехмерного объекта в рамке?
Есть ли способ получить ограничивающую рамку из объекта Three.js Object3D?
Но после того, как я попробовал с этим кодом ниже,
AFRAME.registerComponent('bounding-box', {
init: function(){
var el = this.el;
var obj = el.getObject3D('mesh');
console.log(obj);
var bbox = new THREE.Box3().setFromObject(obj);
console.log(bbox.min, bbox.max);
}
})
Я получил "undefined" от console.log(obj);
, а затем попробовал метод, упомянутый в ссылке выше,
AFRAME.registerComponent('bounding-box', {
init: function(){
var el = this.el;
console.log(el);
el.setAttribute('obj-model', {obj: 'obj5/1026/1026outside.obj'});
var obj = el.getObject3D('mesh');
console.log(obj);
var bbox = new THREE.Box3().setFromObject(obj);
console.log(bbox.min, bbox.max);
}
})
Но все равно без удачи. Только если я поместил код чуть выше закрывающего тега, иногда он работает и регистрирует правильную информацию ограничительной рамки.
<script>
var el = document.querySelector('#b-model');
console.log(el);
var obj = el.getObject3D('mesh');
console.log(obj);
var bbox = new THREE.Box3().setFromObject(obj);
console.log(bbox.min, bbox.max);
</script>
</body>
Я думаю, что это связано с последовательностью загрузки, но я не понимаю обсуждения в этом посте:
Как загрузить 3D-объект во время выполнения в рамке?
Как я уже пробовал выше, этот метод не работает. Или, может быть, я неправильно использовал el.setAttribute
? Я также заметил, что Феликс сказал, что использование three.objLoader может решить проблему, и я тоже пытался, но все еще безуспешно. Теоретически я знаю, что причина регистрации компонента заключается в том, что он выполняется только после инициализации присоединенного объекта. Так что я очень смущен здесь. Может кто-нибудь дать мне знать, как это сделать, зарегистрировав компонент, а не свободный JavaScript в конце? Заранее спасибо!