๊ธฐ๋ฅ ์์ฒญ์ด ๋ฌธ์ ์ ๊ด๋ จ๋์ด ์์ต๋๊น?
๋ชจ๋ ๋ฐ ํด๋์ ์ ์ ํ์ผ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ๋ชจ๋ ์ง์ํ๋ ๊ฒ์ด ์ข์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๋ ๋ง์ ๊ฐ๋ฐ์ ๊ทธ๋ฃน์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ก์ธ์คํ ์ ์๊ณ ๊ฐ๋ฐ์๊ฐ ์ ํธํ๋ ์คํ์ผ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ฐ์ธ์ ์ผ๋ก ์ ๋ ์ผ๋ฐ์ ์ผ๋ก ๋ชจ๋์ ์ฌ์ฉํ์ง ์์ผ๋ ค๊ณ ๋ ธ๋ ฅํฉ๋๋ค. ์ ๋ ๊ณ ์ ์ ์ธ ๋จ์ JS ํ์ผ์ด ํฌํจ๋ ์ ์ ํ์ผ์ธ ํ๋ก์ ํธ๋ฅผ ์ข์ํฉ๋๋ค. ์ด์ฉ๋ฉด ๋๋ ๊ทธ์ ์ด์ํ ์ฌ๋์ผ ์๋ ์์ง๋ง ํ๋ ์์ํฌ๊ฐ ๋ถํ์ํ๊ฒ ์ฌ๋ฌผ๋ก๋ถํฐ ๋น์ ์ ์ผ๋ง๋ ๋ฉ๋ฆฌ ์ถ์ํํ๋์ง, ๋ฐํด๋ฅผ ์ฌ๋ฐ๋ช ํ๊ฑฐ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๋น์ ์ ๋ธ๋๋ฐ์ค๋ก ๋ง๋๋ ๋ฐฉ๋ฒ์ด ์ ๋ง ์ซ์ต๋๋ค. ํ๋ ์์ํฌ ์์ด ๋ชจ๋์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง ๋ชจ๋ ํฌํจ์ ๊ธฐ์กด JS ํฌํจ๋ณด๋ค ๋ ์ง๊ด์ ์ด๋ฉฐ ์ ์ ํ์ผ ์ค์ ๋ด์์ ๋ชจ๋์ ์ฌ์ฉํ๋ ค๊ณ ํ ๋ ์ข ์ข ์คํจํ์ต๋๋ค.
ES6 ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ชจ๋ ๋ฐฐํฌ์ ์ด์์ ์ธ ๊ฒ์ ์๋์ง๋ง ๋ถ๋ช ํ ํ์ํ ๋งํ ์ถ๊ฐ ์ฌํญ์ ๋๋ค. ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ๋ํ๊ณ IMO๊ฐ ํ๋ก๊ทธ๋๋ฐ์ ๋ค์ด๊ฐ๋ ํ๋ฅญํ๊ณ ๋ง์กฑ์ค๋ฌ์ด ๋ฐฉ๋ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ง์ ์๋ก์ด ํ๋ก๊ทธ๋๋จธ์๊ฒ threejs๋ฅผ ๊ฐ๋ฅด์นฉ๋๋ค. ์ ์ฒด ๋ ธ๋/npm + ํ๋ ์์ํฌ ์คํ์ ๋์์ ๋ชฉ์ ๊ฑธ์ง ์๊ณ ๋ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ณธ CSS/JS/HTML์ ๊ฐ๋ฅด์น๋ ๊ฒ์ด ํจ์ฌ ์ฝ์ต๋๋ค. ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ์ฉ/์ดํด๊ฐ ๋ ๊ฐ๋จํ๊ณ ์ฌ๊ธฐ์์ ์ง์ ์ฅ๋ฒฝ์ ๋ฎ๊ฒ ์ ์งํฉ๋๋ค.
์คํ์ผ์ ์ผ๋ก๋ ์์ ๋กญ๊ฒ ๋ ๋ค๋๋ ์๋ก์ด ๋ช ๋ช ๋ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ ๋์ ์ถ๊ฐ ๊ธฐ๋ฅ์ผ๋ก THREE๋ฅผ ์ค๋ฒ๋ก๋ํ๋ ๊ฒ์ ์ ํธํฉ๋๋ค. ์ด๊ฒ์ ๋ถ๋ช ํ ์ทจํฅ์ด์ง๋ง.
์ํ๋ ์๋ฃจ์ ์ค๋ช
๋ชจ๋๋ก๋ง ์ ํํ๊ธฐ๋ก ๊ฒฐ์ ํ ์ด์ ์ ๋ํ ์ ๋ณด๋ฅผ ์กฐ๊ธ ๋ ์๊ณ ๋๋ฉด ์ด์ ๋ํด ๋ ์ ๋๋ตํ ์ ์์ง๋ง ์ผ๋จ ์ง๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
๋ฌธ์์์๋ ES6 ๋ชจ๋์ด ๋ชจ๋ ์ํฉ์์ ์๋ํ์ง ์์ ์ ์์ผ๋ฉฐ ์ด๋ฌํ ์ํฉ์์๋ browserify/rollup/webpack/parcel ๋ฑ๊ณผ ๊ฐ์ ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ด ์๋ฃจ์ ์ ์๋ ES6 ๋ฒ๋ค๋ฌ ์คํฌ๋ฆฝํธ๊ฐ /examples/jsm ์ ๋ชจ๋์ ํตํด /examples/js ๋น ๋ชจ๋ ๋ฒ์ ์ ์์ฑํ๋๋ก ํ๋ ๊ฒ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ๊ฐ๋ฐ์๋ ๋ ์ด์ ๋ ๊ณณ์์ ๋ณ๊ฒฝํ๋ ๊ฒ์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์์ผ๋ฉฐ ์ํ๋ ๊ฒฝ์ฐ JS ๋น ๋ชจ๋ ๋ฒ์ ๊ณผ ์ ์ญ var ๊ฐ์ ธ์ค๊ธฐ ์คํ์ผ์ ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
JS ๋น ๋ชจ๋ ํ์ผ์ ์ด ์๋ ์์ฑ์ ๋น๋ ํ๋ก์ธ์ค์ ์ผ๋ถ๋ก ์ํ๋๊ฑฐ๋ ๋๊ตฐ๊ฐ๊ฐ ์๋์ผ๋ก ์คํํ ์ ์๋ package.json์ ๋ช ๋ น์ด ๋ ์ ์์ต๋๋ค. ์๋ ์์ฑ์ ์ ํํ์ง๋ง.
์ด ์๋ํ๋ฅผ ์์ฑํ๊ฑฐ๋ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ JS ๋น ๋ชจ๋ ๋ฒ์ ์ ์ ์งํ๋ ๊ฒ์ ๋ด๊ฐ ์๊ฐ์ ํ ์ ํ ์ ์๋ ์ผ์ ๋๋ค. ES6๋ง ์ฌ์ฉํ๋ ์ด์ ๊ฐ ๋์ผํ ํญ๋ชฉ์ ๋ณ๋ ฌ ๋ฒ์ ๋ ๊ฐ๋ฅผ ์๋์ผ๋ก ์ ๋ฐ์ดํธํ ํ์๋ฅผ ์์ ๋ ๊ฒ์ด ์๋๋ผ๋ฉด ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ๋ค๋ฅธ ์๋ฃจ์ ๋ ๋ ผ์ํ๊ณ ์ถ์ต๋๋ค.
๊ณ ๋ คํ ๋์์ ๊ธฐ์ ํ์ญ์์ค
๋ช ๋ฐฑํ ๋ค๋ฅธ ๊ณ ๋ ค ์ฌํญ์ ๊ทธ๋๋ก ๋๊ณ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ JS ๋ฐ JSM ๋ฒ์ ์ ๊ณ์ ์ ์ง ๊ด๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ด ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋๋ค๋ ๋ฐํ๋ฅผ ๊ณ ๋ คํ ๋, ๋๋ ์ด๊ฒ์ด ๋ค์ ๋ถ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๊ฐ ์ด ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค๋ฉด JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋์ผ๋ก JSM ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ต์ ์ํ๋ฅผ ์ ์งํ๋๋ก ํ๋ ์ฑ ์์ ์ง๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค.
์ถ๊ฐ ์ปจํ ์คํธ
์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฝ๋์์ ๋๋ ๋ฌธ์ ๋ณด๊ณ /ํ ๋ก ์ ๊ธฐ์ฌํ๋ ๋ชจ๋ ์ฌ๋์๊ฒ ๋ง์ ์ฌ๋์ ๋ฐ์ต๋๋ค.
์ ์ฒด ๋ ธ๋/npm + ํ๋ ์์ํฌ ์คํ์ ๋์์ ๋ชฉ์ ๊ฑธ์ง ์๊ณ ๋ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ณธ CSS/JS/HTML์ ๊ฐ๋ฅด์น๋ ๊ฒ์ด ํจ์ฌ ์ฝ์ต๋๋ค. ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ๊ธฐ์์ ์ง์ ์ฅ๋ฒฝ์ ๋ฎ๊ฒ ์ ์งํฉ๋๋ค.
์ด ํ๋ก์ ํธ์์ ์ ์ง ๊ด๋ฆฌ๋๋ ์์ js ๋ชจ๋์ ๋ช ํํ ํ๊ธฐ ์ํด ์ฌ์ฉํ ๋ ธ๋, npm ๋๋ ๋น๋ ํ๋ ์์ํฌ๊ฐ ํ์ํ์ง ์์ต๋๋ค. ์ด์ ์ ์ญ ๊ฐ์ ธ์ค๊ธฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ ์ผ๋ก ์ ๊ณต๋๋ ํ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ์ฉํ๋ ค๋ฉด es6 ๊ฐ์ ธ์ค๊ธฐ ๊ตฌ๋ฌธ๋ง ํ์ํ์ง๋ง ๋ชจ๋ ์ต์ ๋ธ๋ผ์ฐ์ ์์ ์๋ํฉ๋๋ค.
์ด ํ๋ก์ ํธ์์ ์ ์ง ๊ด๋ฆฌ๋๋ ์์ js ๋ชจ๋์ ๋ช ํํ ํ๊ธฐ ์ํด ์ฌ์ฉํ ๋ ธ๋, npm ๋๋ ๋น๋ ํ๋ ์์ํฌ๊ฐ ํ์ํ์ง ์์ต๋๋ค. ์ด์ ์ ์ญ ๊ฐ์ ธ์ค๊ธฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ์ ์ ์ผ๋ก ์ ๊ณต๋๋ ํ์ผ๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฌ์ฉํ๋ ค๋ฉด es6 ๊ฐ์ ธ์ค๊ธฐ ๊ตฌ๋ฌธ๋ง ํ์ํ์ง๋ง ๋ชจ๋ ์ต์ ๋ธ๋ผ์ฐ์ ์์ ์๋ํฉ๋๋ค.
๋ช
ํํ๊ฒ ํด ์ฃผ์
์ ๊ฐ์ฌํฉ๋๋ค! ์ฐธ์ผ๋ก ์ข์ ์ง์ ์
๋๋ค!
๋๋ ๋ฏฟ๋๋ค:
<script type="module">
import { OrbitControls } from 'https://unpkg.com/three@<VERSION>/examples/jsm/controls/OrbitControls.js';
const controls = new OrbitControls();
</script>
````
is perhaps less intuitive and harder to understand for newcomers than:
์ ์๋ง์... ์์ง ๋ค์์ด ์์ต๋๋ค.
<script src="path/to/local/build/three.js"></script>
๋ฐ๋:
<script type=module src="path/to/local/build/three.module.js"></script>
์ฒซ ๋ฒ์งธ๋ ๋๊ตฐ๊ฐ์ html ๋ด์์ ์ด์ ์ ์ญ ๋ฐฉ์์ ๋ฐ๋ผ ์ฌ์ฉํ ์ ์๋ ์ ์ ์คํฌ๋ฆฝํธ์ ๋๋ค... ๋ง๋์? ES6์ผ๋ก ์ ํํ ํ ๋ ์ด์ ํ ์ ์์๋ ์ผ์ ๋ฌด์์ด์์ต๋๊น?
I don't think it makes sense to import three.module.js
that way. It should be:
<script type="module">
import * as THREE from 'https://cdn.jsdelivr.net/npm/three@0.121.1/build/three.module.js';
// app code
</script>
์ฒซ ๋ฒ์งธ๋ ๋๊ตฐ๊ฐ์ html ๋ด์์ ์ด์ ์ ์ญ ๋ฐฉ์์ ๋ฐ๋ผ ์ฌ์ฉํ ์ ์๋ ์ ์ ์คํฌ๋ฆฝํธ์ ๋๋ค... ๋ง๋์? ES6์ผ๋ก ์ ํํ ํ ๋ ์ด์ ํ ์ ์์๋ ์ผ์ ๋ฌด์์ด์์ต๋๊น?
๋๋ ๋น์ ์ด ์ณ๋ค๊ณ ๋ฏฟ์ต๋๋ค. ๋ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ค๋ฉด ๊ณํ์ " /build/three.module.js " ์ธ์ " /build/three.js "๋ฅผ ๊ณ์ ํฌํจํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ํ์ฌ "/examples/js" ํด๋์ ์๋ ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ๋ฉด "/examples/jsm" ES6 ๋ชจ๋ ๋ฒ์ ์ ๊ฒฝ์ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ผ๋ฉฐ ๊ณง ์ ๊ฑฐ๋ ๊ฒ์์ ๊ฒฝ๊ณ ํฉ๋๋ค. ์ฆ, ๋ ์ด์ ์ด์ ์ ์ญ ์คํ์ผ ๊ตฌํ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๊ทธ๋ ๊ฒ ์ฝ๊ฒ ํ ์ ์๋ค๋ฉด ๋น๋ ํ๋ก์ธ์ค์ ์ผ๋ถ๋ก ES6 ๋ฒ๋ค๋ฌ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์๋์ผ๋ก ์์ฑํ์ฌ /examples/js
๋ฅผ ๊ณ์ ์ง์ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ค๋ฉด ๊ณํ์ "/build/three.module.js" ์ธ์ "/build/three.js"๋ฅผ ๊ณ์ ํฌํจํ๋ ๊ฒ์ ๋๋ค.
๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ด ํ๋นํ์ง๋ ์๋ฌธ์
๋๋ค. examples/js
๊ฐ ์ ๊ฑฐ๋๋ฉด three.js
๋ฐ three.min.js
๊ฐ ์ฌ์ ํ ์ ์ฉํ ๋ช ๊ฐ์ง ์ฌ์ฉ ์ฌ๋ก๋ง ๋จ์ต๋๋ค.
npm
ํจํค์ง์ main
์ง์
์ ์ ๋ณ๊ฒฝํ ์ ์์ผ๋ฏ๋ก three.js
๋ฐ three.min.js
๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ด ์ค์ ๋ก ๋์์ด ๋ฉ๋๋ค(#19575 ์ฐธ์กฐ).
๊ทธ๋ ๊ฒ ์ฝ๊ฒ ํ ์ ์๋ค๋ฉด ๋น๋ ํ๋ก์ธ์ค์ ์ผ๋ถ๋ก ES6 ๋ฒ๋ค๋ฌ ์คํฌ๋ฆฝํธ๋ฅผ ํตํด ์๋์ผ๋ก ์์ฑํ์ฌ /examples/js๋ฅผ ๊ณ์ ์ง์ํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์์ด๋์ด๋ examples/jsm
๋ฅผ ํด๋์ค์ ๊ฐ์ ๋ณด๋ค ํ๋์ ์ธ JavaScript ์ธ์ด ๊ธฐ๋ฅ์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒ์
๋๋ค. examples/js
๋ ์ฌ์ ํ ์ด์ ๋ธ๋ผ์ฐ์ ์์ ์๋ํด์ผ ํ๋ฏ๋ก ์ฝ๋ ๋ณํ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ์(์์ ) ๋น๋๋ฅผ ๊ตฌ์ฑํด์ผ ํฉ๋๋ค. ๊ฒ๋ค๊ฐ, ์ฐ๋ฆฌ๋ ์ฌ์ ํ ์ค๋ณต ์ฝ๋ ๊ธฐ๋ฐ( examples/js
vs examples/jsm
)์ ์ ์งํฉ๋๋ค. ์ด๋ ์ ๊ด์ ์์ ์๋ชป๋ ์ ๊ทผ ๋ฐฉ์์
๋๋ค. ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ ๋ณต์กํด์ง๋๋ค.
ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ES6์์ ES5๋ก์ ๋ณํ์ ์ฒ๋ฆฌํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฝ๋ ์ถ์ ๋๋ ๊ธฐํ ๋น๋ ๊ด๋ จ ์์ ์์๋ ๋์ผํฉ๋๋ค.
๋๋ ๋น์ ์ด ์ณ๋ค๊ณ ๋ฏฟ์ต๋๋ค. ๋ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ค๋ฉด ๊ณํ์ " /build/three.module.js " ์ธ์ " /build/three.js "๋ฅผ ๊ณ์ ํฌํจํ๋ ๊ฒ์ ๋๋ค.
์ง์ค
/examples
ํด๋์์ ์ฑ์ฐ๊ธฐ์ ๋ฌธ์ ๋ /build/three.js
๋ฅผ ์ฌ์ฉํ ๋ /examples/js
$์ ํ์ผ์, $ /build/three.module.js
๋ฅผ ์ฌ์ฉํ ๋ /examples/jsm
์ ํ์ผ์ ์ฌ์ฉํด์ผ ํ๋ค๋ ๊ฒ์
๋๋ค. /build/three.module.js
, ์ผ๋ช
๋ก๋ ๋ฐฉ๋ฒ์ ์ผ๊ด์ฑ ์ ์ง.
์์? ๋ชจ๋ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ฌ์ฉํ ๋ ๊ธฐ๋ณธ THREE
๊ฐ์ฒด๋ ๋ ์ด์ ์ผ๋ฐ js ๊ฐ์ฒด THREE = {}
๊ฐ ์๋๋ผ ๋ด์ธ๋(ํ์ฅํ ์ ์๋) ๋ด๋ถ ๋ธ๋ผ์ฐ์ ์ ๋ชจ๋ ๊ฐ์ฒด์ด๋ฏ๋ก /examples/js
์ ํ์ผ THREE
๊ฐ์ฒด์ ์ ์์ฑ์ ์ฐ๋ ค๋ # /examples/js
๋ ์คํจํฉ๋๋ค.
๋ฐ๋ผ์ import * as THREE from '/build/three.module.js
์ THREE.WhateverExample = function() ...
๋ฅผ ํผํฉํ ์ ์์ต๋๋ค.
ํ ๊ฐ์ง ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ ๊ฐ์ ธ์จ lib์ ์ด๋ฆ์ THREE
์ด์ธ์ ๋ค๋ฅธ ์ด๋ฆ์ผ๋ก ๋ณ๊ฒฝํ๊ณ ์์ ๋ฅผ ์์ฑํ ์ผ๋ฐ js THREE
์ ์ญ ๊ฐ์ฒด๋ฅผ ๋ค์ ๋ง๋๋ ๊ฒ์
๋๋ค...
์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ๋ค์์ ๋ฌธ์ ์ ๋๋ค.
๊ธฐ์กด JS์๋ ๋ค์์ด ํฌํจ๋ฉ๋๋ค.
์ ์ญ ๊ณต๊ฐ ๋ช
๋ช
์ ๋๋ฝํ๊ณ ๋ก๋๋ ํ์ผ์ ์ด๋ฆ์ ์์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ ์ค๋ฅ๊ฐ ๋ฐ์ํ ์ ์์ต๋๋ค.
๋ฐ๋ฉด์ ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ๊ฐ์ ธ์ค๋ ๋์ ์ฌ์ฉ์๊ฐ ์ด๋ฆ ์ง์ ๊ถํ์ ์ป๊ฒ ๋๋ฉฐ ๊ฒฐ๊ณผ ์ด๋ฆ์ ์ ํํ๋ ๊ฒ์ ๋ ์ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ฑ์๊ฐ ์๋๋๋ค...
์ :
<script>
// a script you can't modify already use the name THREE
var THREE = document.getElementById('div-nb-3')
</script>
<script type="module">
import * as foo from '/build/three.module.js'
THREE.appendChild( new foo.WebGLRenderer().domElement )
</script>
@Mugen87 100% ๋ง์ต๋๋ค. /examples/js ๋ฅผ ๋ฒ๋ฆฌ๋ฉด three.js ๋ฐ three.min.js ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๋์จ ๋ชจ๋๊ณผ ํธํ๋์ง ์๊ธฐ ๋๋ฌธ์ ๋ฒ๋ฆฌ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ๋ค์ ์ฌ์ฉ ์ฌ๋ก๋ ํ์ ์์ฅ์ด ๋ ๊ฒ์ด๊ณ ์ด๊ฒ์ ํผ๋์ ์ผ๊ธฐํ ๊ฒ์ด ๊ฑฐ์ ๋ณด์ฅ๋ฉ๋๋ค.
@devingfx ๋ชจ๋์ ์ฅ์ ์ด ์๊ณ ์ ์ฌ์ ์ธ ์ ์ญ ์ด๋ฆ ์ถฉ๋์ ์ ๊ฑฐํ๋ค๋ ๋ง์ด ๋ง์ต๋๋ค. ์๋ ๋์ ๋๋ THREE ์ ์ญ ๋ณ์์ ์ถฉ๋ํ๋ ๊ฒ์ด ์์๊ณ ์ด๊ฒ์ด ์์ ๋ฒํ์ง ์์ ์๋๋ฆฌ์ค๋ผ๊ณ ์๊ฐํ์ง๋ง ๊ทํ์ ์์ ์ ๊ธฐ์ ์ ์ผ๋ก ์ ํํฉ๋๋ค.
๋ด ๊ด์ ์์ ๋ณผ ๋ ๋์ ์ ๊ทผ ๋ฐฉ์์ ๋๋ค. ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ ๋ณต์กํด์ง๋๋ค.
ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ์๊ฐ ES6์์ ES5๋ก์ ๋ณํ์ ์ฒ๋ฆฌํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฝ๋ ์ถ์ ๋๋ ๊ธฐํ ๋น๋ ๊ด๋ จ ์์ ์์๋ ๋์ผํฉ๋๋ค.
@ Mugen87 ๋ชจ๋ ์ธ์ ์ ์ญ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ์ ํต์ ์ธ js ํฌํจ์ ์ ์งํ๋ ๊ฒ์ด ์ ๋ง ๋์ฐํฉ๋๊น? ๋ง์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ ๋ค ์ง์ํ๋ฉฐ ๊ธฐ์กด JS ๋ฒ์ ์ด ์ข ์ข ๋ชจ๋ ๋ฒ์ ๋งํผ ๋๋ฆฌ ์ฌ์ฉ๋๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ๋ ๋ค ์ฅ๋จ์ ์ด ์์ผ๋ฉฐ ๊ทธ ์ค ์ผ๋ถ๋ ์ ํธ๋์ ๋ฐ๋ผ ๊ฒฐ์ ๋ฉ๋๋ค. ๊ฐ๋ฐ์์๊ฒ ๋ชจ๋์ด ์๋ ์ปจํ ์คํธ์์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ ์ต์ ์ ์ ๊ณตํ๋ ๊ฒ์ด ์ข์ง ์์ต๋๊น?
three.module.js ๋ฐ /examples/jsm ์์ three.min.js, three.js ๋ฐ /examples/js ๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ ๋ฐ ํ์ํ ์ฝ๋ ๋ณํ ๊ธฐ๋ฅ์ ์์ฑ/ํ ์คํธํ๋ ์ผ์ ๊ธฐ๊บผ์ด ์ฒ๋ฆฌํ๊ฒ ์ต๋๋ค. ๋ณํ ์ํฌํ๋ก๊ฐ ์์ ๋ ํ์๋ ์ต์ํ์ ์ ์ง ๊ด๋ฆฌ๊ฐ ํ์ํ ์ ์์ง๋ง != ๋ ๊ฐ์ ๋ณ๋ ฌ ๋ฒ์ ์ ์ ์ง ๊ด๋ฆฌํด์ผ ํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ์ฝ๋๋ ๋ชจ๋ ํ์ผ์์ ์ ๋ฐ์ดํธํ๊ธฐ๋ง ํ๋ฉด ๋๋ฉฐ ๊ฐ๋์ฉ๋ง ์ผ๋ถ ํธ๋์คํ์ผ ๋ฌธ์ ๋ฅผ ์์ ํด์ผ ํฉ๋๋ค.
๋๋ ์ ํต์ ์ธ ์ ์ญ ๊ตฌ๋ฌธ์ ์์กดํ๋ ์ถฉ๋ถํ ํ๋ก์ ํธ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ด์จ๋ ๋ชจ๋์ ๋ฒ์ญ์ ์๋ํํ๋ ์์ ์ ์ํํ ์์ ์ ๋๋ค. ์ต์ํ package.json์ ๋ช ๋ น์ ํฌํจํ๊ณ ๋ชจ๋์ ์๋ณธ๊ณผ ์ ์ฌํ๊ฒ ๋์ํ๋ three.min.js, three.js ๋ฐ /examples/js ๋ก ๋ณํํ๋ "legacy-build"๋ผ๊ณ ๋ถ๋ฅผ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ง๊ธ ํ์ผ. ์ด๋ฌํ ํ์ผ์ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์ปค๋ฐํ๊ฑฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์์ฑํ ํ์๋ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๋ํ ๋ ๊ฑฐ์ ์ง์์ ์ํ ๊ฒ์ด๋ผ๊ณ ๊ฒฝ๊ณ ํ ์ ์์ต๋๋ค. ์๋์ด ๋ณด์ฅ๋์ง ์์ต๋๋ค. ๋์ ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ํ์ค์ ์ผ๋ก๋ ์ ์ฅ์์ ๋ณด๊ดํ๊ณ ๋น๋ ์ ํธ๋์คํ์ผ์ ํตํด ์๋์ผ๋ก ์์ฑ๋๋๋ก ํ๋ ๊ฒ์ด ๋ ํฉ๋ฆฌ์ ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
package.json์ ๋ช ๋ น์ ์ ๋ ฅํ๊ณ ๋ชจ๋์ ๋ณํํ๋ "legacy-build"๋ผ๊ณ ๋ถ๋ฆ ๋๋ค.
ํฉ๋ฆฌ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ต๊ทผ์ babel์ด ๋ณํฉ๋์ง ์์์ต๋๊น? ๊ทธ๋์ ๋๋ ์ด๊ฒ์ด ๊ทธ๋๋ก ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
ํธ์ง: ๋ช ํํ ํ๊ธฐ ์ํด, ํด๋น ๋น๋๋ฅผ ์ํ๋ ์ฌ์ฉ์๋ฅผ ์ ์ธํ ๋ค๋ฅธ ์ฌ๋์ด ์ ๋ช ๋ น์ ์คํํ ์ ์๋ค๊ณ ๋งํ์ต๋๋ค.
๋ชจ๋ ์ธ์ ์ ์ญ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ์ ํต์ ์ธ js ํฌํจ์ ์ ์งํ๋ ๊ฒ์ด ์ ๋ง ๋์ฐํฉ๋๊น?
์ด๋ฅผ ์ ์ง ๊ด๋ฆฌํ๋ ๋ณต์ก์ฑ์ด ๊ณผ์ ํ๊ฐ๋๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ถํํ๋ ํ๋ก์ ํธ์์ ์์ ๊ฐ ์ค์ ๋๋ ๋ฐฉ์์ด ๊ทธ๋ ๊ฒ ๊ฐ๋จํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
GLTFLoader๋ฅผ ์๋ก ๋ค์ด ๋ณด๊ฒ ์ต๋๋ค. ํ์ฌ ๋ชจ๋ GLTFLoader๋ ๋จ์ผ ํ์ผ์ ํฌํจ๋์ด ์์ด HTML ํ์ผ ์๋จ์ ์ฝ๊ฒ ํฌํจํ ์ ์์ต๋๋ค. ๋ชจ๋์ ์ฅ์ ์ค ํ๋๋ GLTFLoader๊ฐ ์ข ์์ฑ์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์๋ ๋ ํฐ ํ์ผ ์ค ์ผ๋ถ๋ฅผ ๋ณ๋์ ํ์ผ๋ก ๋๋ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. GLTFLoader๊ฐ 4๊ฐ์ ์ธ๋ถ ํ์ผ์ ์์กดํ๊ณ ๊ทธ ์ค ์ผ๋ถ๊ฐ ๊ณต์ ๋๋ฉด ๋น๋๋ ์ ์ญ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจํด์ผ ํ๋ ๋ชจ์์ ๋ฌด์์ ๋๊น? ๋น๋๋ ์ ์ญ ์คํฌ๋ฆฝํธ์ ์ฌ์ฉ์๋ ์ด์ ์ด๋ฌํ ๋ชจ๋ ์์ js ํ์ผ์ ๊ฐ๋ณ์ ์ผ๋ก ํฌํจํด์ผ ํฉ๋๊น? ์๋๋ฉด ํจ๊ป ๋ฒ๋ค๋ก ์ฌ์ฉํ ์ ์๋ ํ์ผ ๋ชฉ๋ก๊ณผ ๊ทธ๋ ์ง ์์ ํ์ผ ๋ชฉ๋ก์ ์๋์ผ๋ก ์ ์ง ๊ด๋ฆฌํด์ผ ํ๋ ์ผ๋ถ ํ์ผ์ด ํจ๊ป ๋ฒ๋ค๋ก ์ ๊ณต๋ฉ๋๊น?
๋๋ ์ ์ผํ๊ฒ ์ค์ ํ๊ณ ์์ด ๋ฒ๋ฆฌ๋ ๊ฒฝ์ฐ๊ฐ ๋ชจ๋ ์์ js ํ์ผ์ ํฉ๋ฆฌ์ ์ด์ง ์๋ค๊ณ ์๊ฐํ๋ ๋จ์ผ ๋ชจ๋๋ฆฌ์ blob์ผ๋ก ๋ฌถ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ฌํ ์๋ฃจ์ ์ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ๋ฆด๋ฆฌ์ค ๋ฐ ๋ฌธ์ ์ค๋ฒํค๋๋ ๋ฐ์ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์๋ง๋ ๋ ๋์ ๋ฐฉ๋ฒ์ด ์์ ์ ์์ง๋ง ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ ์งํ๊ฑฐ๋ ์ต์ํ ๊ธฐ์กด js ํ์ผ์ ๋ํ ์ผ๊ด๋ ๊ตฌ์กฐ๋ฅผ ์ ์งํ๋ ๋กค์ ๋น๋๋ฅผ ๋ง๋ค๋ ค๊ณ ํ ๋ ์ด๋ฌํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋ด๊ฐ ์ฌ๋ฐ๋ฅด๊ฒ ์ดํดํ๋ค๋ฉด ๊ณํ์ "/build/three.module.js" ์ธ์ "/build/three.js"๋ฅผ ๊ณ์ ํฌํจํ๋ ๊ฒ์ ๋๋ค.
๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ ๊ทผ ๋ฐฉ์์ด ํ๋นํ์ง๋ ์๋ฌธ์ ๋๋ค.
examples/js๊ฐ ์ ๊ฑฐ๋๋ฉด three.js ๋ฐ three.min.js๊ฐ ์ฌ์ ํ ์ ์ฉํ ๋ช ๊ฐ์ง ์ฌ์ฉ ์ฌ๋ก๋ง ๋จ์ต๋๋ค.
@Mugen87 @mrdoob
๋จ์ ์ด๋ฆ,
์ฌ์ค "three.min.js"๋ฅผ ์ต์ 2๋
๋ ์ ์งํ๋ ๊ฒ์ ํ์์
๋๋ค.
๋ด ๋ชจ๋ ์ํ์ด ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ด ์๋๋๋ค.
๊ทธ๋ฌ๋ ์์ฒ ๊ฐ์ ํ์ผ๊ณผ Google ์ต๊ณ ์ ๊ฐ๊ฐ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์
๋๋ค!
์: https://www.google.com/search?source=hp&q=webgl+benchmark
๋ฐ๋ฉด์ "three.min.js"๋ ๋ ๋น ๋ฅธ ๊ฐ๋ฐ ๋ฐ ํ
์คํธ๋ฅผ ์๋ฏธํฉ๋๋ค.
์คํ๋ผ์ธ์์ ์๋ํ๊ณ localhost๊ฐ ํ์ํ์ง ์๋ค๋ ๊ฒ์ ๋งํ ๊ฒ๋ ์์ต๋๋ค.
๋ชจ๋ ํ์ผ์ ํด๋ ์ด๋๊ฐ์ ๋ฃ๊ณ Firefox๋ฅผ ์ฌ์ฉํ์ฌ HTML ํ์ผ์ ๋ ๋ฒ ํด๋ฆญํ์ญ์์ค.
๋๋ ํญ์ ๊ฐ๋ฐ์ ์ํด ๊ทธ๊ฒ์ ์ข์ํ์ต๋๋ค!
Ricardo๋ ์ด ๋ชจ๋ ๊ฒ์ ๋ํด์๋ ์๊ฐํด์ผ ํฉ๋๋ค.
๊ฑด๋ฐฐ
three.js
๋ฐ three.min.js
์ ๊ฑฐ๋ examples/js
๊ฐ ์์ด์ก์ ๋ ๋
ผ์ํ๊ณ ๊ณํํ ์ ์๋ ๊ฒ์
๋๋ค. ๋ ์ด์ examples/js
์์ ํ์ผ์ ๊ฐ์ ธ์ฌ ์ ์์ ๋ ์ค์์ฑ์ด ์์ค๋์์์ ๊ฐ์กฐํ๋ ๊ฒ์ด ์ค์ํ์ต๋๋ค.
์ด๋ฅผ ์ ์ง ๊ด๋ฆฌํ๋ ๋ณต์ก์ฑ์ด ๊ณผ์ ํ๊ฐ๋๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ถํํ๋ ํ๋ก์ ํธ์์ ์์ ๊ฐ ์ค์ ๋๋ ๋ฐฉ์์ด ๊ทธ๋ ๊ฒ ๊ฐ๋จํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋๋ ๋น์ ์ด ์ ๊ธฐํ๋ ํฌ์ธํธ๋ฅผ ์ ๋ง ์ข์ํฉ๋๋ค. ๋ฒ๋ค๋ง์๋ ์ ํ ์์์น ๋ชปํ ๋ณต์ก์ฑ์ด ์์ผ๋ฉฐ ์ค์ฒฉ ๋ชจ๋์ ์๊ฐ ์ข์ ์์ ๋๋ค. ๋น์ ์ ์์ ์ ๋ฐ๋ฅด๋ฉด, ์ฐ๋ฆฌ๋ ๊ทธ ๋๊ฐ ๋์์ ๋ ์ค์ฒฉ ๋ชจ๋์ ๋ฌถ๋ ๋ฐฉ๋ฒ์ ๋ํด ํฉ๋ฆฌ์ ์ธ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๋ฒ๋ค๋ฌ ์คํฌ๋ฆฝํธ๊ฐ ๊ทธ๊ฒ์ ์ค์ ํ๊ณ ์ํฉ์ ์์ด ๋ฒ๋ฆด ๊ฒ์ด๋ผ๊ณ ๋งํ๋ ๊ฒ์ด ์๋๋ผ ๋จ์ง ์ ์ง ๊ด๋ฆฌ๊ฐ ๋ ๋ฎ์ ๊ฒ์ด๋ผ๋ ๊ฒ์ ๋๋ค.
์ ์ง ๊ด๋ฆฌ๊ฐ ๋๋ฌด ์ด๋ ค์ด ์๊ธฐ๊ฐ ๋๋ฉด ์ธ์ ๋ ์ง ์ค๋จํ ์ ์์ง๋ง ์์ง ๋ฐ์ํ์ง ์์ ๋ฌธ์ ๋๋ฌธ์ ์๋๋ฅผ ํ ์ธํ๋ ๊ฒ์ ์ด๋ฆฌ์์ ์ผ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. /examples/jsm ๊ณผ examples/js ์ฌ์ด์ ์ฌ์ ํ 1:1 ํจ๋ฆฌํฐ๊ฐ ์๋ ๋์ ์ง๊ธ ๊ตฌํํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ฌ์ธ ๊ฒ์ ๋๋ค. /example/jsm ๋ชจ๋ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ๋๋์ ์ผ๋ก ์ฌ๊ตฌ์ฑํ์ง ์์ ๊ฐ๋ฅ์ฑ์ด ๋์ผ๋ฉฐ ๊ทธ๋ ๊ฒ ํ ๋ ๋ฒ๋ค๋ฌ๋ฅผ ์ ์ง์ ์ผ๋ก ์ ๋ฐ์ดํธํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ๊ณ์ํด์ ๊ทธ๋ค์ด ๋งํ๋ ๋๋ก ๋ด ์ ์ด ์๋ ๊ณณ์ ๋ด ๋์ ๋๊ธฐ ์ํด (์ด๋ฏธ ์ถ๊ฐ๋์๊ธฐ ๋๋ฌธ์ babel์ ์ฌ์ฉํ์ฌ) ์ด๊ฒ์ ๋ํ ์์ ์ฆ๋ช ์์ ์ ์์ํ ๊ฒ์ ๋๋ค.
Mugen์ ์์ ์ ๋ฐ๋ฅด๋ฉด, ์ด๋ three.js
๋ฐ three.min.js
์ ๋ํ ๊ด๋ จ์ฑ์ ์ ์งํ๋ ๋ฐ ๋์์ด ๋๋ ๋์์ ๊ณ์ ์ ์งํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๋ํ ๋น ๋ชจ๋ ๊ธฐ๋ฐ THREE ๊ตฌํ๊ณผ ํธํ๋๋ ์
๋ฐ์ดํธ๋ฅผ ์ฐพ๊ณ ์๋ ์๋ฐฑ ๊ฐ์ ์ฌ์ดํธ์ ๋์์ด ๋ ์ ์์ต๋๋ค. ๋ชจ๋์ ์ฌ์ฉํ๊ธฐ ์ํ THREE ํ๋ก์ ํธ์ ๋ฆฌํฉํ ๋ง์ ์ํ ์ค์ธ ์์
์ ์๊ณ ์๋๋ผ๋ ์๋นํ ๊ด๋ฒ์ํ ์ ์์ต๋๋ค.
๋ค๋ฅธ ๊ณต๋ ์์
์์ ๋ํด ๋งํ ์๋ ์์ง๋ง ์ด ์ฃผ์ ์ ๋ํด ๋ง์์ ๋ฐ๊พธ์ง๋ ์์ ๊ฒ์
๋๋ค. ์ฌ๊ธฐ #18749์์ ๋
ผ์๋๊ณ ์ปค๋ฐ๋ ๋๋ก 2020๋
12์ ๋ฆด๋ฆฌ์ค์ ํจ๊ป examples/js
๋ฅผ ์ญ์ ํ๋ ๋ฐ ํฌํํฉ๋๋ค.
์ฌ๊ธฐ #18749์์ ๋ ผ์๋๊ณ ์ปค๋ฐ๋ ๋๋ก 2020๋ 12์ ๋ฆด๋ฆฌ์ค์ ํจ๊ป examples/js๋ฅผ ์ญ์ ํ๊ธฐ๋ก ํฌํํฉ๋๋ค.
๋๋ ๊ทธ๊ฒ์ ์๋ฌด๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
"three.min.js"๋ฅผ ๋ช ๋
๋ ์ฌ์ฉํ ์ ์๋ ํ ...
Mugen ์ ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ํด๋น ์ค๋ ๋๋ฅผ ์ฝ์์ง๋ง ๊ฒฐ์ ์ ๋ํ ์ค๋ช ์ด ์๋๋ผ ๋ฐํ์ ๋ ๊ฐ๊น์ด ๊ฒ์ผ๋ก ๋ณด์ ๋๋ค. ๋ด ๊ฐ์ ์ ๋จ์ํ๋ ๊ฐ๋ฐ์ด ์ด ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๋ ์ฃผ๋ ์ด์ ๋ผ๋ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ์ด์ ๊ฐ ์์ต๋๊น?
/examples/js ์คํ์ผ ํฌํจ์ ์์ฑํ๊ธฐ ์ํด ์คํํ ์ ์๋ ๋ณํ ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๊ฒ์ ์ฌ๊ธฐ์์ ์ ์ ํ ์ ์ถฉ์์ด ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฌ๊ธฐ์ ํ์ํ ์ ์ง ๊ด๋ฆฌ/๋ณต์กํ์ ์์ ํฌ๊ฒ ์ค์ฌ์ผ ํฉ๋๋ค. ์ง์ ์คํํด์ผ ํ๋ package.json์ ๋ช ๋ น์ด๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ผ์ด ์์ฑ๋์ง ์๋ ๊ฒฝ์ฐ์๋ ๊ด์ฐฎ์ต๋๋ค. ์ด์จ๋ ํธ๋์คํ์ผํด์ผ ํ๋ ์ผ๋ถ ๊ฐ๋ฐ์์ ๋ค๋ฅธ ๊ฐ๋ฐ์์๊ฒ๋ ์ด์ ์ด ์์ต๋๋ค. ๊ณต๋ ์์ ์ ๋ ์ ์ํํ ์ ์๋๋ก ๊ธฐ๋ณธ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ณด๊ดํ ์ ์์ ๋ ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ๋ณ๋๋ก ๋ฒ์ญ/๋ฒ๋ค ์ํฌํ๋ก๋ฅผ ๋ง๋ค์ง ์์์ผ๋ฉด ํฉ๋๋ค. :)
๋๋ ๊ทธ ์ค๋ ๋๋ฅผ ์ฝ์์ง๋ง ๊ฒฐ์ ์ ๋ํ ์ค๋ช ๊ณผ๋ ๋ฐ๋๋ก ๋ฐํ์ ๋ ๊ฐ๊น์ต๋๋ค.
๋ถํํ๋ ์ฐ๋ฆฌ๋ ํญ์ ๋ชจ๋ ์ ํจํ ์ฃผ์ฅ์ ๋จ์ผ ์ค๋ ๋์ ๊ณ ์ ํ ์ ์์ต๋๋ค. ๋์์ธ ๋ณ๊ฒฝ์ ์คํ์ด ์๋ ์ ๊ฑธ์ณ ์ฌ๋ฌ ๋ ผ์์์ ์ฒ์ฒํ ์งํ๋๊ธฐ ๋๋ฌธ์ด๊ฑฐ๋ ๋จ์ํ ๋์ผํ ์ฃผ์ ์ ๋ํ ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๊ณ์ํด์ ์์ฑ๋๊ธฐ ๋๋ฌธ์ ๋๋ค(์: ). ๊ณต๋ ์์ ์๋ ๋ ธ์ด์ฆ์ ์ธ๋ถํ๋ฅผ ์ต์ํํ๋ ค๊ณ ๋ ธ๋ ฅํ์ง๋ง ํญ์ ๊ฐ๋ฅํ ๊ฒ์ ์๋๋๋ค.
๋ด ๊ฐ์ ์ ๋จ์ํ๋ ๊ฐ๋ฐ์ด ์ด ๋ฐฉํฅ์ผ๋ก ๋์๊ฐ๋ ์ฃผ๋ ์ด์ ๋ผ๋ ๊ฒ์ ๋๋ค. ๋ค๋ฅธ ์ด์ ๊ฐ ์์ต๋๊น?
๋ด๊ฐ ๋ณธ ๊ฐ์ฅ ํฐ ๊ฒ์ ์ค๋ณต ์ฝ๋๋ฅผ ์ต์ํํ๊ณ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๊ตฌํ์ ๋ง๋๋ ํ์ ๋ชจ๋์ ์ฌ์ฉํ๊ณ ๊ฐ์ ธ์ค๋ ๊ธฐ๋ฅ์ ๋๋ค.
์๋ฅผ ๋ค์ด, ๋๋ถ๋ถ์ ๋ก๋๋ ์ผ์ข
์ ๋ฐ์ดํฐ ๊ตฌ๋ฌธ ๋ถ์ ๊ตฌ์กฐ/ํด๋์ค๋ฅผ ์์ฑํด์ผ ํฉ๋๋ค. ์ด๋ ๊ฐ ๋ก๋๊ฐ example/js
ํ์ผ์ ์ฌ์ฌ์ฉํ ์ ์๋๋ก ์๊ธ์์กฑํด์ผ ํ๊ธฐ ๋๋ฌธ์
๋๋ค. ๊ทธ๋ฌ๋ ๋น ๋ชจ๋์ ์ ํ์ ์์ ํ ์ ๊ฑฐํ๋ฉด DataParser
ํด๋์ค์ ๋จ์ผ ์ธ์คํด์ค๋ฅผ ๋ง๋ค๊ณ ๋ชจ๋ ๋ก๋์์ ํด๋น ํ์ค ๊ตฌํ์ ๊ฐ์ ธ์ฌ ์ ์์ผ๋ฏ๋ก ๊ฐ๋ฐ์ด ์ฆ์ ์ฌ์์ง๊ณ ์ค๋ณต ์ฝ๋๋ ์ ๊ฑฐ๋ฉ๋๋ค. ๋ชจ๋ ๋ก๋.
๋ค, ์ข์ ์ง์ ์
๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฏธ Pass
ํด๋์ค(๋ชจ๋ FX ํจ์ค์ ๊ธฐ๋ณธ ํด๋์ค)๋ฅผ EffectComposer
์ ํฌํจ์ํค๋ ๊ฒ๊ณผ ๊ฐ์ ๋๋ฌ์ด ํดํน์ ๋ง๋ค์ด ๋ ๊ฑฐ์ ์ฝ๋๊ฐ ์์๋์ง ์๋๋ก ํด์ผ ํฉ๋๋ค.
์์ฃผ ์ข์ ์ ๋ค์ด ๋๋ฃจ๋๋ฃจ ๋ง๋ค์ด์ก์ต๋๋ค.
์ฌ๋๋ค์ ์ถ์ /์ต์ ์ํ๋ก ์ ์งํ๊ณ ์ ์งํ๋ ๊ฒ์ (๋ด ๊ฒฝํ์ ๋ฐ๋ฅด๋ฉด) ์ด๋ ค์ด ๋ฌธ์ ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ์ด๊ฒ์ ๋ํด ์๊ฐ์ ์ข ํด๋ณด๋ ค๊ณ ํฉ๋๋ค.
์ฌ์ค "three.min.js"๋ฅผ ์ต์ 2๋ ๋ ์ ์งํ๋ ๊ฒ์ ํ์์ ๋๋ค.
Babel์ ์ฌ์ฉํ์ฌ ES5 ๋น๋๋ฅผ ์์ฑํ๋ ๊ฒ์ ํญ์ ๊ฐ๋ฅํฉ๋๋ค. ์ด์ ๋ํด ์ฐ๋ฆฌ๊ฐ ๋๋ตํด์ผ ํ ์ง๋ฌธ์ ์ด์ ๋ํ ์ฑ ์์ด ์ฐ๋ฆฌ์๊ฒ ์๋์ง ์๋๋ฉด three.js๋ฅผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์์๊ฒ ์๋์ง์ ๋๋ค.
์์ ํ์ผ์ ES5 ๋ฒ์ ์ ๋ง๋๋ ๊ฒ์ ๊ฐ๋ฐ์์๊ฒ ๋ฌ๋ ค ์๋ค๊ณ ์ด๋ฏธ ๊ฒฐ์ ํ์ผ๋ฏ๋ก ๋น๋ ํ์ผ์ ๋ํด์๋ ๋์ผํ ์์ ์ ์ํํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ ๊ฒ์ ๋๋ค. ๋ด ์๊ฐ์๋ ๊ฐ๊ฒฉ์ ๋๋ ๊ฒ๋ณด๋ค ํ ๋ฆด๋ฆฌ์ค์์ ์ ์ฒด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฑธ์ณ ์ด ์์ ์ ์ํํ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด์ง๋ง three.min.js๋ฅผ ์กฐ๊ธ ๋ ์ค๋ ์ ์งํ๋ ๊ฒ๋ ์ข์ต๋๋ค.
๊ทธ๋ฌ๋ ์์ฒ ๊ฐ์ ํ์ผ๊ณผ Google ์ต๊ณ ์ ๊ฐ๊ฐ ์ด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ ๋๋ค!
์: google.com/search?source=hp&q=webgl+benchmark
์ด๊ฒ์ ๊ทธ ๊ฒ์์์ ๋์๊ฒ ๋ํ๋๋ ์ต์์ ์ฌ์ดํธ์ด๊ณ ๊ทธ๋ค์ R53์ ์ฌ์ฉํ๊ณ ์์ผ๋ฏ๋ก ์ด ๋ณ๊ฒฝ์ด ๊ทธ๋ค์๊ฒ ๋๋ฌด ๋์ ์ํฅ์ ๋ฏธ์น ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค: https://www.wirple.com/bmark/
๋ณด์๋ค์ํผ, three.js์ ์ด์ ๋ฒ์ ์ ์ฌ์ ํ โโ์ ์๋ํฉ๋๋ค. ๋ชจ๋๋ก ์ ํํ ํ Babel์ ์ฌ์ฉํ์ง ์๊ณ ES5 ๋น๋๋ฅผ ์ํ๋ ์ฌ๋์ ๋๊ตฌ๋ ES5 ํ์ผ์ ์ ๊ฑฐํ๊ธฐ ์ ์ ๋ง์ง๋ง ๋ฒ์ ์ ์ฌ์ฉํ๋๋ก ์ง์ํ ์ ์์ต๋๋ค. ๊ทธ๋ค์ ํด๋น ๋ฆด๋ฆฌ์ค์ ์ ์ฒด ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ํ์ธํ๊ณ ํด๋น ๋ฒ์ ์ ๋ฌธ์๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
@looeeee ์ข์ ์ ์ ๋ง์ง์
จ์ต๋๋ค. ์์์ ์ธ๊ธํ๋ฏ์ด ์ฌ๊ธฐ์์ ES5 three.min.js
๋ฐ three.js
๋ฅผ ๋์์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค. ์๋ง๋ ๊ทธ๊ฒ์ ์์ ์ ๋ณ๋ ํ ๋ก ์ด์ด์ผํฉ๋๊น?
์ด๋ ์ชฝ์ด๋ ๋๋ ๊ตฌ์ ES5 ์คํ์ผ /js/example
ํ์ผ์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ณธ ์ ์ฅ์์ babel ์คํฌ๋ฆฝํธ๋ฅผ ํฌํจํ๋ ๊ฒ์ ๋ํ ํฉ์์ ๋๋ฌํ๊ณ ์ถ์ต๋๋ค. ์ด๊ฒ์ ๋๊ตฐ๊ฐ๊ฐ ์ด ์ง์์ ์ ๊ณตํ ์ฑ
์์ด ์๋์ง ์ฌ๋ถ์ ๊ดํ ๊ฒ์ด ์๋๋๋ค. ์ ์ฒ๋ผ ์ด ๊ธฐ๋ฅ์ด ํ์ํ ๊ธฐ์ฌ์๊ฐ ์์ต๋๋ค. ์ด์จ๋ ํธ๋์คํ์ผํด์ผ ํ๋ ์ผ๋ถ ๊ฐ๋ฐ์์ ๋ค๋ฅธ ๊ฐ๋ฐ์์๊ฒ๋ ์ด์ ์ด ์์ต๋๋ค. ๊ณต๋ ์์
์ ๋ ์ ์ํํ ์ ์๋๋ก ๊ธฐ๋ณธ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ณด๊ดํ ์ ์์ ๋ ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ๋ณ๋๋ก ๋ฒ์ญ/๋ฒ๋ค ์ํฌํ๋ก๋ฅผ ๋ง๋ค์ง ์์์ผ๋ฉด ํฉ๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ babel ES6์์ ES5 ํธ๋์คํ์ผ๋ฌ ์คํฌ๋ฆฝํธ๋ก ํจ๊ป ์์ ํ ์ ์๋๋ก ๋ฉ์ธ ๋ฆฌํฌ์งํ ๋ฆฌ์ ํ๋์ ํ์ผ์ ํ์ฉํ๋ ๊ฒ์ด ๊ณต์ ํ ํํ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ฑฐ๊ธฐ์ ์ ๋ง ๋ฌธ์ ๊ฐ ์์ต๋๊น? ๊ธฐ๊ณ ์๊ฐ ๊ธฐ๋ณธ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ํ์ํ ๊ธฐ๋ฅ์ ๋ํด ํจ๊ป ์์ ํ ์ ์๋๋ก ํ์ฉํ์๊ฒ ์ต๋๊น?
์ด ์์ ์ ์ํํ๋ ๋ฐ ํ๋ ฅ์์๊ฒ ๋์์ด๋ ๋ฆฌ์์ค๋ฅผ ์์ฒญํ๋ ๊ฒ์ด ์๋๋๋ค. ํ์ํ ์ฌ๋๋ค์ด ๊ธฐ๋ณธ ๋ฆฌํฌ์งํ ๋ฆฌ์์ ํจ๊ป ์์ ํ ์ ์๋๋ก ํ์ฉํด ๋ฌ๋ผ๋ ๊ฒ์ผ ๋ฟ์ ๋๋ค. ๋ด๊ฐ ์ด๊ฒ์ ์ํด PR์ ํ๊ณ ๊ทธ๊ฒ์ด ํจ๊ณผ๊ฐ ์๋ค๋ฉด, ๋น์ ์ ์ ๋ง๋ก ๊ทธ๊ฒ์ ๊ฑฐ๋ถํ๊ธฐ ์ํด ํฌํํ์๊ฒ ์ต๋๊น?
๋ด๊ฐ ์ด๊ฒ์ ๋ํ PR์ ๋ง๋ค๊ณ ์๋ํ๋ค๋ฉด
๋ด ๋ง์, ์ด๊ฒ์ด ์์๋๋ ๊ฒ์ ๋ณด๋ ๊ธฐ์ฉ๋๋ค
๋น์ ์ ์ ๋ง๋ก ๊ทธ๊ฒ์ ๊ฑฐ๋ถํ๊ธฐ ์ํด ํฌํํ์๊ฒ ์ต๋๊น?
๋ฆฐํ ํจ์ค์ ์คํจํ๋ฉด ๋ชจ๋ ๋ฒ ํ ์ด ์ทจ์๋ฉ๋๋ค ๐
๊ฑฐ๊ธฐ์ ์ ๋ง ๋ฌธ์ ๊ฐ ์์ต๋๊น?
์, ์ ์ฅ์๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋ฉ ํจํด์ ํ๋ณดํด์๋ ์ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
์, ์ ์ฅ์๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋ฉ ํจํด์ ํ๋ณดํด์๋ ์ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
three.js
+ three.min.js
(ITT๋ ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ๋ค์ ํด๊ณ ํด์ผ ํ๋ค๋ ํฉ์๋ฅผ ์ธ์ ํจ)๋ฅผ ํ์ง ์๊ณ ์ง์ ์๋์ผ๋ก ์คํํด์ผ ํ๋ babel ์คํฌ๋ฆฝํธ๊ฐ ์๋ ๊ฒฝ์ฐ ๊ณต์์ ์ผ๋ก ์์ง ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๊ฑฐ์ ๋น๋๋ ์ง์ง. ๋๋ ์ฐ๋ฆฌ๊ฐ ์ฌ๋๋ค์ด ๋์ ๋ชจ๋์ ์ฌ์ฉํ๋๋ก ํ์คํ ๊ถ์ฅํ๊ณ babel ์คํฌ๋ฆฝํธ์ ์ด์ ๋ํด ์์ฑ๋ ํ์ผ์ ๊ฒฝ๊ณ ๋ฅผ ํ์ํด์ผ ํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ๋๋ ๊ธฐ์ฌ์๋ค์ด ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋ฉ ํจํด์ ์กฐ์ฅํ๋ ์ด์ ๋ก ๋ชจ๋์ ์ฌ์ฉํ ์ ์๋ ์ํฉ์ ์๋ ์ฌ๋๋ค์ ์ํด ํจ๊ป babel ์คํฌ๋ฆฝํธ ์์
์ ํ๋ ๊ฒ์ ํ์ฉํ์ง ์์ต๋๋ค. ์ฃผ๋ก ๋ชจ๋์ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ถ๊ฐ๋ฅํ๊ฑฐ๋ ๋น์ค์ฉ์ ์ธ ์ํฉ์ด ์ฌ์ ํ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ฌธ์๋ ์ด๋ฌํ ํ์์ฑ์ ์ธ์ ํฉ๋๋ค. ํจ๊ป ์์
ํ๋ ๋ฐ ํ์ํ ์ฌ๋๋ค์ ์ํด ํ๋์ ํ์ผ์ ์์ ํ๊ฒ ์ถ๊ฐํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฌ๊ธฐ์์ ES5 three.min.js์ three.js๋ฅผ ๋์์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ด๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค.
๋๋ examples/js, three.min.js, three.js๋ฅผ ๋์์ ๋ ์ด์ ์ฌ์ฉํ์ง ์์์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํ์ต๋๋ค. ์ฆ, ์ฌ๋ฌ ๋ฆด๋ฆฌ์ค์ ํผ๋จ๋ฆฌ๊ธฐ๋ณด๋ค ํ ๋ฆด๋ฆฌ์ค์์ ๋ชจ๋ ES5 ์ฝ๋๋ฅผ ์ ๊ฑฐํด์ผ ํฉ๋๋ค.
@๋ฌด๊ฒ87
์, ์ ์ฅ์๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋ฉ ํจํด์ ํ๋ณดํด์๋ ์ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
Windows 10์์ DOS ๊ฒ์์ ๊ณ์ ์คํํ ์ ์์ต๋๋ค.
๊ทธ๋ ๋ค๊ณ ํด์ Microsoft๊ฐ "์ฌ์ฉ๋์ง ์๋ ์ฝ๋ฉ ํจํด"์ ํ๋ณดํ๊ณ ์๋ค๋ ์๋ฏธ๋ ์๋๋๋ค.
์ด ํ๋ก์ ํธ์์ ์ ์ง ๊ด๋ฆฌ๋๋ ์์ js ๋ชจ๋์ ๋ช ํํ ํ๊ธฐ ์ํด ์ฌ์ฉํ ๋ ธ๋, npm ๋๋ ๋น๋ ํ๋ ์์ํฌ๊ฐ ํ์ํ์ง ์์ต๋๋ค.
ํ๋ก๋์ ์ค๋น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ค๋ ๊ฒ์ ์ฝ๋๋ฅผ ๋ฌถ๋๋ค๋ ๊ฒ์ ์์ง ๋ง์ :)
์ฌ์ฉ ๊ฐ๋ฅํ Rollup๊ณผ ๊ฐ์ ๋ฒ๋ค ๋๊ตฌ์ ๊ฐ์ฌํ์ง๋ง ๋ช ๊ฐ์ง ์ง๋ฌธ์ ๊ณ ๋ คํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด์ ๋ํ ๊ฐ์ธ์ ์ธ ๋๋:
์ด ๋์๊ด์ 10๋ ์ด ๋์์ต๋๋ค. ES5/UMD๋ก ์์ฑ๋ examples ํด๋์ ๋ชจ๋์ ์์กดํ๋ ๊ฑฐ๋ํ ์ํ๊ณ๊ฐ ์์ต๋๋ค. ์ ์ฒด ์ํ๊ณ์ ๋ํ ์ง์์ ์ค๋จํ๋ ๊ฒ์ ๊ณต์ ํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฌ๋๋ค์ด ๋ชจ๋ ๋ฒ๋ค๋ง ํจํด ์์ด ES6์ ์ฌ์ฉํ ์ ์๋ค๋ ์ฌ์ค์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ๋งค์ผ ES6์ ์ฌ์ฉํ์ง๋ง ํ๋ก ํธ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋ชจ๋ ๋ฒ๋ค๋ง ํจํด์ ์ฌ์ฉํ์ง ์์ต๋๋ค. ์ ๋ ๋น๋ ๋๊ตฌ๊ฐ ํ์์ ๋ฐ๋ผ ๋งค์ฐ ๋ง์ถคํ๋๊ณ ๋ชจ๋ ๋ฒ๋ค๋ง ํจํด์ ํตํฉํ ์ ์๋ ์ํฐํ๋ผ์ด์ฆ ์์ ์์ ์ผํ์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ฌด์์ ํด์ผ ํฉ๋๊น?
๊ฐ ๋ฆด๋ฆฌ์ค ์ดํ์ ์ฃผ์ด์ง ๋ฐฐํฌ์ ๋ํด ES6 ๋ชจ๋์ ES5/UMD ๋ชจ๋๋ก ์ปดํ์ผํด ๋ณด๊ฒ ์ต๋๋ค.
์, ์ ์ฅ์๊ฐ ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ์ฝ๋ฉ ํจํด์ ํ๋ณดํด์๋ ์ ๋๊ธฐ ๋๋ฌธ์ ๋๋ค.
์ถ์ ๊ฑฐ์ ๋ชจ๋ ๊ฒ์ ๋ํด ์๋ฃจ์ ์ ์ฌ์ ํ โโ์ค๋๋ ํจํด, ๊ธฐ์ ๋ฐ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ฐ์ํ ํ์ง์ ์ ์งํ ์ ์์ต๋๋ค.
๋น์ ํ์๋ฉด - ์ฌ๊ฐ ์๊ฐ์๋ ํฌ์ธํธ ๋๋ก ๋ ์กฐ๊ฐ์ ์ฆ๊น๋๋ค. ๋๊ตฌ์ ๊ธฐ์ ์ ์ ๋ ๊ณต๊ตฌ์ ๋ค๋ฅด์ง๋ง ๊ฒฐ๊ตญ ์กฐ๊ฐํ์ ์ฌ์ ํ โโ๊ณ ํ์ง์ ๋๋ค. ๋๋ ํฌ์ธํธ ๋์ ์ฌ์ฉํ๋ ๊ฒ์ ์ข์ํ๊ณ ๋ ์์ ์ด๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ง์กฑํ๋ ๋ฌด์ธ๊ฐ๋ฅผ ์์ฐํ๋ ๋ฐ ํ์ํ ๊ธฐ์ ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ํฌ์ธํธ ๋์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฐ์ธ์ ์ผ๋ก ์ ํธํ์ต๋๋ค.
ES5/UMD ๋ชจ๋์ ๋ํด์๋ ๋ง์ฐฌ๊ฐ์ง์ ๋๋ค. ์ ๋ ์ ๋ง ๊ณ ํ์ง์ ์ฝ๋ ๊ธฐ๋ฐ์ ์ ์งํ๋ ํจํด, ๊ธฐ์ ๋ฐ ๋๊ตฌ๋ฅผ ์ฐพ์ ์ ์์๊ณ ๊ณ์ํด์ ๊ฐ์ธ ์ทจํฅ์ ์คํํ๊ณ ์ถ์ต๋๋ค.
๊ฐ ๋ฆด๋ฆฌ์ค ์ดํ์ ์ฃผ์ด์ง ๋ฐฐํฌ์ ๋ํด ES6 ๋ชจ๋์ ES5/UMD ๋ชจ๋๋ก ์ปดํ์ผํด ๋ณด๊ฒ ์ต๋๋ค.
looee๋ ๋ง์์ ๋์ํฉ๋๋ค.
๊ฐ์ ํ๋ ๊ฒ์ด ๊ณต์ ํฉ๋๊น [...]
๋ญ๋ผ๊ณ ์? ์ฐ๋ฆฌ๋ ์ฐ๋ฆฌ๊ฐ ์ ํธํ๋ ์ ๊ทผ ๋ฐฉ์์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค. '๊ฐ์ '์ ๋์ค์ ์ต๋๋ค. ์ ํธ๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ชจ๋์ ์ฌ์ฉํ๋๋ก ๊ถ์ฅํ๋ ๊ฒ์ผ๋ก ๋ณด์ด์ง๋ง(์ผ๋ถ ์ฌ๋๋ค์ ์ฌ์ ํ โโ์ค๋๋ 3๊ฐ๋ฅผ ์ํ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ) ์ค์ ๋ก ์ํ๋ ์ฌ๋๋ค์ ์ํ ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํฉ๋๋ค.
๊ฐ ๋ฆด๋ฆฌ์ค ์ดํ์ ์ฃผ์ด์ง ๋ฐฐํฌ์ ๋ํด ES6 ๋ชจ๋์ ES5/UMD ๋ชจ๋๋ก ์ปดํ์ผํด ๋ณด๊ฒ ์ต๋๋ค.
์ด๊ฒ์ ๋๊ตฌ๋ ํ ์ ์์ต๋๋ค. ๊ทธ ๋น์ฉ์ three.js ์ ์ง ๊ด๋ฆฌ์๊ฐ ๋ถ๋ดํ ํ์๊ฐ ์์ต๋๋ค. ์์์ @gkjohnson ์ด ๋งํ ๊ฒ์ ๋ฐ๋ณตํ๊ณ ์ถ์ต๋๋ค examples/js
๋ฐ examples/jsm
๋๋ ํ ๋ฆฌ๋ฅผ ๋ชจ๋ ์ ์ง ๊ด๋ฆฌํ๋ ๋น์ฉ์ด ๋์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ๋ฌด๊ธฐํ์ผ๋ก ํ ์ ์์ผ๋ฉฐ ES6 ๋ชจ๋์ด ๋ ๊ฐ์ง ์ ๊ทผ ๋ฐฉ์ ์ค ๋ ํ๋์ ์ด๋ผ๋ ๊ฒ์ด ๋ถ๋ช
ํฉ๋๋ค. ๋ค์ ๋น์ฉ์ ๊ณ ๋ คํ์ญ์์ค.
๋ง์ง๋ง ํญ๋ชฉ์ด ์๋ง๋ ๊ฐ์ฅ ํด ๊ฒ์ ๋๋ค. ์ด ๋ฆฌํฌ์งํ ๋ฆฌ์์ ๋ชจ๋ ํญ๋ชฉ์ ๋ํ ๋ ๊ฐ์ ๋ณต์ฌ๋ณธ์ ์ฌ์ฉํ ์ ์๋ ํ ๋ ๋ค ์์ ํ ์ง์๋๋ ๊ฒ์ผ๋ก ํ์๋ฉ๋๋ค. ๋ ๊ฐ์ง ์์ ํ๋ฆ์ ํผ๋ํ๊ฑฐ๋ ๋ณต์กํ ๋ฐฉ์์ผ๋ก ์คํจํ๋ CJS ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ES6 ๋ชจ๋ ๋ก๋๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ ์ฌ์ฉ์๋ฅผ ๋๊ธฐ ์ํด ์ ๊ธฐ์ ์ผ๋ก ์๊ฐ์ ํ ์ ํฉ๋๋ค.
๋ฌธ์ ๋ฅผ ๊ฐ๋จํ๊ฒ ๋ฐ๊ฟ ๋งํ ์ ์์ต๋๋ค. three.js ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ค์ํ์ง๋ง ์ ํ์ ์ธ ๋ถ๋ถ์ธ ๋ชจ๋ ์์ ๋ ํ์ฌ ๋ชจ๋ ๊ตฌ๋ฌธ์ ์ ํ ์ฌ์ฉํ์ง ์์ต๋๋ค. UMD๋ ์๋๊ณ CommonJS๋ ์๋๊ณ ES6 ๋ชจ๋๋ ์๋๋๋ค. ๊ทธ๋ค์ ๋จ์ํ THREE
์ ์ญ ๋ค์์คํ์ด์ค๋ฅผ ํจ์นํฉ๋๋ค. ๋์ ES6 ๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ์ฌ ์
๋ฐ์ดํธํ๊ณ ์ถ์ต๋๋ค. ์ด ๋ณ๊ฒฝ์ด ๊ณํ๋์๋ค๋ ์กฐ๊ธฐ ๊ฒฝ๊ณ ๊ฐ ๋ง์ด ์์์ต๋๋ค.
ES5/UMD๋ก ์์ฑ๋ examples ํด๋์ ๋ชจ๋์ ์์กดํ๋ ๊ฑฐ๋ํ ์ํ๊ณ๊ฐ ์์ต๋๋ค. ์ ์ฒด ์ํ๊ณ์ ๋ํ ์ง์์ ์ค๋จํ๋ ๊ฒ์ ๊ณต์ ํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
three.js ์ํ๊ณ์ ์ด๋ค ๊ฒ๋ ๊ธ๋ก๋ฒ THREE.*
๋ค์์คํ์ด์ค์ ๋๋ฌด ์์กด์ ์ด์ด์ ๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ฑฐ๋ ES5๋ก ๋ณํํ๋๋ก ์
๋ฐ์ดํธํ ์ ์๋ค๊ณ ๋งํ๋ ๊ฒ์ ๊ณต์ ํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ฒ๋ค๋ฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ฌ๊ธฐ์๋ ์ฌ๋ฌ ๊ฐ์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ด ์์ผ๋ฉฐ ์ฌ์ฉ์์๊ฒ ์ ํฉํ ์ต์
์ ์ฐพ๋ ๋ฐ ๋์์ด ๋๋๋ก ๊ธฐ๊บผ์ด ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค.
examples/js ๋ฐ examples/jsm ๋๋ ํ ๋ฆฌ๋ฅผ ๋ชจ๋ ์ ์ง ๊ด๋ฆฌํ๋ ๋น์ฉ์ด ๋์ต๋๋ค.
์ด์ ๋ํด ์กฐ๊ธ ๋ ํ๊ณ ๋ค๊ณ ์ถ์ต๋๋ค. ์ ๋ ๋ง์ ์ฌ์ฉ์ ์ ์ ๋๊ตฌ๋ฅผ ์์ฑํ๊ณ ํ๋ก ํธ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์๋ํ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ผ๋ฉฐ ์ ๊ฐ ํ ์ ์๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ธฐ๊บผ์ด ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค.
์๋ํ ์์ฑ ๋ฐ ์ ์ง ๊ด๋ฆฌ
์๋ํ ์ค๋จ ์ ๋ฆด๋ฆฌ์ค ์คํจ ๋๋ฒ๊น
์ ์ง์ธ๋ฅผ ์กฐ๊ธ ๋ ์ดํดํ๋๋ก ๋์์ฃผ์ธ์. ์ด๊ฒ์ THREE ์ฝ๋๋ฒ ์ด์ค๋ง์ ๊ณ ์ ํ ๊ฒ์ ๋๊น? ๋ด ๊ฒฝํ์ ๋ฐ๋ฅด๋ฉด ์ด๋ฌํ ์ ํ์ ์ฝ๋๋ ์ผ๋ฐ์ ์ผ๋ก ์ต์ํ์ ์ ์ง ๊ด๋ฆฌ๊ฐ ํ์ํ ๊ฐ์ฅ ์ค๋ ์ง์๋ฉ๋๋ค. ์ด๊ฒ๋ค์ ํ ๋ฒ ์์ฑํ๊ณ ์ค๋ ์๊ฐ ๋์ ๋ค์ ๋ณด์ง ์๋ ์คํฌ๋ฆฝํธ์ ๋๋ค.
๋ชจ๋ ํ ์์ฒญ์ด ์์ฑ๋ ํ์ผ์ด ์๋ ์์ค ํ์ผ์ ์ ๋ฐ์ดํธํ๋๋ก ํฉ๋๋ค.
๋ฆด๋ฆฌ์ค ์ํฌํ๋ก์์ ์์ ์คํฌ๋ฆฝํธ๋ ํ ์คํธ๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๋ ์ํฌํ๋ก์ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ค๋ช ํ๋ ๋ฌธ์ ์ ์ง ๊ด๋ฆฌ
๋๋ ๋ํ ์ ์ญ ๋ค์์คํ์ด์ค์ ๋ํ ๋ฌธ์๋ฅผ ์ญ์ ํ๋ ๋ฐ ํฌํํ ๊ฒ์ ๋๋ค. ๋ ๊ฐ์ง ์ํฌํ๋ก์ ๋ํ ๋ฌธ์๋ฅผ ์ง์ํ๋ ๊ฒ์ ์ด๋ฆฌ์์ ์ผ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ ๋์ ์ผ์ด ์๋๋๋ค. ๋ค๋ฅธ ์ปจํ ์คํธ์ ๋ํ ์ฝ๋๋ฅผ ๋ฒ๋ค๋ก ์ ๊ณตํ๋ ๋๋ถ๋ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ UMD/ES6 ๋ชจ๋์๋ ๋ฌธ์ ์ธํธ๊ฐ ํ๋๋ง ์์ต๋๋ค.
CJS ๋ฐ ES6 ์ํฌํ๋ก๋ฅผ ๋ชจ๋ ์ฌ์ฉํ๋ ค๋ ์ฌ์ฉ์์ ๋ฒ๊ทธ ๋ณด๊ณ ์ ๋ฐ ์ง์ ์ง๋ฌธ์ ๋ต๋ณํฉ๋๋ค.
์ด์ ๊ด๋ จ๋ ์ด์์ ์์ THREE์ ์ธ๊ธฐ์ ๋น๋กํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋น์ ๊ณผ ๋๋ ์คํ ์ค๋ฒํ๋ก์์ ํญ์ ์ด๋ฌํ ์ ํ์ ๋ฌธ์ ๋ฅผ ๋ด ๋๋ค. ๋ ์ํฌํ๋ก๋ฅผ ๊ตฌ๋ถํ ์ ์๋ ์ฌ์ฉ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์๊ฐ์ ์ป์ ์๋ก์ด ํ๋ก๊ทธ๋๋จธ์ผ ๊ฐ๋ฅ์ฑ์ด ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ๋ณธ์ ๋ฐฐ์ฐ๋ ค๊ณ ํฉ๋๋ค.
๋ชฉํ๊ฐ ํนํ ๋ ์ํฌํ๋ก ๊ฐ์ ํผ๋๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ์ ์์ ์ค์ด๋ ๊ฒ์ด๋ผ๋ฉด ES5 ์ฝ๋๋ฅผ ์ ๊ฑฐํ๋ ๊ฒ์ด ๋์์ด ๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ ๋ฐ์ ์ธ ๋ฌธ์ ์ ์์ด ๋ฐ๋์ง๋ ์๋ฌธ์ ๋๋ค. ์๋ก์ด ํ๋ก๊ทธ๋๋จธ๋ ํญ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ด๋ จ๋๊ฑฐ๋ ๊ด๋ จ๋์ง ์์ ์ ์๋ ๋ค์ ์ง๋ฌธ์ ๊ฐํ ๊ฒ์ ๋๋ค.
์ ์ฒด ๋ฌธ์ ์ ์์ ์ค์ด๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
์ค์ ๋ชฉํ๊ฐ ์ ์ฒด ๋ฌธ์ ์ ์ ์ ์ค์ด๋ ๊ฒ์ด๋ผ๋ฉด ๋ณด๋ค ์๊ฒฉํ ๋ฌธ์ ์ ์ฑ
์ด ๋์์ด ๋ ์ ์์ต๋๋ค. ์ด๋ฏธ Help (please use the forum)
์ ๊ฐ์ ํ๊ทธ๋ฅผ ์ฌ์ฉํ๊ณ ์์ง๋ง ์ด๋ฌํ ์ ํ์ ํญ๋ชฉ์ด ๋ ๋ง์ด ํ์ํ ์ ์์ต๋๋ค.
์ผ๋ฐ์ ์ผ๋ก 3๋ช ์ ๊ธฐ์ฌ์๊ฐ ํ์ฌ ์ ์ฒด ๋ณผ๋ฅจ์ ์๋๋๊ณ ์๋์ง ์ฌ๋ถ๋ฅผ ๋ ผ์ํ๊ณ ์กฐ์ฌํ๋ ค๋ ๋ช ๊ฐ์ง ์ ํ์ ๋ฌธ์ ๋ฒ์๋ฅผ ์ค๋ช ํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
๋ช ๊ฐ์ง ์์ด๋์ด:
suggestions
๋ฐ enhancements
์์ฑ ๋น์ (271)๊ฐ์ ๋ฏธํด๊ฒฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด ๋ ์ด๋ธ์ ๋ง์ ์์์ ๋ฐ์์ํค๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ค์ ์ ์์ผ๋ก ์ ๋ฌ๋ PR ์ค๋น/ํ์ธ๋ง ์ํํ ์๋ ์์ต๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ ์ธ์คํ ๋ซ๊ณ Discussion (please use the forum)
๋ก ํ์ํ์ญ์์ค.loaders
์์ฑ ๋น์ (61) ๊ฐ์ ๋ฏธํด๊ฒฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด ๋ ์ด๋ธ๋ ๋ง์ ์์์ ๋ฐ์์ํค๋ ๊ฒ ๊ฐ์ต๋๋ค. suggestions
๋ฐ enhancements
๋๋ ์๋ชป๋ ํ์์ ๋ฒ๊ทธ ๋ณด๊ณ ์์ ๊ด๋ จ๋ ์ด ๋ ์ด๋ธ์ ๋ง์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์๋ง๋ ์ ๊ตฌ์ฑ๋ ๋ฒ๊ทธ ๋ณด๊ณ ์์ PR ์ค๋น/์ ์์ ์ํด ํต๊ณผ๋ ๊ฒ์ฌ๋ง ๋ฐ์ ์ ์์ต๋๋ค. ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ ์ธ์คํ ๋ซ๊ณ ๊ทธ์ ๋ฐ๋ผ ํ์ํ์ญ์์ค.three.js ์ํ๊ณ์ ๋ชจ๋ ๊ฒ์ด ๊ธ๋ก๋ฒ THREE.* ๋ค์์คํ์ด์ค์ ๋๋ฌด ์์กด์ ์ด์ด์ ๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ ๊ตฌ๋ฌธ์ ์ฌ์ฉํ๊ฑฐ๋ ES5๋ก ๋ณํํ๊ฑฐ๋ ๋ฒ๋ค๋ฌ.
๋ฌด์์ด๋ ์ ๋ฐ์ดํธํ ์ ์๋ค๋ ์ ์๋ ๋์ํ์ง๋ง ์ง์ ๊ฐ๋ฅํ ๋ฐฉ์์ผ๋ก ์ด๋ฌํ ์ฌ์ฉ์๋ฅผ ๊ณ์ ์ง์ํ๊ธฐ ์ํด ์ฝ๊ฐ์ ์์ ์ ์ํํ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์ ์ ์๋ค๋ฉด @Bug-Reaper๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๋งํ๋ ๋ฐ ๋์ํฉ๋๋ค.
๊ณต๋ ์์ ์ ๋ ์ ์ํํ ์ ์๋๋ก ๊ธฐ๋ณธ ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ฌด์ธ๊ฐ๋ฅผ ๋ณด๊ดํ ์ ์์ ๋ ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ๋ณ๋๋ก ๋ฒ์ญ/๋ฒ๋ค ์ํฌํ๋ก๋ฅผ ๋ง๋ค์ง ์์์ผ๋ฉด ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ด๋ฌํ ์ฌ์ฉ์๋ค์ด ์์ฉ ํ๋ก๊ทธ๋จ/๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๊ณ ์์คํ ๋ฐ ๋ฌธ์๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ ๋๋ ์์ฒญ๋ ์๊ฐ์ ์งํฉ์ ์ผ๋ก ์ ์ฝํ ๊ฒ์ ๋๋ค.
์ด์ ๋ํด ์กฐ๊ธ ๋ ํ๊ณ ๋ค๊ณ ์ถ์ต๋๋ค. ์ ๋ ๋ง์ ์ฌ์ฉ์ ์ ์ ๋๊ตฌ๋ฅผ ์์ฑํ๊ณ ํ๋ก ํธ ์๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ์๋ํ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ์ผ๋ฉฐ ์ ๊ฐ ํ ์ ์๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ผ๋ก ๊ธฐ๊บผ์ด ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค.
์ข์.
์ ์ฒด ๋ฌธ์ ์ ์์ ์ค์ด๋ ๋ฐฉ๋ฒ์ ๋ฌด์์ ๋๊น?
๊ณ์ ์งํํด ์ฃผ์ธ์. ๋ค๋ฅธ ์ค๋ ๋์์ ๋ ๋ ผ์ํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค. ๊ทธ๊ฒ์ ๋ค์ ๋ด ์ด์ ์๊ฒฌ ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค.
๋๋ @Bug-Reaper์ ๋ง์ ๋์ํฉ๋๋ค.
๋๋ ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ๋ฒ์ญ/๋ฒ๋ค ์ํฌํ๋ก๋ฅผ ๋ง๋ค์ง ์์์ผ๋ฉด ํฉ๋๋ค. [...]
๋๋ ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ์ด๊ฒ์ ๋์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฅ์ ๊ณผ ๋จ์ ์ ๊ณต์ ํด์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์๋๋ก ์ด๋ฌํ ์ ๋ณด๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด๊ฒ์ ๋ด๊ฐ ์ฌํด์ ๋๋ ์ฃผ๊ธฐ์ ์๋นํ ๊ฒ์ด๋ฉฐ ๋ธ๋ผ์ฐ์ ๊ณต๊ธ์ ์ฒด์ ์ฐ์ ์์์ ๋ํด ๋ฌผ์ด๋ณด๊ธฐ๊น์ง ํ๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ฆฌ ๊ณํํ ์ ์์์ต๋๋ค.
ES6 ๋ชจ๋์ด ๋ฏธ๋๋ผ๋ ๋ฐ ๋์ํ์ง๋ง ๊ฐ์ ธ์ค๊ธฐ ๋งต ์์ด ๋ชจ๋์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐํ๋ฉด ํฐ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ์ผ๊ธฐํ๊ณ ํ๋ฆ์ ์์ ํ ๊นจ๋จ๋ฆด ์ ์์ต๋๋ค. examples/js
์ฌ์ฉ์ ์ค๋จํ๊ธฐ๋ก ๊ฒฐ์ ํ์ ๋ ์ง๋ ๊ฐ์ ธ์ค๊ธฐ๊ฐ ๋ ๋ง์ ๊ด์ฌ์ ๋๊ธฐ๋ฅผ ๊ธฐ๋ํ์ง๋ง ํ์ฌ๋ก์๋ ๋ธ๋ผ์ฐ์ ์ ์ฐ์ ์์๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
์ด ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ ๋งต์ ๊ตฌํํ ๋๊น์ง examples/js
ํด๋ ์ง์ ์ค๋จ์ ์ค๋จํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๋๋ ์ด๋ณด์๊ฐ ์ฒซ ๋ฒ์งธ ํ๋ธ๋ฅผ ๋ ๋๋งํ๊ธฐ ์ํด ํด๋ฆฌํ์ด๋ ๋ฒ๋ค๋ฌ์ ๋ํด ๋ฐฐ์ฐ๋๋ก ๊ฐ์ํ๋ ๊ฒ์ ์ซ์ดํฉ๋๋ค.
@Bug-Reaper์ ๊ฐ์ ๊ฒฐ๋ก ์ ๋๋ฌํ์ต๋๋ค. ์ค๋์ examples/jsm
ํ์ผ์์ examples/js
๋ฅผ ๋น๋ํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.
@mrdoob
๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ ๋งต์ ๊ตฌํํ ๋๊น์ง examples/js ํด๋ ์ง์ ์ค๋จ์ ์ค๋จํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
@Bug-Reaper์ ๊ฐ์ ๊ฒฐ๋ก ์ ๋๋ฌํ์ต๋๋ค. ์ค๋์ examples/jsm ํ์ผ์์ examples/js๋ฅผ ๋น๋ํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ณ ์์ต๋๋ค.
ํ๋ช
ํ ๊ฒฐ์ ์
๋๋ค.
๐
@mrdoob ๋ฌผ๋ก ๋น์ ์ ๊ฒฐ์ ์ ๋ฐ์๋ค์ด์ง๋ง ๊ธฐํ๋ฅผ ๋์น ๊ฒ ๊ฐ์์. ์กฐ๋ง๊ฐ ๊ฐ๋ฐ์๋ ๊ธ๋ก๋ฒ ์คํฌ๋ฆฝํธ์์ ๋ฉ์ด์ ธ์ผ ํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ Import Maps
๊ฐ ์ฌ๊ธฐ์ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ค์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฌ์ฉ์๋ฅผ ๋ ๋์ ๋ฏธ๋ ๋ณด์ฅํ ์ํฌํ๋ก๋ก "๊ฐ์ "ํ๋ ๋์ ๊ธ๋ก๋ฒ ์คํฌ๋ฆฝํธ๋ฅผ ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. 2020๋
.
๊ทธ๋ฆฌ๊ณ
Import Maps
๊ฐ ์ฌ๊ธฐ์ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ค์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๋ค๋ฅธ ๋ ๋๋ ๋๊ตฐ๊ฐ๊ฐ ์ด๋ ๊ฒ ํ๋ ๊ฒ์ ๋ณด์์ต๋๋ค.
<script src="js/three.js"></script>
<script src="https://cdn.rawgit.com/mrdoob/three.js/master/examples/js/loaders/GLTFLoader.js"></script>
<script type="module" src="js/main.js"></script>
๊ทธ๋ฆฌ๊ณ main.js
๋ด๋ถ์์ ๋ค์๊ณผ ๊ฐ์ด ํ์ต๋๋ค.
import {OrbitControls} from "https://threejsfundamentals.org/threejs/resources/threejs/r119/examples/jsm/controls/OrbitControls.js";
๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ํจ๊ณผ๊ฐ ์์๋ ๊ฒ์... ๐
์ฐ๋ฆฌ๋ ์ฌ์ฉ์๊ฐ ์ฌ๋ฐ๋ฅธ ์ผ์ ํ๊ธฐ๋ฅผ ๊ธฐ๋ํ ์ ์์ต๋๋ค. ์ฌ์ฉ์๋ ํ์ตํ๊ณ ์์ผ๋ฉฐ ๋ฌด์ธ๊ฐ๊ฐ ์๋ํ ๋๊น์ง ์๋ํ๊ณ ์์ต๋๋ค. ๋ฌธ์ ๋ ๊ทธ๋ค์ด ๊นจ๋ซ์ง ๋ชปํ๋ ์ฌ์ด์ ์ณ์ ์ผ์ ํ ์ ์๋๋ก ๋์์ฃผ๋ ๋์์ธ์ ์ฐพ๋ ๊ฒ์ ๋๋ค.
๊ฐ์ ธ์ค๊ธฐ ๋งต์ด ์๋ ES6 ๋ชจ๋์ ๋ฌธ์ ๋ ์ฌ์ฉ์๊ฐ OrbitControls.js
๋ฅผ ์์ ์ ํ๋ก์ ํธ์ ์๋ /js
ํด๋์ ๋ณต์ฌํ๊ณ ์ด์ ์ฒ๋ผ ๊ฐ์ ธ์ฌ ์ ์๋ค๋ ๊ฒ์
๋๋ค. OrbitControls.js
๊ฐ ../../build/three.module.js
๋ฅผ ์ฐพ๊ธฐ ๋๋ฌธ์ ์๋ํ์ง ์์ต๋๋ค.
๊ฐ์ ธ์ค๊ธฐ ๋งต์ ์ฌ์ฉํ๋ฉด OrbitControls.js
๋ three
์์ ๊ฐ์ ธ์ต๋๋ค. ์ฌ์ฉ์๋ ์ํ๋ ์์น์ ํ์ผ์ ๋ณต์ฌํ ๋ค์ ๊ฐ์ ธ์ค๊ธฐ ๋งต์์ ๊ฒฝ๋ก๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค.
๊ฐ์ ธ์ค๊ธฐ ๋งต์ ์ฌ์ฉํ๋ฉด "์๋ "๊ณผ ๊ฐ์ด ํ์ผ์ ์ฝ๊ฒ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์ด์ ๋งํผ ์ฝ์ง๋ ์๊ฒ ์ง๋ง ์ต์ํ ์ฌ์ฉ์๋ ํ์ผ์ ๊ฐ์ ธ์ค๋ ๋์ ์์์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค. ๋ฌด์ธ๊ฐ๋ฅผ ์ด๊ธฐ๊ณ ๋ฌด์ธ๊ฐ๋ฅผ ์์ต๋๋ค.
๊ฐ์ ธ์ค๊ธฐ ๋งต์ ์ฌ์ฉํ๋ฉด ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ๊ตฌ์ฑํ ์ ์๊ณ ๋ฐ๋ผ์ ๋ ์ ์ฐํ๊ฒ ๋ง๋ค ์ ์๋ค๋ ๋ฐ ๋์ํ์ต๋๋ค. ์ฌ์ฉ์๋ ์ฌ์ ํ ๊ฐ์ ธ์ค๊ธฐ ๋งต์ ์กฐ์ ํด์ผ ํ์ง๋ง(๋ฐ๋ผ์ ๊ทธ๊ฒ์ด ์ค์ ๋ก ๋ฌด์์ธ์ง ์ดํดํด์ผ ํฉ๋๋ค).
์ ๋ "JS ํ์ผ์ ํด๋์ ๋ณต์ฌ" ์ ์ฒด๊ฐ ์ฌ์ ํ ์ํฐ ํจํด์ด๋ผ๊ณ ์๊ฐํ๊ณ ์๋ก์ด ์ฌ์ฉ์/์ด๋ณด์์๊ฒ CDN ๊ฐ์ ธ์ค๊ธฐ ์์ ์ ๊ถ์ฅํ์ฌ ์ด๊ฒ์ ๋ฐฉ์งํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋์ต๋๋ค. ์ด๋ค ์ด์ ๋ก๋ ๋น๋๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค.) ์ ์ ํ ์ฑ์ ์ด์จ๋ ๋น๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
๋๋ ์ ๋ง๋ก ์ํฐ ํจํด์ผ๋ก ๋ณด์ง ์์ต๋๋ค.
๊ทธ๊ฒ์ด ๋ด๊ฐ ์น์ฌ์ดํธ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์ด ๋ฐฉ๋ฒ์ผ ๋ฟ์
๋๋ค. .css
ํ์ผ์ /css
ํด๋์ ๋ฃ์ ๋ค์ ์ด๋ฏธ์ง๋ฅผ /img
์, .js
ํ์ผ์ /js
์ ๋ฃ์ต๋๋ค.
์ง๋ ๋ช ๋ฌ ๋์ ๋๋ ES6 Modules/CDN ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๋ช ๊ฐ์ง ์คํ ์ ํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ด ํ๋ก์ ํธ๊ฐ ์๋ ๊ณณ๊ณผ ๋ค๋ฅธ ๋๋ฉ์ธ์์ ์จ ๊ฒ์ด ๊ธฐ๋ถ์ด ์ข์ง ์์ต๋๋ค.
ํ์ผ์ ๋ณต์ฌํ์ง ์์ ๋ ํ ๊ฐ์ง ํฐ ์์ค์ ํ์ผ์ ํธ์งํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. examples/js
์ ํ์ผ์ ํญ์ ๊ทธ ์์ ๋น๋ํ ์ ์๋ ์์ ์ฌ์ผ ํ์ต๋๋ค. ๋ด ํ๋ก์ ํธ์์ OrbitControls.js
๋ฅผ ๋ณต์ฌํ๋๋ฐ ๋ด๊ฐ ํ์ํ ์์
์ ์ ํํ ์ํํ์ง ์์๋ค๋ฉด ๊ทธ๋ฅ ๋ก์ปฌ ํ์ผ์ด์๊ธฐ ๋๋ฌธ์ ์์ ํ ์ ์์์ต๋๋ค.
์ด๊ฒ์ด ๋ด๊ฐ ํ๋ก์ ํธ๋ฅผ ์ค์ ํ๋ ๋ฐ ์ฌ์ฉํ ๋ฐฉ๋ฒ์ ๋๋ค.
<script src="js/libs/three.js"></script>
<script src="js/libs/three/OBJLoader.js"></script>
<script src="js/libs/three/OrbitControls.js"></script>
<script>
console.log( THREE, THREE.OBJLoader, THREE.OrbitControls );
</script>
๊ฐ์ ธ์ค๊ธฐ ๋งต์ ์ฌ์ฉํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ์๋ฉ๋๋ค.
<script type="importmap">
{
"imports": {
"three": "js/libs/three.module.js",
"OBJLoader": "js/libs/three/OBJLoader.js",
"OrbitControls": "js/libs/three/OrbitControls.js"
}
}
</script>
<script type="module">
import * as THREE from 'three';
import { OBJLoader } from 'OBJLoader';
import { OrbitControls } from 'OrbitControls';
console.log( THREE, OBJLoader, OrbitControls );
</script>
์์ ๋งํผ ์์์ง๋ ์์ง๋ง ๊ฐ์ ธ์ค๊ธฐ ์ข ์์ฑ/์ฃผ๋ฌธ์ ์ฒ๋ฆฌํ๊ณ ๋ฒ๋ค๋ฌ๊ฐ ํ์ํ์ง ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋ฒ๋ค ๊ธฐ๋ฐ ๊ฐ๋ฐ์ ํ๋ ์ฌ๋๋ค์๊ฒ๋ ์ฌ์ ํ ์๋ํฉ๋๋ค. ์ฌ์ค, ์ ๋์จ์ด ์ด์ ../../build/three.module.js
three
์์ ๊ฐ์ ธ์ค๊ธฐ ๋๋ฌธ์ ๋ ์ข์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ํจ๊ณผ๊ฐ ์์๋ ๊ฒ์... ๐
FWIW ์ด๊ฒ์ ์ค์ ๋ก ์๋์ ๊ฒฝ์ฐ์๋ง ์๋ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ํ์ง ์์ผ๋ฉด ๋งค์ฐ ํผ๋์ค๋ฌ์ด ๋ฐฉ์์ผ๋ก ์คํจํ๊ณ ๋น๋ ํ๋ก์ธ์ค์์๋ ๋ฐ์ํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์ ๊ธฐ๋์์ต๋๋ค. ์ด๋ณด์๊ฐ ๋์ผํ ํ์ผ์ ์ฌ์ฉํ๋ ์ฌ๋ฌ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ ๊ณตํ๋ ๊ฒ์ด ๊ฑฑ์ ๋๋ค๋ฉด ํ๋ฆผ์์ด ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ๊ณ ํผ๋์ค๋ฌ์ธ ๊ฒ์ ๋๋ค.
์ ํ ์ ์์ง๋ง ์ฝ์์ ๊ฒฝ๊ณ ๋ฅผ ํตํด ํ์ด์ง์ ๋ ๊ฐ์ three.js ์ฌ๋ณธ์ด ํฌํจ๋์ด ์์์ ์ฌ๋๋ค์๊ฒ ์๋ฆฌ๋ ๊ฒ์ด ๊ฐ์น๊ฐ ์์ ์ ์์ต๋๋ค(๋์ผํ ๋ฒ์ ์ผ์ง๋ผ๋). ํผํฉํ์ง ์๋๋ก ์ฃผ์ํ์ง ์๋ ํ ๋ฌธ์ ๋ฅผ ์ผ์ผํฌ ์ ์์ต๋๋ค. ~๋๋ React๊ฐ ๋น์ทํ ์ด์ ๋ก ์ด๊ฒ์ ํ๋ค๊ณ ๋ฏฟ์ต๋๋ค~ React๋ ์ค์ ๋ก ์ด๊ฒ์ ์ค๋ฅ์ ๊ฐ๋ฅํ ์์ค๋ก ๊ฐ๋ฆฌํฌ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ ํ์ตํ ๋ ์ฌ๋๋ค์ด ์ด๋ฌํ ์์์ ํผํฉํ์ง ์๋๋ก ํ๋ ๋ฐ ์ต์ํ ๋์์ด ๋ ์ ์์ต๋๋ค.
@Bug-Reaper์ ๊ฐ์ ๊ฒฐ๋ก ์ ๋๋ฌํ์ต๋๋ค. ์ค๋์ examples/jsm ํ์ผ์์ examples/js๋ฅผ ๋น๋ํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ณ ์์ต๋๋ค.
์ด๊ฒ์ด ์๋ก์ด ๊ณํ์ด๋ผ๋ฉด ๋ชจ๋ ๋ชจ๋ ํ์ผ์ ES6 ํ์ผ๋ก ๋น๋ํ๋ #15526 / #15543(์ง๊ธ์ ํ๋ก์ ํธ์์ ์ญ์ ๋จ)์ ๋์ด๋ฆฌ๋ ๋ฐ ๋์์ด ๋์์ผ๋ฉด ํฉ๋๋ค. ์ผ๋ถ ์์ ๊ฐ ๋๋ฌด ๋ง์ ํ์ผ(์: ์ ฐ์ด๋ ๋ ธ๋)์ ํผ์ ธ ์๊ณ ์ผ๋ถ ๋ชจ๋์ ์ฌ๋ฌ ํ์ผ๋ก ๋ถํ ํ๋ ๋ฐ ๊ด์ฌ์ด ์์ ์ ์๋ค๋ ์ ์ ๊ฐ์ํ ๋ ๋ณํํ๋ ค๋ ํ์ผ์ ๋ช ์์ ๋ชฉ๋ก์ ๊ฐ์ ธ์ค๋๋ก ๋กค์ ์คํฌ๋ฆฝํธ๋ฅผ ์ ๊ทธ๋ ์ด๋ํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๋ฐ ์ถ๋ ฅ. ์ถ๋ ฅ๋๋ ํ์ผ ์ฌ์ด์๋ ์ข ์์ฑ์ ์๋์ผ๋ก ์์ฑํ ์ ์์ด์ผ ํฉ๋๋ค.
ํ์ผ์ ๋ณต์ฌํ์ง ์์ ๋ ์๋ ๊ฒ ์ค ํ๋๋ ํ์ผ์ ํธ์งํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ ์์ ์ ์ฐธ์ฌํ ์ ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ํฌ๋งํ์ง๋ง ๋์ํฉ๋๋ค.
import orbitalcontrols from orbitalcontrolsURL
class mycontrols extends orbitalcontrols {
// do the edits I care about
}
๊ทธ๋ฆฌ๊ณ ๋์ค์
let controls = new myorbitalcontrols
ํ์ผ์ ๋ณต์ฌํ์ง ์์ ๋ ์๋ ๊ฒ ์ค ํ๋๋ ํ์ผ์ ํธ์งํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
๋๋ ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ ์์ ์ ์ฐธ์ฌํ ์ ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๊ฒ์ ํฌ๋งํ์ง๋ง ๋์ํฉ๋๋ค.
๊ถค๋ ์ ์ด URL์์ ๊ถค๋ ์ ์ด ๊ฐ์ ธ์ค๊ธฐ
ํด๋์ค mycontrols๋ orbitalcontrols๋ฅผ ํ์ฅํฉ๋๋ค {
// ๋ด๊ฐ ๊ด์ฌ ์๋ ํธ์ง์ ์ํ
}๊ทธ๋ฆฌ๊ณ ๋์ค์
let ์ปจํธ๋กค = ์๋ก์ด myorbitalcontrols
๋ถ๋ชจ "ํด๋์ค"๊ฐ ๊ฐ๋จํ js ํจ์์ธ ๊ฒฝ์ฐ์๋ ์ด๋ฏธ ํ ์ ์์ต๋๋ค!
์ค์ ๋ก ์๋ํ๋ ์ฝ๋(๋๋ฒ๊ฑฐ ๋น ๋ฅธ ํ ์คํธ์์):
Promise.all([
import('https://unpkg.com/three/build/three.module.js')
.then( mod=> [mod.Camera, mod.WebGLRenderer] ),
import('https://unpkg.com/three/examples/jsm/controls/OrbitControls.js')
.then( mod=> mod.OrbitControls )
])
.then( ([
[ Camera, WebGLRenderer ],
OrbitControls
])=> new ( class extends OrbitControls {} )( new Camera, (new WebGLRenderer).domElement )
)
.then( console.log )
... ๋๋ ๋ ๊ฐ๋จํ ๊ตฌ๋ฌธ:
(async function() {
let { Camera, WebGLRenderer } = await import('https://unpkg.com/three/build/three.module.js')
, { OrbitControls } = await import('https://unpkg.com/three/examples/jsm/controls/OrbitControls.js')
class Con extends OrbitControls { }
let my = new Con( new Camera, (new WebGLRenderer).domElement )
console.log( my )
})()
aynom ํจ์์ async/await ์ฝ์์ ๋ํด ๊ฑฑ์ ํ๋ ๊ฒ ์ธ์๋ ๋ฉ์ง
class mycontrols extend orbitalcontrols { // do the edits I care about }
์ด์์ ์ผ๋ก๋ ์ฌ์ฉ์์๊ฒ ๋ณ๊ฒฝ ์ ์๋ณธ ํ์ผ์ ํธ์งํ๋๋ก ์ง์ํ๊ธฐ๋ณด๋ค ์น๊ฒฉํด์ผ ํ๋ ํจํด์
๋๋ค. ๊ทธ๋ฌ๋ ์์ ๋ ํ์ฅ์ฑ์ ์ผ๋์ ๋๊ณ ์์ฑ๋์ง ์์์ผ๋ฏ๋ก ๋ฌ์ฑํ ์ ์๋ ๊ฒ์ ๋ํ ๊ฐ๋ ฅํ ์ ํ์ด ์์ต๋๋ค. ๋ด ๊ฒฝํ์ ๋ฐ๋ฅด๋ฉด ๊ฒฐ๊ตญ ์ ์ฒด ์๋ณธ ์์ ๋ฅผ ํ์ฅ ํด๋์ค์ ์์ฑ์์ ๋ณต์ฌํ์ฌ ์๋ํ๊ฒ ํ๋ฏ๋ก extend
์ฌ์ฉ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด, OrbitControls
์ ๋ํด ๊ฐ์ฅ ์ผ๋ฐ์ ์ผ๋ก ์์ฒญ๋๋ ๋ณ๊ฒฝ ์ pan ์ ์ ํํ๋ ๊ฒ ์
๋๋ค. ์ด๊ฒ์ ํด๋น ์ค๋ ๋์์ @Mugen87 ์ ๋ฐ์ด์ฌ๋ฆฐ ์์ ์ค๋ช
ํ ๊ฒ์ฒ๋ผ ์ฝ๊ฒ ์ํ๋ฉ๋๋ค.
๊ฐ๋จํ ๋งํด์ controls.update
๋ฉ์๋์์ minPan
๋ฐ maxPan
๋ฒกํฐ๋ฅผ ์ถ๊ฐํ๊ณ controls.target
๋ฅผ ํด๋จํํฉ๋๋ค.
OrbitControls
ํ์ฅํ์ฌ ์ด ์์
์ ์ํํ์ต๋๋ค. ํ์ฅ ํด๋์ค๋ฅผ ๋ง๋ค ์ ์์ผ๋ฉฐ ์ ๋๋ก ์๋ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ณ๊ฒฝ์ ์์ํ๋ฉด ๋ฌธ์ ๊ฐ ๋ถ๋ช
ํด์ง๋๋ค. ๋จ์ํ update
๋ฉ์๋๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค.
class OrbitControlsPanLimit extends OrbitControls {
constructor(object, domElement) {
super(object, domElement);
}
update() {
super.update();
console.log('Custom update function');
}
}
์ด ํ์ฅ ํด๋์ค๋ ์๋ํ์ง๋ง( glitch ), ์ด ์๋ก์ด OrbitControlsPanLimit.update
๋ฉ์๋๋ ๋ฌด์๋ฉ๋๋ค. ์๋ OrbitControls.update
๋ฐฉ๋ฒ์ด ๊ณ์ ์ฌ์ฉ๋ฉ๋๋ค.
์์ฑ์์์ ์ฌ์ ์ํ์ฌ ๋ฎ์ด์ธ ์ ์์ต๋๋ค.
class OrbitControlsPanLimit extends OrbitControls {
constructor(object, domElement) {
super(object, domElement);
this.update = () => {
console.log('Custom update function');
}
}
}
์ฌ๊ธฐ์ super.update()
๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฏ๋ก ์ ์ผํ ์ต์
์ ์ ์ฒด ์๋ณธ ์
๋ฐ์ดํธ ๋ฐฉ๋ฒ์ ๋ณต์ฌํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ ๋ฐฉ๋ฒ์ OrbitControls
๋ด์์ ์ด ๋ง์ ๊ฒ์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ ๋ชจ๋ ๋ฐฉ๋ฒ ๊ฐ์ ๊ณต์ ๋ฉ๋๋ค.
//
// internals
//
var scope = this;
var changeEvent = { type: 'change' };
var startEvent = { type: 'start' };
var endEvent = { type: 'end' };
var STATE = {
NONE: - 1,
ROTATE: 0,
DOLLY: 1,
PAN: 2,
TOUCH_ROTATE: 3,
TOUCH_PAN: 4,
TOUCH_DOLLY_PAN: 5,
TOUCH_DOLLY_ROTATE: 6
};
var state = STATE.NONE;
var EPS = 0.000001;
// current position in spherical coordinates
var spherical = new THREE.Spherical();
var sphericalDelta = new THREE.Spherical();
var scale = 1;
var panOffset = new THREE.Vector3();
var zoomChanged = false;
var rotateStart = new THREE.Vector2();
var rotateEnd = new THREE.Vector2();
var rotateDelta = new THREE.Vector2();
var panStart = new THREE.Vector2();
var panEnd = new THREE.Vector2();
var panDelta = new THREE.Vector2();
var dollyStart = new THREE.Vector2();
var dollyEnd = new THREE.Vector2();
var dollyDelta = new THREE.Vector2();
์ต์ข
๊ฒฐ๊ณผ๋ ๊ฑฐ์ ์ ์ฒด ์๋ณธ OrbitControls
์ OrbitControlsPanLimit
์์ฑ์๋ก ๋ณต์ฌํด์ผ ํด๋์ค ํ์ฅ์ ๋ชฉ์ ์ ๋ฌดํจํํ๋ค๋ ๊ฒ์
๋๋ค. ํ์ฅ์ฑ์ ์ผ๋์ ๋๊ณ ์ปจํธ๋กค์ ํด๋์ค๋ก ์์ฑํ์ง ์๋ ํ ํ์ฅ์ด ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
๊ฑฐ๊ธฐ์ ์ฐจ์์ ๋ํด @looeee ๊ฐ์ฌํฉ๋๋ค. ๋๋ ๋ด ์์ ์ ๋ ธ๋ ฅ์์ ์ฌ์ด ํด๊ฒฐ์ฑ ์ ๋์ณค์ ์๋ ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ด์ ๋น์ ์ด ๊ทธ๊ฒ์ ์ธ๊ธํ๊ณ , ๊ทธ๊ฒ์ด ๋ด๊ฐ ์ค์ค๋ก ์ผ์ด์ฐ๋ ๋ถ๋ถ์ ๋๋ค.
์ด์์ ์ผ๋ก๋ ์ฌ์ฉ์์๊ฒ ๋ณ๊ฒฝ ์ ์๋ณธ ํ์ผ์ ํธ์งํ๋๋ก ์ง์ํ๊ธฐ๋ณด๋ค ์น๊ฒฉํด์ผ ํ๋ ํจํด์ ๋๋ค.
์กฐ์ฌํ์ธ์. ์์ ๋ ๊ตฌ์ฑ ์ธ์์ ๋ํด ๋ฐ์ ํ๊ฒ ๊ด๋ จ๋์ด ์์ต๋๋ค.
์ด์์ ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋ค ํจํด๋ ํ๋ณดํ์ง ์์์ผ ํฉ๋๋ค. ๊ทธ๊ฒ์ ๊ทธ๊ฒ์ ๊ธฐ๋ฅ๊ณผ ๊ทธ๊ฒ์ด ๋น์ ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๋ชฉํ๋กํ๋ ๋ฐฉ๋ฒ์ ํ๋ณดํด์ผํฉ๋๋ค.
๋ํ ๊ฐ๋ฐ์ ์ํฌํ๋ก, ์คํ, ๋น๋ ์์คํ , ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ฐ์ ํด์๋ ์ ๋ฉ๋๋ค. ํ๋ฅญํ ๋์๊ด์ ๊ฐ๋ฅํ ํ ์ง์ญ ์ฌํ์ ๋ณต์กํ ์๊ตฌ ์ฌํญ์ ์์ฉํฉ๋๋ค.
์ค๋ ์๋ก์ด ๊ฒ์ ๋ด์ผ์ด๋ฉด ์ค๋๋ ๊ฒ์ด๊ณ ํจํด์ ์๋ค๊ฐ ์ฌ๋ผ์ง๋๋ค. ์ ์ผํ ์์๋ ๊ฐ๋ฅํ ํ ๋ง์ ์ญํธํ์ฑ์ ์ ์งํ๊ธฐ ์ํด ๋ง์ ์ฌ์ฉ ์ฌ๋ก์ ๋ํ ํ๋ฅญํ ์ง์์ ์ ๊ณตํ๋ ์ํํธ์จ์ด์ ๋๋ค.
Windows 10์์ DOS ๊ฒ์์ ๊ณ์ ์คํํ ์ ์์ต๋๋ค.
์์ ๋ ๊ตฌ์ฑ ์ธ์
์ ๋ฐ ์๋. ์ด '์ธ์'์ ๋ํ ํด๊ฒฐ์ฑ ์ ์์ ์ ๊ฐ์ฅ ์ ํฉํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์์, ๊ตฌ์ฑ, ๊ธฐ๋ฅ, ํ ์คํธ ์ฃผ๋ ๋ฑ์ ์ํ ์ฅ์๊ฐ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ๋ค๋ฅธ ๊ฐ๋ฐ์๊ฐ three.js๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉ(์ฌ์ฉ, ์ฌ์ฌ์ฉ, ์์ )ํ๋์ง์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ผ๋ฏ๋ก js ๋ธ๋ผ์ฐ์ ๊ธฐ๋ฅ์ ๋ฒ์ด๋์ง ์๊ณ ๋ ์ฝ๊ฒ ์ดํดํ๊ณ ์ฌ์ฉํ ์ ์๋ ํจํด์ ํ๋ณดํ๋ ๊ฒ์ด ์ ํจํฉ๋๋ค.
ํ๋ณดํ๋ค๊ณ ํด์ ๋ค๋ฅธ ์คํ์ผ์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ์๋๋๋ค.
๊ฐ๋ฅํ ํ ๋ง์ ํ์ ํธํ์ฑ
์ ๋ฐ ์๋์ค.
๊ทธ๊ฒ์ ๊ทธ๊ฒ์ ๊ธฐ๋ฅ๊ณผ ๊ทธ๊ฒ์ด ๋น์ ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๋ชฉํ๋กํ๋ ๋ฐฉ๋ฒ์ ํ๋ณดํด์ผํฉ๋๋ค
์๋ง๋ ์ฐ๋ฆฌ๊ฐ ๋ช ํํ๊ฒํ๊ธฐ ์ํด ๋น์ ์ ์ํด ์ค์ ๋ ๋ฌธ์ /๊ธฐ๋ฅ์ ๋ฌด์์ ๋๊น?
๋ํ ๊ฐ๋ฐ์ ์ํฌํ๋ก, ์คํ, ๋น๋ ์์คํ , ์ฌ์ฉ ์ฌ๋ก๋ฅผ ๊ฐ์ ํด์๋ ์ ๋ฉ๋๋ค.
๋๋ถ๋ถ ๋์ํฉ๋๋ค. threejs ์ฌ์ฉ ์ฌ๋ก๋ ํ์ฌ ๋ธ๋ผ์ฐ์ ์ ๋๋ค. ๋ด๊ฐ ๋ค์ ๋ฐ์ ๋ฐ๋ฅด๋ฉด ์ผ๋ถ ๋ก๋๊ฐ ์ผ๋ถ ๋ ธ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฉํ๋ค๋ ๊ฒฝ๊ณ ๊ฐ ์์ต๋๋ค.
๊ทธ๋ฐ ๋ค์ ์ ์ผํ ์์๋ ๊ทธ ๊ณผ์ ์์ ๋ง์ ์ฌ์ฉ ์ฌ๋ก์ ๋ํ ํ๋ฅญํ ์ง์์ ์ ๊ณตํ๋ ์ํํธ์จ์ด์ ๋๋ค.
๋ณํ๋ ๊ณ์๋๋ค. ๊ฐ๋ฐ์๋ ์์ ์ด ์ข์ํ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ๊ณ ๋๋ก๋ ๋ค๋ฅธ ์์ ์ ์ํํฉ๋๋ค.
์ฌ๋ด์ผ๋ก:
๊ทธ๊ฒ์ ๊ทธ๊ฒ์ ๊ธฐ๋ฅ๊ณผ ๊ทธ๊ฒ์ด ๋น์ ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฒ์ ๋ชฉํ๋กํ๋ ๋ฐฉ๋ฒ์ ํ๋ณดํด์ผํฉ๋๋ค
์ด๋ ๊ฒ์ด ๋จผ์ ์์ต๋๊น? ๊ธฐ๋ฅ, ํจํด ๋๋ ๋ฌธ์ ?
ํ์คํ ํจํด์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐ ๋์์ด ๋์๊ณ ๊ธฐ๋ฅ์ด ๋์์ต๋๋ค.
...๋๋ ๋ฌธ์ ๋ฅผ ๋ง๋ ๊ธฐ๋ฅ์ด์์ผ๋ฉฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ํจํด์ ์ฐพ์์ต๋๊น?
์ด๋ ๊ฒ์ด ๋จผ์ ์์ต๋๊น? ๊ธฐ๋ฅ, ํจํด ๋๋ ๋ฌธ์ ?
์ด๋ ๊ฒ์ด ๋จผ์ ์์ต๋๊น? ์ํ์ธ๊ฐ ๋ฌ๊ฑ์ธ๊ฐ?
์ด๋ค ์ฌ๋๋ค์ ์ํ์ด ...
ํ๋ฅญํ ํ ๋ก , ๋ชจ๋ ์๊ฒฌ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
์ฌ๋ฌ๋ถ์ด ES6 ์์ ๋ชจ๋์ ํธ๋์คํ์ผํ๋ ์์ ์ ๊ฐ์ฅ ์ ํฉํ ๋ฒ๋ค๋ฌ(๋กค์ , ๋ฐ๋ฒจ, ์ํฌ, ์นํฉ ๋ฑ)์ ๋ํด ์ด๋ป๊ฒ ์๊ฐํ๋์ง ๊ถ๊ธํฉ๋๋ค. ๋๋ @gigablox ๊ฐ ์ฌ๊ธฐ์ ๊ฒฝํ์ด ์๋ค๊ณ ์ธ๊ธํ์ผ๋ฉฐ ๋ค๋ฅธ ์ฌ๋๋ค๋ ๋ง์ฐฌ๊ฐ์ง๋ผ๊ณ ํ์ ํฉ๋๋ค.
ํ์ฌ ์ ์ฅ์์๋ ์ด๋ฏธ babel, ๋กค์ ๋ฐ ๋ช ๊ฐ์ง ๊ด๋ จ ํ๋ฌ๊ทธ์ธ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์ ๋ ์ค๋ ๋ฐค์ ํดํน์ ์์ํ๊ณ ๊ณต์ ํ ๋งค์ฐ ๊ฑฐ์น ๋กค์ ๊ตฌ์ฑ ์คํฌ๋ฆฝํธ๊ฐ ์์ต๋๋ค.
// jsm-transpiler.js
export default [
{
input: './examples/jsm/controls/OrbitControls.js',
output: {
banner:"//warning this file was generated automatically",
file: './examples/js/controls/OrbitControls.js',
name:'OC',
footer:'THREE["OrbitControls"]=OC.OrbitControls',
format: 'umd'
}
}
];
์ด ๋กค์
๊ตฌ์ฑ ์คํฌ๋ฆฝํธ๋ ์ค์ ๋ก OrbitControls
๋ชจ๋์ THREE.OribitControls์ ์ ์ ํ ์์ฑ์๋ฅผ ํ ๋นํ๋ ๋น๋ชจ๋ .js
ํ์ผ ํฌํจ์ผ๋ก ๋ณํํฉ๋๋ค. ์๋ํ์ต๋๋ค. ๋ฉ์ง๋ค์ :) ! ๊ทธ๊ฒ์ ๋ํ 40k ๋ผ์ธ์ THREE.js๋ฅผ ์ถ๋ ฅ ํ์ผ์ ๋ฒ๋ค๋ก ์ ๊ณตํ์ต๋๋ค. ๋ํ OrbitControls ์์ฑ์๋ฅผ THREE๋ก ์ ์กํ๋ ๋ฐ ๋์์ด ๋๋๋ก OC๋ผ๋ ์ค๊ฐ ์ ์ญ ๋ณ์๋ฅผ ์ ์ธํ์ฌ ์ ์ญ ๋ณ์ ๊ณต๊ฐ์ ๋๋ฆฌ๊ฒ ์ค์ผ์ํค๊ณ ์์ต๋๋ค.
๋กค์ ์๋ ์ฐ๋ฆฌ์ ๋ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์๋ ์ ๋ง ๋ฉ์ง ๊ธฐ๋ฅ์ด ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ํนํ ์ฌ๋ฐ๋ฅธ ์ค์ฒฉ ๋ชจ๋์ด ํฌํจ/์ ์ธ๋๋๋ก ํ๊ธฐ ์ํ ๋งคํ ๋ฐ ๊ธฐํ ์ปจํธ๋กค์ด ์์ต๋๋ค. header/footer/intro/output ์์ฑ์ ํตํด ํธ๋์คํ์ผ๋ ํ์ด๋ก๋ ์ ํ์ ์ฝ๋๋ฅผ ์ฝ์ ํ๋ ๊ธฐ๋ฅ.
๋๋ ์์์๋ฅผ ์ด ๋กค์ ๊ตฌ์ฑ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ํ ๊ฒ์ ๋ฌ์ฑํ ์ ์๋ค๊ณ ์กฐ์ฌ์ค๋ฝ๊ฒ ๋๊ดํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ง์ ๋ฒ๋ค๋ฌ ์ฌ์ด์ ์ฐจ์ด์ ์ ์ฐ๊ตฌ/์ดํดํ๋ ์ฌ๋์ด ์ฌ๊ธฐ์ ๋ฌด๊ฒ๋ฅผ ๋ ์ ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋์ด ๋ ํ๋ฅญ ํด์ง์ ๋ฐ๋ผ ๋ชจ๋์ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์๋นํ ๊ฐ๋ ฅํ ๊ฒ์ด ํ์ํ๊ณ ์ผ๋ถ ํธ๋์คํ์ผ ์ฝ๋๋ ๋ค๋ฅธ ๊ฒ๋ณด๋ค ๋ ๋์ ๊ฒ์ ๋๋ค.
์ด์ ๋ํ ์ ์๊ฒฌ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
https://github.com/mrdoob/three.js/pull/20529
์ด๊ฒ์ ์ฝ 30์ด ๋ง์ ๋ชจ๋ JSM ๋ชจ๋์ JS ๊ธ๋ก๋ฒ ๋ค์์คํ์ด์ค ๋ชจ๋๋ก ๋ณํํ๋ poc ์ฌ์ฉ์ ์ ์ ๋น๋ ์คํฌ๋ฆฝํธ์ ๋๋ค. ์ด ๋ฐฉ๋ฒ์ผ๋ก ๊ฝค ์ฑ๊ณตํ์ต๋๋ค. ๋ ๋ง์ ํ ์คํธ๊ฐ ํ์ํ์ง๋ง hello world์์ GLTFLoader์ ๊ฐ์ ์ข ๋ ๋ณต์กํ ๋ชจ๋์ ์๋ํ์ง๋ง ๊ด์ฐฎ์์ต๋๋ค.
๋ ธ๋ จํ RegExp ๋ง๋ฒ์ฌ์ ๋์์ ๋ฐ์ ์ ์์ต๋๋ค.
Chrome์ ์ง๋ ๊ฐ์ ธ์ค๊ธฐ ๋ฐฐ์ก ์์ :
https://groups.google.com/a/chromium.org/g/blink-dev/c/rVX_dJAJ-eI
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ฅ์ ๊ณผ ๋จ์ ์ ๊ณต์ ํด์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ ๋ณด์ ์ ๊ฐํ ๊ฒฐ์ ์ ๋ด๋ฆด ์ ์๋๋ก ์ด๋ฌํ ์ ๋ณด๋ฅผ ๊ณต์ ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
์ด๊ฒ์ ๋ด๊ฐ ์ฌํด์ ๋๋ ์ฃผ๊ธฐ์ ์๋นํ ๊ฒ์ด๋ฉฐ ๋ธ๋ผ์ฐ์ ๊ณต๊ธ์ ์ฒด์ ์ฐ์ ์์์ ๋ํด ๋ฌผ์ด๋ณด๊ธฐ๊น์ง ํ๊ธฐ ๋๋ฌธ์ ๋ฏธ๋ฆฌ ๊ณํํ ์ ์์์ต๋๋ค.
ES6 ๋ชจ๋์ด ๋ฏธ๋๋ผ๋ ๋ฐ ๋์ํ์ง๋ง ๊ฐ์ ธ์ค๊ธฐ ๋งต ์์ด ๋ชจ๋์ ์ฌ์ฉํ์ฌ ๊ฐ๋ฐํ๋ฉด ํฐ ๊ณจ์นซ๊ฑฐ๋ฆฌ๋ฅผ ์ผ๊ธฐํ๊ณ ํ๋ฆ์ ์์ ํ ๊นจ๋จ๋ฆด ์ ์์ต๋๋ค.
examples/js
์ฌ์ฉ์ ์ค๋จํ๊ธฐ๋ก ๊ฒฐ์ ํ์ ๋ ์ง๋ ๊ฐ์ ธ์ค๊ธฐ๊ฐ ๋ ๋ง์ ๊ด์ฌ์ ๋๊ธฐ๋ฅผ ๊ธฐ๋ํ์ง๋ง ํ์ฌ๋ก์๋ ๋ธ๋ผ์ฐ์ ์ ์ฐ์ ์์๊ฐ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.์ด ๋๋ฌธ์ ๋ธ๋ผ์ฐ์ ๊ฐ ๊ฐ์ ธ์ค๊ธฐ ๋งต์ ๊ตฌํํ ๋๊น์ง
examples/js
ํด๋ ์ง์ ์ค๋จ์ ์ค๋จํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค. ๋๋ ์ด๋ณด์๊ฐ ์ฒซ ๋ฒ์งธ ํ๋ธ๋ฅผ ๋ ๋๋งํ๊ธฐ ์ํด ํด๋ฆฌํ์ด๋ ๋ฒ๋ค๋ฌ์ ๋ํด ๋ฐฐ์ฐ๋๋ก ๊ฐ์ํ๋ ๊ฒ์ ์ซ์ดํฉ๋๋ค.@Bug-Reaper์ ๊ฐ์ ๊ฒฐ๋ก ์ ๋๋ฌํ์ต๋๋ค. ์ค๋์
examples/jsm
ํ์ผ์์examples/js
๋ฅผ ๋น๋ํ๋ ์คํฌ๋ฆฝํธ๋ฅผ ๋ง๋๋ ๋ฐฉ๋ฒ์ ์ดํด๋ณด๊ฒ ์ต๋๋ค.