javascript - A-Frame getObject3D('mesh') 多次尝试返回未定义
问题描述
我正在尝试为 A 框架中的 obj 模型获取边界框。我在此将参考我在 stackoverflow 上找到的这两个有用的链接: 如何从 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>
我认为它与加载顺序有关,但我不理解这篇文章中的讨论:
How to load 3D object at runtime in aframe?
就像我在上面尝试的那样,这种方法不起作用。还是我用el.setAttribute
错了方式?我还注意到 Felix 说使用 three.objLoader 可以解决问题,我也尝试过,但仍然没有运气。我理论上知道注册组件的原因是因为它仅在附加实体初始化后才执行。所以我在这里很困惑。谁能让我知道如何通过在最后注册一个组件而不是松散的 javascript 来做到这一点?提前致谢!
解决方案
推荐阅读
- function - (->) 的 Profunctor 实例定义 dimap 和 lmap/rmap 有什么原因吗?
- python - 检查是否可以使用 Spotipy 播放歌曲
- swift - UILabel 值不会根据 pickerView 选择而改变
- css - 如何在浏览器扩展中注入带有用户来源的 CSS?
- javascript - Swift 5 - 如何将 LONGBLOB/Buffer 转换为数据
- go - 如何在表面上画一条线?
- python - 正则表达式从最后一个连字符中提取前 5 个数字+字符
- python - 使用 matplotlib 的 3D 动画来可视化移动的简笔画
- php - 将数组从 PHP 传递到 PowerShell
- javascript - AFrame 为每个对象更新 material.offset