[javascript] Three.js를 사용하여 웹에서의 3D 스마트 홈 개발

웹에서 실시간으로 3D 모델을 렌더링하고 상호작용할 수 있는 경험은 매우 흥미롭습니다. Three.js는 JavaScript 기반의 3D 그래픽 라이브러리로, 웹에서 3D 객체를 만들고 조작하는 데 사용됩니다. 이번 블로그 포스트에서는 Three.js를 사용하여 웹에서 3D 스마트 홈을 개발하는 방법을 알아보겠습니다.

Three.js란?

Three.js는 WebGL을 기반으로 동작하는 JavaScript 3D 라이브러리입니다. 이 라이브러리는 웹에서 3D 객체를 렌더링하고 조작하는 데 필요한 다양한 기능과 도구를 제공합니다. Three.js는 유연하고 강력한 API를 제공하여 사용자가 높은 수준의 커스터마이징을 할 수 있도록 합니다.

스마트 홈 개발을 위한 Three.js 활용

스마트 홈은 IoT(Internet of Things) 기술을 활용하여 가정의 다양한 기기들을 연결하고 제어하는 개념입니다. Three.js는 웹에서 3D 환경을 구현할 수 있는 동시에, 3D 모델의 움직임과 상호작용을 제어할 수 있는 기능들을 제공하므로, 스마트 홈의 시각화와 상호작용에 이상적인 도구입니다.

1. 3D 모델링

Three.js를 사용하면 가정의 다양한 기기들을 3D 모델로 표현할 수 있습니다. 예를 들어, 가구, 전등, 에어컨 등의 장치를 아름답고 섬세하게 디자인된 3D 모델로 만들 수 있습니다. 이러한 3D 모델은 주어진 공간에 배치하고 조작할 수 있는 유연성을 제공합니다.

import * as THREE from 'three';

// 3D 모델 생성
const geometry = new THREE.BoxGeometry(1, 1, 1);
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);

// 3D 모델을 화면에 추가
scene.add(cube);

2. 상호작용

Three.js는 사용자와의 상호작용을 처리할 수 있는 다양한 기능을 제공합니다. 이를 활용하여 사용자가 3D 모델을 클릭하거나 드래그하여 상호작용할 수 있습니다. 예를 들어, 사용자가 에어컨을 클릭하면 에어컨의 상태를 변경하거나 온도를 조절할 수 있습니다.

// 클릭 이벤트 처리
const raycaster = new THREE.Raycaster();
const mouse = new THREE.Vector2();

function onMouseClick(event) {
  // 마우스 위치로 광선을 생성
  mouse.x = (event.clientX / window.innerWidth) * 2 - 1;
  mouse.y = -(event.clientY / window.innerHeight) * 2 + 1;
  raycaster.setFromCamera(mouse, camera);

  // 3D 모델과의 광선 교차 검사
  const intersects = raycaster.intersectObjects(objects);

  if (intersects.length > 0) {
    // 상호작용 처리
    const selectedObject = intersects[0].object;
    // ...
  }
}

window.addEventListener('click', onMouseClick);

3. 애니메이션

Three.js는 애니메이션을 생성하고 제어하는 기능도 제공합니다. 이를 활용하여 3D 모델의 움직임이나 변화를 자연스럽게 구현할 수 있습니다. 예를 들어, 문이 열릴 때 부드럽게 회전하는 애니메이션을 적용할 수 있습니다.

function rotateDoor() {
  // 문 객체의 현재 회전 각도 체크
  const currentRotation = door.rotation.y;

  // 목표 회전 각도 계산
  const targetRotation = currentRotation + Math.PI / 2;

  // Tween.js를 사용하여 애니메이션 생성
  new TWEEN.Tween(door.rotation)
    .to({ y: targetRotation }, 1000)
    .easing(TWEEN.Easing.Quadratic.Out)
    .start();
}

// 애니메이션 실행
rotateDoor();

결론

Three.js를 사용하면 웹에서 실시간으로 3D 모델을 렌더링하고 조작할 수 있는 스마트 홈을 개발할 수 있습니다. 이를 통해 사용자들은 가상의 스마트 홈 환경에서 장치를 시각화하고 상호작용할 수 있습니다. Three.js의 다양한 기능과 도구를 활용하여 맞춤형 3D 스마트 홈 개발에 도전해보세요.

참고 자료