9. 层级模型、获取模型节点
# 层级模型、获取模型节点
- 层级模型(树结构)
- 获取模型节点
以Blender为例,从零带领大家了解下Blender、Threejs**层级模型(树结构)**的概念。
场景中模型比较多的时候,threejs代码怎么快速获取某个模型对象,进行操作。
# Blender创建一个层级模型
可以跟着视频操作,动手在Blender创建一个树结构的层级模型。
实际开发时候,一般美术也需要根据项目情况,把不同的设备模型分类创建、管理。
- 模型复制快捷键
Shift + D
,沿着x轴
复制,就输入快捷键x
- Blender通过一个目录树管理模型
- Blender中平移父对象,子对象跟着平移
- 右侧目录,改变模型层级关系(鼠标左键拖动+Shift快捷键)
# threejs加载层级模型
log打印,浏览器后台查看gltf.scene
数据结构,子对象存储在父对象的.children
属性中,threejs中模型的.name
属性值对应的就是Blender建模软件目录中的模型名字。
const loader = new GLTFLoader()
loader.load('./小区.glb',function(gltf){
//浏览器控制台查看gltf.scene中模型的层级结构
console.log('gltf.scene',gltf.scene);
scene.add(gltf.scene);
})
# 获取某个模型节点.getObjectByName(name)
通过模型节点名字获取某个mesh,然后平移。
// 返回名.name为"1号楼"对应的对象
const mesh = gltf.scene.getObjectByName("1号楼");
mesh.position.y += 100;//获取的模型平移
获取某个组对象,平移,所有子对象会跟着平移。
const group = gltf.scene.getObjectByName("高层");
group.position.y += 100;//获取的模型平移
# 递归遍历方法.traverse()
递归遍历gltf所有的模型节点,判断获取的模型是否是网格,如果是的话,就平移y坐标。
// 递归遍历所有模型节点批量修改材质
gltf.scene.traverse(function(obj) {
if (obj.isMesh) {//判断是否是网格模型
console.log('模型节点',obj);
console.log('模型节点名字',obj.name);
obj.position.y += 100;
}
});