[three.js] React에서 three.js 시작하기
포스트
취소

[three.js] React에서 three.js 시작하기

three.js란?

three.js는 브라우저에서 3D 그래픽을 만들 수 있게 도와주는 JavaScript 라이브러리입니다.

WebGL을 직접 다루지 않아도 카메라, 조명, 물체, 재질 같은 3D 요소를 비교적 쉽게 사용할 수 있습니다.

React 프로젝트에서는 @react-three/fiber를 함께 사용하면 React 컴포넌트 방식으로 3D 장면을 구성할 수 있습니다.


설치하기

React에서 three.js를 사용할 때는 보통 아래 패키지를 함께 설치합니다.

1
npm install three @react-three/fiber @react-three/drei

각 패키지의 역할은 다음과 같습니다.

패키지역할
three3D 그래픽의 핵심 기능
@react-three/fiberthree.js를 React 방식으로 사용할 수 있게 해주는 렌더러
@react-three/drei자주 쓰는 helper 컴포넌트 모음

Canvas 만들기

Canvas는 3D 장면이 렌더링되는 영역입니다.

1
2
3
4
5
6
7
8
9
10
11
import { Canvas } from "@react-three/fiber";

const App = () => {
  return (
    <Canvas>
      {/* 3D 요소가 이 안에 들어갑니다. */}
    </Canvas>
  );
};

export default App;

React 앱 안에서 3D 세계를 담는 컨테이너라고 생각하면 됩니다.


기본 박스 렌더링하기

가장 기본적인 3D 물체를 만들어보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
import { Canvas } from "@react-three/fiber";

const App = () => {
  return (
    <Canvas>
      <mesh>
        <boxGeometry />
        <meshStandardMaterial color="orange" />
      </mesh>
    </Canvas>
  );
};

export default App;

mesh는 3D 물체를 의미합니다.

boxGeometry는 물체의 모양을 박스로 정합니다.

meshStandardMaterial은 물체의 색상과 표면 재질을 정합니다.


조명 추가하기

meshStandardMaterial은 조명에 영향을 받는 재질입니다.

그래서 조명이 없으면 물체가 어둡게 보일 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import { Canvas } from "@react-three/fiber";

const App = () => {
  return (
    <Canvas>
      <ambientLight intensity={0.5} />
      <directionalLight position={[2, 2, 2]} intensity={1} />

      <mesh>
        <boxGeometry />
        <meshStandardMaterial color="orange" />
      </mesh>
    </Canvas>
  );
};

export default App;

ambientLight는 장면 전체를 은은하게 밝힙니다.

directionalLight는 특정 방향에서 비추는 빛입니다.


OrbitControls 추가하기

마우스로 3D 장면을 회전하고 확대하고 싶다면 OrbitControls를 사용할 수 있습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import { Canvas } from "@react-three/fiber";
import { OrbitControls } from "@react-three/drei";

const App = () => {
  return (
    <Canvas>
      <ambientLight intensity={0.5} />
      <directionalLight position={[2, 2, 2]} />
      <OrbitControls />

      <mesh>
        <boxGeometry />
        <meshStandardMaterial color="orange" />
      </mesh>
    </Canvas>
  );
};

export default App;

OrbitControls를 넣으면 마우스로 장면을 직접 둘러볼 수 있습니다.


마무리

React에서 three.js를 시작하려면 Canvas, mesh, geometry, material, light의 역할을 먼저 이해하면 좋습니다.

Canvas 안에 3D 요소를 넣고, mesh에 모양과 재질을 연결하면 기본 물체를 렌더링할 수 있습니다.

처음에는 박스 하나를 띄운 뒤 조명과 컨트롤을 하나씩 추가해보면 흐름을 익히기 쉽습니다.

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

[Algorithm] 이진 탐색(Binary Search) 이해하기

[three.js] React three.js에서 조명과 Material 다루기