如何从单个GLB文件中加载并显示指定的人体模型?
解决GLB多模型按需显示问题
不用非得用Blender分割GLB文件,在ThreeJS里直接处理就行,给你几个实用步骤:
- 先搞清楚GLB的层级结构:你看到
o.scene.length=1是因为所有模型都嵌套在这个唯一的场景子对象里,不是直接在scene的表层children里。加载完成后立刻用console.log(o.scene)打印整个结构,展开就能看到8个人体模型的具体位置——大概率是在某个Group或者Object3D的子级里。 - 按需控制显示:找到目标模型所在的层级后,通过设置
visible属性来切换显示状态。举个例子,假设打印后发现8个模型都在o.scene.children[0].children里:// 获取所有模型的数组 const allHumanModels = o.scene.children[0].children; // 只显示第2个模型(索引从0开始) allHumanModels.forEach((model, idx) => { model.visible = idx === 1; }); - 优化切换体验:如果需要频繁切换,可以把每个模型单独存到一个映射对象里,后续直接调用就行:
const modelStore = {}; allHumanModels.forEach((model, idx) => { modelStore[`human${idx + 1}`] = model; model.visible = false; // 先全部隐藏 }); // 切换显示第3个人体 modelStore.human3.visible = true;
提醒下:千万别只看表层的children,一定要通过控制台展开整个scene对象,找到真正的模型节点——Sketchfab导出的GLB经常会有一层或多层嵌套的容器。
内容的提问来源于stack exchange,提问作者Tamer Hosgör
相关产品推荐
相关产品推荐

