Title: Three.js란?
Description: Three.js의 기본 구조와 사용법을 익힙니다
TOC: Three.js란?
Three.js 입문하신 것을 환영합니다!
[Three.js](https://threejs.org)는 웹페이지에 3D 객체를 쉽게
렌더링하도록 도와주는 자바스크립트 3D 라이브러리입니다.
대부분의 경우 Three.js는 3D 객체를 렌더링하는 데 WebGL을 사용합니다.
때문에 Three.js = WebGL이라고 착각하기 쉽죠.
하지만 [WebGL은 점, 선, 삼각형만을 그리는 아주 단순한 시스템입니다](https://webglfundamentals.org).
WebGL로 직접 무언가를 만들려면 상당히 많은 양의 코드를 짜야 하죠.
만약 씬(scenes), 광원, 그림자, 물체, 텍스처 등 3차원 세계를 구현한다면 머리도 꽤 복잡하겠거니와
코드 자체도 굉장히 복잡할 겁니다.
Three.js는 이런 3D 요소들의 처리를 도와 직관적인 코드를 짤 수 있도록 해줍니다.
본 튜토리얼은 ES2015 문법을 적극적으로 사용할 것이므로,
여러분이 이미 최신 자바스크립트에 능숙하다는 가정 아래에 진행합니다.
자세한 내용에 대해서는 [먼저 알아야 할 것](threejs-prerequisites.html)을 참고하세요.
대부분의 모던 브라우저가 자동 업데이트 기능을 사용하므로,
특이한 환경이 아니라면 예시에 나온 코드를 실행하는 데 문제가 없을 것입니다.
만약 구형 브라우저에서도 코드가 실행되길 원한다면, [바벨(Babel)](https://babeljs.io)
같은 트랜스파일러를 찾아보세요. 물론 너무 오래된 엔진을 사용하는 브라우저에서는
Three.js를 아예 구동하지 못할 수 있습니다.
새로운 프로그래밍 언어를 배울 때, `"Hello World!"`를 출력하며 시작했던 것을 기억하나요?
Three.js는 3차원 세계를 다루므로, 우리는 정육면체(cube)를 3차원으로 구현하는 것으로 튜토리얼을
시작하고자 합니다. 이른바 "Hello Cube"라는 것이죠!
하지만 먼저 Three.js 앱의 구조부터 간략히 살펴보죠. Three.js 앱을 만들려면
다양한 객체를 생성해 연결해야 합니다. 아래는 Three.js 앱의 구조를 도식화한 것입니다.
es6 모듈, Three.js, 프로젝트 구조
Three.js r106 릴리즈 이후에서는 three.js를 es6 모듈로 사용하길 권장합니다.
es6 모듈은 js 파일이나 인라인 <script type="module">
태그 안에서
import
키워드를 사용해 로드할 수 있습니다.
<script type="module">
import * as THREE from './resources/threejs/r132/build/three.module.js';
...
</script>
경로는 절대경로나 상대경로를 사용해야 하며, 상대경로는 <img>
, <a>
태그와
달리 ./
또는 ../
로 시작해야 합니다.
만약 절대경로가 같다면 같은 script는 한 번만 로드됩니다. Three.js 기반 프로젝트의 폴더 구조를
잘 구성해야 하는 가장 큰 이유이죠.
someFolder
|
├-build
| |
| +-three.module.js
|
+-examples
|
+-jsm
|
+-controls
| |
| +-OrbitControls.js
| +-TrackballControls.js
| +-...
|
+-loaders
| |
| +-GLTFLoader.js
| +-...
|
...
이유인 즉 OrbitControls.js
같은 코드는 다음처럼 상대경로로 모듈을 로드하기 때문에
import * as THREE from '../../../build/three.module.js';
같은 폴더 구조를 사용함으로써 모든 예제 스크립트가 같은 three.module.js 파일을
참조하도록 할 수 있죠.
import * as THREE from './someFolder/build/three.module.js';
import {OrbitControls} from './someFolder/examples/jsm/controls/OrbitControls.js';
아래는 CDN을 사용하는 예시입니다. three.modules.js
의 경로가 /build/three.modules.js
로 끝나야 한다는 것을 명심하세요.
import * as THREE from 'https://unpkg.com/three@0.108.0/build/three.module.js';
import {OrbitControls} from 'https://unpkg.com/three@0.108.0/examples/jsm/controls/OrbitControls.js';
만약 여러분이 <script src="path/to/three.js"></script>
같은 스타일을 선호한다면,
이 사이트의 이전 버젼을 확인해보시기 바랍니다.
Three.js에는 하위 호환성을 보장하는 정책이 있습니다. Three.js의 개발자들은 여러분이 특정 버젼을 골라서 쓸
거라고 가정 하에 라이브러리를 개발하죠. 새 버젼으로 업그레이드할 때는 마이그레이션 가이드를 참조해 바뀐 사항을 업데이트 하면 됩니다. es6 모듈과 스크립트
버젼을 모두 다루기는 너무 버거우니 이 사이트에서는 es6 모듈 스타일만 사용할 것입니다. 개발자들이 늘상 추천하듯
구형 브라우저를 지원하려면 바벨 등의 트랜스파일러를 찾아보기 바랍니다.