このセクションでは、3Dオブジェクトをグループ化する方法を学びます。
3Dオブジェクトをグループ化するには、create.group()
を使います。
const group = create.group()
このようにして作成したグループに、3Dオブジェクトを追加することで、グループ化することができます。
const group = create.group()
group.add(3Dオブジェクト1)
group.add(3Dオブジェクト2)
group.add(3Dオブジェクト3)
例えば、4つの立方体をグループ化して、グループ全体を回転させるコードは次のようになります。
const { camera, create, animate, controls, helper } = init();
controls.connect()
helper.grid()
helper.axes()
create.ambientLight()
create.directionalLight()
camera.position.set(0, 3, 3)
const group = create.group()
const cube1 = create.cube({ position: [-2, 0, 0], autoAdd: false });
const cube2 = create.cube({ position: [2, 0, 0], autoAdd: false });
const cube3 = create.cube({ position: [0, 0, -2], autoAdd: false });
const cube4 = create.cube({ position: [0, 0, 2], autoAdd: false });
group.add(cube1);
group.add(cube2);
group.add(cube3);
group.add(cube4);
animate(({ delta }) => {
group.rotation.x += delta;
group.rotation.y += delta;
cube1.rotation.x += delta * 3;
cube1.rotation.y += delta * 4;
});
グループ自体を回転させることで、グループ内のオブジェクトの位置関係を保ちつつ回転させることができます。
また、グループ内のオブジェクトにも個別に回転を加えることができます。
ここで重要なことは、グループに追加するオブジェクトを作る際に autoAdd: false
を指定することです。
通常 create
でオブジェクトを作った場合、自動的にシーン(3D空間)に追加されます。
グループを利用する場合は、オブジェクトはグループに追加し、そのグループをシーンに追加するため、 オブジェクトが2重にシーン追加されることを防ぐために autoAdd: false
を指定します。
また、グループ作成時に直接オブジェクトを追加することもできます。
この場合、
group.children[番号]
で、追加したオブジェクトにアクセスすることができます。
番号は追加した順番に0から始まります。
const { camera, create, animate, controls, helper } = init();
controls.connect()
helper.grid()
helper.axes()
create.ambientLight()
create.directionalLight()
camera.position.set(0, 3, 3)
const group = create.group({
children: [
create.cube({ position: [-2, 0, 0], autoAdd: false }),
create.cube({ position: [2, 0, 0], autoAdd: false }),
create.cube({ position: [0, 0, -2], autoAdd: false }),
create.cube({ position: [0, 0, 2], autoAdd: false }),
],
});
animate(({ delta }) => {
group.rotation.x += delta;
group.rotation.y += delta;
group.children[0].rotation.x += delta * 3;
group.children[0].rotation.y += delta * 4;
});