在前面的一些分享中,你会发现有用到过对象组合。例如前面一些分享示例中提到的用THREE.SceneUtils.createMultiMaterialObject(geometry, materials) 函数创建的物体对象,其实就是创建了一个 THREE.Group 组。这个函数创建的组包含多个副本,即针对 materials 材质数组参数的每一个材质,都会创建一个对应的网格并添加到组中,这样的组看上去就像是一个网格对象拥有多份材质的效果。但实际上它是一个包含多个网格的组。
这个 THREE.Group 对象使用起来非常简单,核心代码片段如下:
var normalMaterial = new THREE.MeshNormalMaterial();
var cubeGeom = new THREE.BoxGeometry(6, 6, 6);
var sphereGeom = new THREE.SphereGeometry(5, 10, 10);
var cube = THREE.Mesh(cubeGeom, normalMaterial);
var cube = THREE.Mesh(sphereGeom, normalMaterial);
cube.position.set(-6, 12, 0);
sphere.position.set(6, 12, 0);
var group = new THREE.Group();
group.add(cube);
group.add(sphere);
这个 THREE.Group 对象的基类就是 THREE.Object3D。因此,所有 THREE.Object3D 上的属性和函数都可以运用到 THREE.Group 对象上。唯一不同的是 THREE.Group 对象返回的 type 是 “Group”。由于使用起来比较简单,就不再给出完整的示例了,作为练习留给读者自己去完成~
未完待续···