Scene Graph는 3차원 공간(Scene)을 구성하기 위한 계층적 데이터 구조입니다.
트리 혹은 그래프 형태로 이루어진 노드들의 집합으로, 부모 노드의 변환(위치, 회전, 스케일)은 자식 노드에 자동 전파됩니다.
_setupModel() {
const solarSystem = new THREE.Object3D();
this._scene.add(solarSystem);
const radius = 1;
const widthSegments = 12;
const heightSegments = 12;
const sphereGeometry = new THREE.SphereGeometry(radius, widthSegments, heightSegments);
const sunMaterial = new THREE.MeshPhongMaterial({
emissive: 0xffff00,
flatShading: true,
});
const sunMesh = new THREE.Mesh(sphereGeometry, sunMaterial);
sunMesh.scale.set(3, 3, 3);
solarSystem.add(sunMesh);
const earthOrbit = new THREE.Object3D();
solarSystem.add(earthOrbit);
const earthMaterial = new THREE.MeshPhongMaterial({
color: 0x2233ff,
emissive: 0x112244,
flatShading: true,
});
const earthMesh = new THREE.Mesh(sphereGeometry, earthMaterial);
earthOrbit.position.x = 10;
earthOrbit.add(earthMesh);
const moonOrbit = new THREE.Object3D();
moonOrbit.position.x = 2;
earthOrbit.add(moonOrbit);
const moonMaterial = new THREE.MeshPhongMaterial({
color: 0x888888,
emissive: 0x222222,
flatShading: true,
});
const moonMesh = new THREE.Mesh(sphereGeometry, moonMaterial);
moonMesh.scale.set(0.5, 0.5, 0.5);
moonOrbit.add(moonMesh);
this._solarSystem = solarSystem;
this._earthOrbit = earthOrbit;
this._moonOrbit = moonOrbit;
}

태양을 중심으로 지구가 공전하고, 지구를 중심으로 달이 또 한 번 공전하는 모습을 확인할 수 있습니다.