我使用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中获取边框的方法?
谢谢您的帮助。
答案 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
}
}