我正试着在A帧中为一个obj模型找一个边框.在此,我将引用我在堆栈溢出中找到的以下两个有用的链接:如何从aframe中的3D对象中获取包围框信息? 有没有办法从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);
}
})我从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>我认为这与加载顺序有关,但我不理解这篇文章中的讨论:如何在aframe运行时加载3D对象?就像我在上面尝试过的那样,这个方法不起作用。或者我用错了el.setAttribute?我还注意到,Felix说使用three.objLoader可以解决问题,我也尝试了,但仍然没有运气。理论上,我知道注册组件的原因是因为它只在附加实体初始化之后才执行。所以我在这里很困惑。有人能让我知道如何通过注册一个组件而不是最后一个松散的javascript来做到这一点吗?提前感谢!
发布于 2018-11-12 12:56:51
https://stackoverflow.com/questions/53259131
复制相似问题