我正在导入使用两个网格的glTF模型
<a-entity gltf='#sofa'>
假设沙发是指向资源的asset-item
。我正在尝试编写一个组件,该组件将根据需要调整模型的大小并重新居中。我已经能够成功使用
this.el.addEventListener("model-loaded", function(e) {
var model = e.detail.model;
model.traverse(function(o) {
if (o instanceof THREE.Mesh) {
o.geometry.center();
o.geometry.computeBoundingBox();
var bBox = o.geometry.boundingBox;
d = bBox.max.z - bBox.min.z;
w = bBox.max.x - bBox.min.x;
h = bBox.max.y - bBox.min.y;
switch(axis) {
case 'x':
scale = sizeto / w;
break;
case 'y':
scale = sizeto / h;
break;
case 'z':
scale = sizeto / d;
break;
default:
break;
}
}
}
el.setAttribute('scale', scale + ' ' + scale + ' ' + scale);
});
组件的属性包括指定要调整大小的axis
即x,y或z以及sizeto
的值。这适用于单网格模型。
对于多个网格模型,我什至尝试指定主网格(假设其中一个很重要),并给定axis
和sizeto
并将其应用于整个元素。那也可行。
我无法处理的情况是当我希望整个模型重新居中或原点更改为结果模型的中心或原点为0 0 0
时。
除了geometry.center()
之外,还有其他方法可用于重新定位整个模型吗?谢谢