项目场景:

Three对加载的骨骼模型计算box3盒子模型


问题描述

获取的box3大小近乎于无

const box3 = new Box3().setFromObject(gltf.scene)

原因:

社区有对此的探讨
​​​蒙皮网格周围的框​​​​对象边界未随动画更新​​​​如何计算 GLTF 网格的边界框​


解决方案:

查看计算后的几何体的boundingBox 发现是有数据的 只是返回的box3有误

自行结合子元素的box3 生成一个新的box3

可以参照源码中的计算

Three对加载的骨骼模型计算box3盒子模型_加载

.loadGltf("/models/observer.glb")
.then((gltf) => {
observer.add(gltf.scene);
gltf.scene.scale.set(0.3, 0.3, 0.3);
gltf.scene.updateWorldMatrix(false, false);
gltf.scene.traverse((node) => {
//@ts-ignore
if (node.isSkinnedMesh) {
const mesh = node as Mesh;
node.frustumCulled = false;
mesh.geometry.computeBoundingBox();
this._box3.union(mesh.geometry.boundingBox!);
}
});
this._box3.applyMatrix4(gltf.scene.matrixWorld);
// 人物默认盒子是张开双臂计算的
this._box3.min.x /= 3;
this._box3.max.x /= 3;
});

Three对加载的骨骼模型计算box3盒子模型_前端_02

这样box3勉强可以使用