๋ธ๋ผ์ฐ์ ํ
์ด ์ํคํ
์ฒ๋ก ์ด๋ํ๋ฉด ์ฅ์ ๊ณผ ๋จ์ ์ด ์์ต๋๋ค. ๋น์ ์ ์๊ฐ์ ์ถ๊ฐํด์ฃผ์ธ์.
์ฐธ๊ณ : ์ด๊ฒ์ three.js ์๋น์๊ฐ browserify๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค.
ํ ๊ฐ์ง ์ฅ์ ์ ์ด๊ฒ์ด three.js์ ์ง์์ ์ธ ๊ฐ๋ฐ์ ์ํด ๋ชจ๋์ ์ํคํ ์ฒ๋ฅผ ์ ์ฉํ๋ค๋ ๊ฒ์ ๋๋ค.
node/browserify์ ๊ณตํต ์คํ์ผ์ ๊ฐ ํ์ผ์ด ์๋จ์ ์ข ์์ฑ์ ์ ์ธํ๊ณ ์ ์ญ ๋ณ์๋ฅผ ๋ฐํจํด์ผ๋ก ๊ฐ์ฃผํฉ๋๋ค.
๋ค์์ ์์ ์ค๋ํซ์ ๋๋ค.
// src/geometry/BoxGeometry.js
var Geometry = require('./Geometry.js');
var Vector3 = require('../core/Vector3.js');
module.exports = BoxGeometry;
function BoxGeometry() {
// ...
}
BoxGeometry.prototype = Geometry.prototype;
๋ ๋ค๋ฅธ ์ด์ ์ browserify๋ฅผ ์ฌ์ฉํ๋ three.js
์๋น์๊ฐ ์ํ๋ ๋ถ๋ถ์ ์ ํํ๊ณ ์ ํํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. Scene
, BoxGeometry
, PerspectiveCamera
๋ฐ WebGLRenderer
, ๋ชจ๋ ์ข
์์ฑ์ ์๋์ผ๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค( Object3D
๋ฑ). ์ํ๋ ๊ธฐ๋ฅ ์ธํธ๋ง ์ง์ํ๋ ์์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฒ๋ค์ ๋ณด์ ํ๊ณ ์์ต๋๋ค.
์ด๊ฒ์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ถ๊ณผํ์ง ์๋ ๋ฐฉ์์ผ๋ก ์ํ๋ ์ ์์ต๋๋ค. ์ต์์ ์์ค์์ ํ์ค ํจํค์ง์ ์ผ๋ถ๋ก ๊ฐ์ฃผ๋๋ ๋ชจ๋ ํด๋์ค๋ฅผ ๋ด๋ณด๋ ๋๋ค.
// src/three.js
var THREE = { rev: 101 }
module.exports = THREE
THREE.Geometry = require('./geometry/Geometry.js')
THREE.BoxGeometry = require('./geometry/BoxGeometry.js')
// ...
์ฐธ๊ณ : ์ด ํ์ผ์ ๊ฑฐ์ ๋ ์ ์ ์ผ๋ก require ๋ฌธ์ด๊ธฐ ๋๋ฌธ์ ์ด ์์ ์ ๋งจ ์์ ์๋ ์ข ์์ฑ์ ์ ํํ ์๊ตฌํ์ง๋ ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก ๋ชจ๋ ์์คํ
(node/browserify, AMD)์ด ์ฌ์ฉ ์ค์ธ์ง ๊ฐ์งํ๋ ๋ฒ์ฉ ๋ชจ๋ ์ ์๋ก ์ด๋ฅผ ๋ํํ๊ณ , ์ฌ์ฉ ์ค์ธ ๊ฒฝ์ฐ ๋ด๋ณด๋ด๊ฑฐ๋ ์ ์ญ ๊ฐ์ฒด( window
)์ ์ถ๊ฐํฉ๋๋ค.
๋ณต์ต ํด๋ณด์:
three.js
์๋น์๊ฐ ๊ธฐ๋ฅ์ ์ ํํ๊ณ ์ ํํ ์ ์์ต๋๋ค.์ด๋ฅผ ์ํด์๋ ๋น๋ ์์คํ ์ ๊ต์ฒดํด์ผ ํ์ง๋ง ์ ์์คํ ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
๋ค๋ฅธ ์ฅ์ :
@shi-314 ์ ๊ฐ ์ข ํผ๋์ค๋ฝ๋ค์. You can structure your code
์ You can build for production
๊ฐ ์ํคํ
์ฒ ๋ณ๊ฒฝ ์์ด ํ ์ ์๋ ์ผ์ธ๊ฐ์? three.js ์์ค ๋๋ three.js๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๋ ๊ฒ๋ค์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๊น?
three.js๊ฐ commonjs ํ๊ฒฝ์์ ์ฌ์ฉํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ instanceof
. https://github.com/mrdoob/three.js/blob/master/src/core/Geometry .js#L82
์ด๋ ์ ํ๋ฆฌ์ผ์ด์
์์ ์์ค ํธ๋ฆฌ์ ๋์ผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ค๋ฅธ ๋ฒ์ ์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ instanceof ๊ฒ์ฌ๊ฐ ๋์ผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ค๋ฅธ ๋ฒ์ ๊ฐ์ ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๋ฌํ instanceof ๊ฒ์ฌ๋ฅผ Geometry.isGeometry(geom)
์คํ์ผ ์ธํฐํ์ด์ค ๋ค์ ๊ธฐ๋ฅ ๊ฒ์ฌ๋ก ๋์ฒดํ๊ธฐ ์ํด commonjs ๋ชจ๋ ์์คํ
์ผ๋ก ์ด๋ํ๋ ๊ฒ์ ์ค๋นํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
@kumavis ์ ๋ three.js๋ก ๋น๋๋ ๊ฒ๋ค์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๋ค. ์ ฐ์ด๋ ๋ฑ์ผ๋ก ์์ ๋ง์ ๋จธํฐ๋ฆฌ์ผ์ ๋ง๋ค๊ณ ์ถ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ํ์ฌ ๋๋จธ์ง three.js ์ฝ๋์ ์ผ๊ด์ฑ์ ์ ์งํ๊ธฐ ์ํด ์ ์ญ THREE ๊ฐ์ฒด๋ฅผ ํ์ฅํด์ผ ํฉ๋๋ค.
THREE.MeshMyCoolMaterial = function (...) { ... }
ํ์ง๋ง Browserify๊ฐ ์๋ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
var MeshLambertMaterial = require('./../MeshLambertMaterial');
var MeshMyCoolMaterial = function (...) {...}
๋ฐ๋ผ์ ๋ค์์คํ์ด์ค๊ฐ ์ผ๊ด๋๊ฒ ์ ์ง๋๊ณ ์ฝ๋์์ THREE.MeshLambertMaterial
๋ฐ MeshMyCoolMaterial
๋ฅผ ์ฌ์ฉํ ํ์๊ฐ ์์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ You can build for production
๊ธฐ๋ณธ์ ์ผ๋ก ๊ทํ๊ฐ ์ธ๊ธํ allows three.js consumers using browserify to pick and choose functionality
์ ๊ฐ์ ๊ฒ์ ์๋ฏธํ์ต๋๋ค.
@shi-314 ๊ฐ์ฌํฉ๋๋ค. ๋ ๋ช ํํฉ๋๋ค. ์ด๋ ์๋น์ ์ ์ ํด๋์ค๋ฅผ ์ญ์ง๋ ฌํํ๊ธฐ ์ํด ์ ์ํ ์ผ๋ฐ ์๋ฃจ์ ์ ์ํฅ์ ๋ฏธ์นฉ๋๋ค.
// given that `data` is a hash of a serialized object
var ObjectClass = THREE[ data.type ]
new ObjectClass.fromJSON( data )
์ด๊ฒ์ ๋ด ์ ์๋ ์ง๋ ฌํ/์ญ์ง๋ ฌํ ๋ฆฌํฉํฐ์์ ๊ฐ์ ธ์จ ๊ฒ์
๋๋ค.
https://github.com/mrdoob/three.js/pull/4621
์ฑ๋ฅ์ ์ด์ ๊ฐ์ ๋ณ๊ฒฝ์ผ๋ก ์ธํด ์ํฅ์ ๋ฐ์ง ์์์ผ ํฉ๋๋ค.
์ด๊ฒ์ ๊ฝค ํฐ ๋ณํ์ด์ง๋ง ๋๋ ๋ํ ๊ทธ๊ฒ์ ์ฐฌ์ฑํฉ๋๋ค.
๊ธฐํ ์ฃผ์ ์ด์ :
standalone
์ต์
์ ์ฌ์ฉํ์ฌ UMD ๋น๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค. UMD ๋ํผ๋ฅผ ์๋์ผ๋ก ์์ ํ ํ์๊ฐ ์์ต๋๋ค.threejs-vecmath
์ ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ํธ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋ฐ๋๋ก ํน์ ๋ชจ๋์์ ํจ์น๋ ๋ง์ด๋ ๋ฆด๋ฆฌ์ค๋ฅผ ๋ง๋ค๋ฉด ํด๋น ๋ชจ๋์ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ด ์๋์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ๋ฐ์ ์ ์์ต๋๋ค.npm install threejs-shader-bloom
์์).require()
๋ง ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๊ฒฐ๊ตญ ๋ค๋ฅธ "๋น๋ ์ ํ"์ด ํ์ํ์ง ์์ต๋๋ค.@mrdoob ๋ฐ ๋ค๋ฅธ ์ ์์๊ฒ; NPM/Browserify์ ๋ํ ๊ฒฝํ์ด ๋ง์ง ์๋ค๋ฉด NPM/Browserify๋ก ๋ช ๊ฐ์ง ์์ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ณ "์ฒ ํ"์ ๋ํ ๋๋์ ์ป๋ ๊ฒ์ด ์ข์ต๋๋ค. ThreeJS ์ํคํ ์ฒ์ ๋งค์ฐ ๋ค๋ฆ ๋๋ค. ํฐ ํ๋ ์์ํฌ๋ณด๋ค๋ ์์ ๊ฒ๋ค์ ๋ง์ด ์ฅ๋ คํฉ๋๋ค.
์ด ์ ๊ทผ ๋ฐฉ์์ ๋ ๋ค๋ฅธ ์ด์ ์ ์คํ ์์ค, ํ์ฌ Three.JS ๋ชจ๋, ํนํ ์ ฐ์ด๋, ์ง์ค๋ฉํธ๋ฆฌ, ๋ชจ๋ธ ๋ก๋ ๋ฑ์ ์ํ๊ณ๊ฐ ์์ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. NPM ๋๋ Github/Component๋ฅผ ํตํด ๊ฒ์๋์ด ์ฌ๋๋ค์ด ์ฝ๊ฒ ์ฐธ์กฐํ๊ณ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ฌ ์ฌ๋๋ค์ด '์์ค ๋ณด๊ธฐ'๋ฅผ ํ ์ ์๋ ๋ฐ๋ชจ๋ฅผ ํธ์คํ ํ์ฌ ๋ฌผ๊ฑด์ ๊ณต์ ํ๊ณ ์์ต๋๋ค. Three.JS๋ ๋ ๋์ ๊ฐ์น๊ฐ ์์ต๋๋ค!
Three.JS์ ๋ํ ๋ฌธ์ ์ค ํ๋๋ ์ฝ๋๊ฐ ํ์ฌ ๋ฒ์ ์ Three.JS์ ์ผ๋ง๋ ๋นจ๋ฆฌ ํธํ๋์ง ์๋์ง์ ๋๋ค. ์ด์ ๊ฐ์ ๊ฒ์ผ๋ก ์ ํํ ๋์ ๋ ๋ค๋ฅธ ์ด์ ์ Three.JS์ _bits_ ํน์ ๋ฒ์ ์ ์ง์ ํ ์ ์๋ค๋ ์ ์ ๋๋ค. ๋งค์ฐ ๊ฐ๋ ฅํ๊ณ ํธ๋ฆฌํฉ๋๋ค.
+1
CommonJS/browserify ์ํคํ ์ฒ์ ๊ฒฝ์ฐ +1, ์ฝ์ด๋ฅผ ๋ ๊ฐ๋ณ๊ฒ ๋ง๋ค๊ณ ํ์ฌ์์ ์ ๊ณตํ ํ์ฅ ๊ธฐ๋ฅ๋ ์ ํฉํฉ๋๋ค.
three.js๋ฅผ ์์ ๋ชจ๋๋ก ์กฐ๊ฐํํ๋ ๋ฐ์๋ ๋ง์ ๋น์ฉ์ด ๋ญ๋๋ค. ํ์ฌ ์์คํ ์ ์์ฃผ ๊ฐ๋จํ ํ์ฌ ์ ๋์จ์ ํ์ฉํฉ๋๋ค(์: jetienne์ THREEx ๋ชจ๋). JS ๋ชจ๋ ์์คํ ์ด ๋น๋ ์์คํ ์ ๋๋ฌ์ผ ๋ํผ์ธ ํ ํ์ฌ ์ค์ ์ ๋จ์์ฑ์ ๋ํด ํ ๋ง์ด ๋ง์ต๋๋ค.
๋น๋ ํฌ๊ธฐ๋ฅผ ์ต์ํํ๋ ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ClojureScript๊ฐ ํ๋ ์ผ์ ๋๋ค. ๊ทธ๋ค์ Google์ Closure ์ปดํ์ผ๋ฌ๊ฐ ์ ์ฒด ํ๋ก๊ทธ๋จ ๋ถ์ ๋ฐ ๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ๋ฅผ ์ํํ ์ ์๋๋ก ๋ช ๊ฐ์ง ๊ท์น์ ๋ฐ๋ฆ ๋๋ค.
๊ฐ์ฌํ์ง ์๊ณ ์ข ์ข ๊ฐ๊ณผ๋๋ ๋จ์ํจ์ ์ฐ์ํจ +1
+1
three.js๋ฅผ ์์ ๋ชจ๋๋ก ์กฐ๊ฐํํ๋ ๋ฐ์๋ ๋ง์ ๋น์ฉ์ด ๋ญ๋๋ค. ํ์ฌ ์์คํ ์ ์์ฃผ ๊ฐ๋จํ ํ์ฌ ์ ๋์จ์ ํ์ฉํฉ๋๋ค(์: jetienne์ THREEx ๋ชจ๋).
์ฌ๊ธฐ์ ์์ด๋์ด๋ ๋
ธ๋๊ฐ ์๋ ํ๊ฒฝ์ ๋ํด UMD ๋น๋๊ฐ ๊ณ์ ์ ๊ณต๋๋ค๋ ๊ฒ์
๋๋ค. THREEx์ ๊ฐ์ ํ๋ฌ๊ทธ์ธ์ ๊ฐ๋จํ <script>
ํ๊ทธ๊ฐ ์๋ ThreeJS์ ์์กดํ๋ ํ๋ฌ๊ทธ์ธ๊ณผ ๋์ผํ ๋ฐฉ์์ผ๋ก ์๋ํฉ๋๋ค.
๊น๋ค๋ก์ด ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. CommonJS ํ๊ฒฝ์ ์๋ ๊ฒฝ์ฐ ํน์ ํ๋ฌ๊ทธ์ธ์ require()
ํ๋ ๋ฐฉ๋ฒ์ ๋ฌด์์
๋๊น? ์๋ง๋ browserify-shim์ด ๋์์ด ๋ ์ ์์ต๋๋ค.
JS ๋ชจ๋ ์์คํ ์ด ๋น๋ ์์คํ ์ ๋๋ฌ์ผ ๋ํผ์ธ ํ ํ์ฌ ์ค์ ์ ๋จ์์ฑ์ ๋ํด ํ ๋ง์ด ๋ง์ต๋๋ค.
ThreeJS์ ํ์ฌ ํ๋ฌ๊ทธ์ธ/ํ์ฅ ์์คํ
์ ์์
ํ๊ธฐ๊ฐ ๋งค์ฐ ๋์ฐํ๋ฉฐ "๋จ์"ํ๊ฑฐ๋ ์ฝ์ง ์์ต๋๋ค. ๋๋ถ๋ถ์ ThreeJS ํ๋ก์ ํธ๋ EffectComposer, FirstPersonControls, ๋ชจ๋ธ ๋ก๋ ๋๋ examples
ํด๋์ ๋ ๋ค๋๋ ๋ค๋ฅธ ๋ง์ JS ํ์ผ ์ค ํ๋์ ๊ฐ์ ํ๋ฌ๊ทธ์ธ์ด๋ ํ์ฅ ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ํ์ฌ ์ด ํ๋ฌ๊ทธ์ธ์ ์์กดํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
vendor
ํด๋์ ๋ณต์ฌํ์ฌ ๋ถ์ฌ๋ฃ์ต๋๋ค.์ด์ ๋ธ๋ผ์ฐ์ ํ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค์๊ณผ ๊ฐ์ ์์ ์ ์ํํ ์ ์๋ค๊ณ ์์ํด ๋ณด์ญ์์ค.
var FirstPersonControls = require('threejs-controls').FirstPersonControls;
//more granular, only requiring necessary files
var FirstPersonControls = require('threejs-controls/lib/FirstPersonControls');
์ด๋ฌํ ํ๋ฌ๊ทธ์ธ์ require('threejs')
๋ฐ ํ์ํ ์ ์๋ ๊ธฐํ ๋ชจ๋ ๊ฒ(์: GLSL ์ค๋ํซ ๋๋ ํ
์คํธ ์ผ๊ฐ ์ธก๋ )์
๋๋ค. ์ข
์์ฑ/๋ฒ์ ๊ด๋ฆฌ๋ ๋ชจ๋ ์ฌ์ฉ์์๊ฒ ์จ๊ฒจ์ ธ ์์ผ๋ฉฐ ์๋์ผ๋ก ์ ์ง ๊ด๋ฆฌ๋๋ grunt/gulp ์ฐ๊ฒฐ ์์
์ด ํ์ํ์ง ์์ต๋๋ค.
๊น๋ค๋ก์ด ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. CommonJS ํ๊ฒฝ์ ์๋ ๊ฒฝ์ฐ ํน์ ํ๋ฌ๊ทธ์ธ์ ์ด๋ป๊ฒ ์๊ตฌํฉ๋๊น()?
์ ๋ ์ง๊ธ THREE.js ํ๋ก์ ํธ์ CommonJS๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋ค๋ฅธ ์ฌ๋์ ์ฝ๋ ๋ฉ์ด๋ฆฌ๋ฅผ ๋ชจ๋๋ก ๋ณํํ๋ ์ฝ๊ฐ์ ์๋ ํ๋ก์ธ์ค์ด๋ฉฐ ์์ฑ์๋ ๊ธฐ์ฌ์๊ฐ ๋ณํํ์ง ์์ ๋ ๊ฑฐ์ ์ฝ๋์ ๊ฒฝ์ฐ ์ด๋ฅผ ํผํ ์ ์๋ ์ฌ์ด ๋ฐฉ๋ฒ์ด ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ค์ํ ์ ์ ์ ์ฒด 'ํ์ค' THREE ๊ฐ์ฒด๋ฅผ ๋ด๋ณด๋ด๋ ๋ชจ๋์ด ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ฉด ํ์ฅํ๋ ค๋ ๋ชจ๋ ๊ฐ์ฒด์์ ์ด ๊ฐ์ฒด๊ฐ ํ์ํ ์ ์์ต๋๋ค.
var THREE = require('three');
THREE.EffectComposer = // ... etc, remembering to include copyright notices :)
์ด๊ฒ์ ํนํ ํ๋ก์ ํธ๊ฐ ์ฑ์ฅํ๊ณ ๋ด ์์ ์ ์ ฐ์ด๋์ ์ง์ค๋ฉํธ๋ฆฌ๋ฅผ ์์ฒด ๋ชจ๋ ๋ฑ์ ์ถ๊ฐํ๊ธฐ ์์ํจ์ ๋ฐ๋ผ ๊ฝค ์ ์๋ํ์ต๋๋ค.
'threejs-full' ๋๋ 'threejs-classic' npm ํจํค์ง๊ฐ ์๋ ํ ์ด๊ฒ์ CommonJS ํ๊ฒฝ์์ ์ค๋๋ Three.js ํญ๋ชฉ์ผ๋ก ์์ ํ๋ ๊ฝค ์คํ ๊ฐ๋ฅํ ๋ฐฉ๋ฒ์ด ๋์ง๋ง ์ด๊ฒ์ด ๊ฝค ํ์ ์์ฅ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค!
+1
๋จํธํ ๋ threejs ๋ชจ๋์ npm, ํ๋ฌ๊ทธ์ธ์์ ์ฌ์ฉํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ฐ๋ฐ์๋ CommonJS ํ๊ฒฝ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๊ฒ์ ์ข์ํ ๊ฒ์
๋๋ค.
2014๋
6์ 5์ผ ์คํ 9์ 19๋ถ์ "Charlotte Gore" [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
๊น๋ค๋ก์ด ์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
CommonJS ํ๊ฒฝ์ ์์ต๋๊น?์ ๋ ์ง๊ธ THREE.js ํ๋ก์ ํธ์ CommonJS๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ์กฐ๊ธ์ด๋ค
๋ค๋ฅธ ์ฌ๋์ ์ฝ๋ ๋ฉ์ด๋ฆฌ๋ฅผ ๋ชจ๋๋ก ๋ณํํ๋ ์๋ ํ๋ก์ธ์ค
๋ ๊ฑฐ์ ์ฝ๋์์ ์ด๋ฅผ ํผํ ์ ์๋ ์ฌ์ด ๋ฐฉ๋ฒ์ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์์ฑ์๋ ๊ธฐ์ฌ์๊ฐ ๋ณํํ์ง ์์ ๊ฒ์ ๋๋ค.์ค์ํ ์ ์ ์ ์ฒด 'ํ์ค'์ ๋ด๋ณด๋ด๋ ๋ชจ๋์ด ์๋ค๋ ๊ฒ์ ๋๋ค.
ํ์ฅํ๊ณ ์ ํ๋ ๋ชจ๋ ๊ฒ์ด ์๊ตฌํ ์ ์๋ 3๊ฐ์ ๊ฐ์ฒด
๊ทธ๊ฒ.var THREE = ์๊ตฌ('3');
THREE.EffectComposer = // ... ๋ฑ, ์ ์๊ถ ํ์ ํฌํจ ๊ธฐ์ต :)์ด๊ฒ์ ํนํ ํ๋ก์ ํธ๊ฐ ์ฑ์ฅํ๊ณ ๋ด๊ฐ
๋ด ์์ ์ ์ ฐ์ด๋์ ์ง์ค๋ฉํธ๋ฆฌ๋ฅผ ์์ฒด ๋ชจ๋ ๋ฑ์ ์ถ๊ฐํ๊ธฐ ์์ํฉ๋๋ค.'threejs-full' ๋๋ 'threejs-classic' npm ํจํค์ง๊ฐ ์๋ ํ
์ด๊ฒ์ ์ค๋๋ Three.js๋ก ์์ ํ๋ ๊ฝค ์ค์ฉ์ ์ธ ๋ฐฉ๋ฒ์ด ๋ฉ๋๋ค.
CommonJS ํ๊ฒฝ์ด์ง๋ง ์ด๊ฒ์ด ๊ฝค ํ์ ์์ฅ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค!โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/mrdoob/three.js/issues/4776#issuecomment -45236911.
์๋ฅผ ๋ค์ด glslify๋ฅผ ์ฌ์ฉํ์ฌ ์ ฐ์ด๋๋ฅผ ๋ชจ๋์์ผ๋ก ๋ง๋ค ์๋ ์์ต๋๋ค. ์์ฒญ ์ ์ ฐ์ด๋๋ฅผ ์์ฑํ๋ Express ๋ฏธ๋ค์จ์ด๋ฅผ ๋ง๋๋ ๊ฒ๊ณผ ๊ฐ์ ์์ ๋ ๋ ์ฌ์์ง๋๋ค.
๋ช ๋ฌ ์ ์ ๋๋ frame.js ๋ฅผ require.js๋ก
๊ทธ๋ฌ๋ ์ด๊ฒ์ "์ปดํ์ผ"ํ๋ ๋ฐฉ๋ฒ์ ๋ฐฐ์์ผ ํฉ๋๋ค. ๋ชจ๋ ๋ชฉ๋ก์์ three.min.js
์ ์์ฑํ๊ธฐ ์ํ ๋๊ตฌ/์ํฌํ๋ก๋ ๋ฌด์์
๋๊น?
gulp -browserify ํ๋ฌ๊ทธ์ธ์ด ์๋ ๋น๋ ์์คํ ์ผ๋ก gulp.js ๋ฅผ ์ ํธํฉ๋๋ค. ์ ๋ง ์ดํดํ๊ธฐ ์ฝ๊ณ ์ฝ๋๋ ๋ด ์๊ฒฌ์ผ๋ก๋ grunt๋ณด๋ค ๋ ๊น๋ํด ๋ณด์ ๋๋ค. ์ด๊ฒ์ ํ์ธํ์ญ์์ค: http://travismaynard.com/writing/no-need-to-grunt-take-a-gulp-of-fresh-air :wink:
๋ช ๊ฐ์ง ์๊ฐ: (๋ ธ๋, npm, ๋ฌผ๋ก ๋ธ๋ผ์ฐ์ ํ์ ๋ํ ๋์ ์ ํ๋ ๊ฒฝํ์ ๊ธฐ๋ฐ์ผ๋ก ํจ)
์ฆ, ์ด ์ค๋ ๋์ ๋ํ ํ ๋ก ์ ๋ฐ๋ผ ๋ชจ๋ ์ฌ๋์ด browserify์ ๋ํด ๋์ผํ ์ดํด๋ฅผ ๊ฐ๊ณ ์๋์ง ํ์ ํ ์ ์์ต๋๋ค(browserify, commonjs, requirejs, amd, umd๋ ํ์ํ์ง ์์ ์๋ ์์ง๋ง ์ด๋ ์ ๋ ๊ด๋ จ๋์ด ์์).
์ด์ ๋ด ์๊ฐ์ ์ฌ์ฌ์ ์กฐ๊ธ ๋ฐ๋ผ๊ฐ ์ ์๋ค๋ฉด.
Browserify๊ฐ ๊ทธ๋ฆผ์ ๋ฑ์ฅํ๋ ๊ณณ์ ๋๋ค. ๊ธฐ์ ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ์์ requireJS๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ (๋น ๋ฅธ ํ์ผ ์์คํ require()์ ๋ฌ๋ฆฌ) ๋๋ฌด ๋ง์ ๋คํธ์ํฌ ํธ์ถ์ ์ํํ์ง ์๊ณ js ํ์ผ์ ํจ๊ป ๋ฌถ๊ณ ์ถ์ต๋๋ค. Browserify๋ ์ด๋ค ๋ชจ๋์ ๊ฐ์ ธ์์ผ ํ๋์ง ํ์ธํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์ต์ ํ๋ ๋น๋๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ ์ ๋ถ์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ๋ฉ์ง ์์ ์ ์ํํ๋ ๊ณณ์ ๋๋ค. (๋ฌผ๋ก , ์๋ง๋ require('bla' + variable)๋ฅผ ๊ตฌ๋ฌธ ๋ถ์ํ ์ ์๋ ์ ํ ์ฌํญ์ด ์์ต๋๋ค) node.js ์ข ์ ํญ๋ชฉ์ ๋ํ ์๋ฎฌ๋ ์ด์ ๋ ์ด์ด๊ฐ ํ์ํ ๋ถ๋ถ์ ๊ต์ฒดํ ์๋ ์์ต๋๋ค. ์, ์ด์ ๋ด ๋ธ๋ผ์ฐ์ ์ ํฌํจํ ์ ์๋ js ๋น๋๋ฅผ ์์ฑํฉ๋๋ค.
๋ค์์ browserify๊ฐ https://github.com/substack/node-browserify#usage ๋ฅผ ์ํํ ์ ์๋ ๋ช ๊ฐ์ง ์ฌํญ์ ๋๋ค.
์ง๊ธ๊น์ง๋ ๋ชจ๋ ๊ฒ์ด ํ๋ฅญํด ๋ณด์ด์ง๋ง "๊ฑด์ถ ํ์"์ผ๋ก ์ด๋ํ๋ ๊ฒ์ ๊ณ ๋ คํ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํ ๋ช ๊ฐ์ง ์ฌํญ์ด ์์ต๋๋ค.
๋ฐ๋ผ์ ์ฌ์ฉ์ ์ ์ ๋น๋์ ํจ๊ป ์ด๋ฌํ ๋ค์์ฑ๊ณผ ํธ๋ฆฌํ ๋ชจ๋ ๋ก๋ฉ(์ฃผ๋ก npm ์์ฝ์์คํ ์ ๊ธฐ๋ฐ์ผ๋ก ํจ)์ ๋ณธ๋ค๋ฉด ํจ๋ฌ๋ค์์ ๋ฐ๊พธ๊ณ ์ฝ๋๋ฅผ ๋ฆฌํฉํ ๋งํ๊ณ ํ์ฌ ๋น๋ ์์คํ ์ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
@mrdoob browserify์ ๊ด๋ จ๋ ์ผ๋ถ ๋๊ตฌ๋ https://github.com/substack/node-browserify/wiki/browserify-tools์ ๋์ด๋์ด ์์ต๋๋ค
three.min.js
์ ๊ด๋ จํ์ฌ ํ๋ก์ ํธ์์ ์ถ์๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ์ง ์์ ๊ฒ์
๋๋ค. var three = require('three')
์์ project.js
ํ๊ณ browserify project.js > bundle.js && uglifyjs bundle.js > bundle.min.js
๋ฅผ ์คํํ๊ธฐ <script src="min.js">
๋ํด ์ถ์๋ ์ฝ๋๋ฅผ ๋ฐฐ์กํ ์ ์์ต๋๋ค.
๋๋ ํ์ฌ three.js๋ฅผ ๋ค์์ผ๋ก ํฌ์ฅํ๊ณ ์์ต๋๋ค.
if ('undefined' === typeof(window))
var window = global && global.window ? global.window : this
var self = window
๊ทธ๋ฆฌ๊ณ
module.exports = THREE
๊ทธ๋ฐ ๋ค์ ํ์ฅ ํ๋ก๊ทธ๋จ์ ๋ํํฉ๋๋ค.
module.exports = function(THREE) { /* extension-code here */ }
๊ทธ๋์ ๋๋ ๊ทธ๊ฒ์ ์๊ตฌํ ์ ์์ต๋๋ค :
var three = require('./wrapped-three.js')
require('./three-extension')(three)
๋ฐ๋ผ์ ์ด๊ฒ์ ์ต์ ์ด ์๋์ง๋ง ๊ฐ์ธ์ ์ผ๋ก ์ค์ ๋ก ํจ๊ป ์ด ์ ์๊ณ ๊ทธ๋ ๊ฒ ๋์์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. @kumavis ์ ์์ด _๊ฑฐ๋ํ_ ์ด์ ์ด ๋ ์ง๋ผ๋.
ํ์ง๋ง ์ด๋ป๊ฒ ์๋ํ๋์ง ๋ณด๊ธฐ ์ํด 3๊ฐ๋ฅผ ๋ถ๊ธฐํ๊ณ ๋ชจ๋ ๊ฒ์ ๋ณ๋์ ๋ชจ๋์ ๋ฃ๋ ๊ฒ์ด ํฉ๋ฆฌ์ ์ผ ์ ์์ต๋๋ค.
๋ํ http://modules.gl/ ์ ํ์ธ
@mrdoob @shi-314 browserify๋ browserify๋ฅผ ์ง์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ธ๋๋ฆฌ์คํธ์ ์ฌ๋ผ
grunt/gulp/etc์ ๊ฐ์ ๋๊ตฌ๋ ๋์์์ด ์ ๋์ ์ด๋ฉฐ ๋ค์ํ ์๊ฒฌ์ ์ฐพ์ ์ ์์ต๋๋ค. ๊ฒฐ๊ตญ ์ด๋ค ๊ฒ์ ์ ํํ๋ , ์๋๋ฉด ๊ทธ๋ฅ ์ฌ์ฉ์ ์ ์ ์คํฌ๋ฆฝํธ๋ก ํ๋ ์๊ด์์ต๋๋ค. ๋ ์ค์ํ ์ง๋ฌธ์ ์ฌ์ฉ์๊ฐ ThreeJS๋ฅผ ์ด๋ป๊ฒ ์ฌ์ฉํ๋ฉฐ ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ผ๋ง๋ ์ ์งํ๊ธฐ๋ฅผ ์ํ๋๊ฐ์ ๋๋ค.
์ข ๋ ์๊ฐํด๋ณธ ๊ฒฐ๊ณผ, ํ๋ ์์ํฌ์ ์ํคํ ์ฒ๋ฅผ ์์ ํ ๋ฆฌํฉํ ๋งํ์ง ์๊ณ ๋ชจ๋ ๊ฒ์ ๋ชจ๋ํํ๋ ๊ฒ์ _์ ๋ง_ ์ด๋ ค์ธ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋ค์์ ๋ช ๊ฐ์ง ๋ฌธ์ ์ ๋๋ค.
../../../math/Vector2
๋ฑ์ด ์์ ๊ฒ์
๋๋ค.three-scene
๊ฐ three-lights
๋ฑ์์ ๋ถ๋ฆฌ๋ฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ ๊ฐ ํจํค์ง๋ฅผ ๊ฐ๋ณ์ ์ผ๋ก ๋ฒ์ ํํ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ข
๋ฅ์ ๋จํธํ๋ ThreeJS์ ๊ฐ์ ํฐ ํ๋ ์์ํฌ์์๋ ๋นํ์ค์ ์ด๋ฉฐ ์ ์ง ๊ด๋ฆฌํ๋ ๋ฐ ๊ณจ์น ์ํ ์ผ์
๋๋ค.require('three/src/math/Vector2')
๋์ ์ ์? ์์ผ๋ก ๋ ๊ฐ์ง ์ฌํญ์ ๊ณ ๋ คํฉ๋๋ค.
๋ชจ๋ ๊ฒ์ด ๋ชจ๋ํ๋๋ ๊ฒ์ ๋ณด๊ณ ์ถ์ง๋ง ThreeJS์ ํ์ค์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด ํ์คํ์ง ์์ต๋๋ค. ์ด์ฉ๋ฉด ๋๊ตฐ๊ฐ๊ฐ ํฌํฌ์์ ๋ช ๊ฐ์ง ์คํ์ ํ์ฌ ์ผ์ด ์ผ๋ง๋ ์คํ ๊ฐ๋ฅํ์ง ํ์ธํด์ผ ํ ์๋ ์์ต๋๋ค.
์ค๋ช ๊ฐ์ฌํฉ๋๋ค ์ฌ๋ฌ๋ถ!
๋ด๊ฐ ๋๋ ค์ํ๋ ๊ฒ์ ์ด์ ๋ง ์์ํ๋ ์ฌ๋๋ค์๊ฒ ์ผ์ ๋ณต์กํ๊ฒ ๋ง๋๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ค์๊ฒ ์ด ๋ธ๋ผ์ฐ์ ํ/๋ชจ๋ํ ๋ด์ฉ์ ๋ฐฐ์ฐ๋๋ก ๊ฐ์ํ๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋ ์ ์์ต๋๋ค...
์ฌ๊ธฐ์ @mrdoob ์ ๋์
๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ฏธ๋ฆฌ ์ปดํ์ผ๋ UMD( browserify --umd
) ๋น๋๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธฐ์กด ๊ฐ๋ฐ์์ ์ํฌํ๋ก์ ๋ณ๊ฒฝ ์ฌํญ์ด ์์ต๋๋ค.
@mrdoob ์ข ์์ฑ ๊ด๋ฆฌ ์์คํ ์ ์์ด๋์ด๋ ๋จ์ํฉ๋๋ค. ์ต์ ๋ฐ ๋น๋ ์์คํ ์ ๋ํ ์์ญ ๊ฐ์ ๊ฒ์๋ฌผ์ ์ฝ๋ ๊ฒ์ ์๋์ ์ผ ์ ์์ง๋ง ๊ถ๊ทน์ ์ผ๋ก ํ์ฌ ์์คํ ์ ์ง์ ๊ฐ๋ฅํ์ง ์์ต๋๋ค. A์ ํ์ผ์ด ๋ค๋ฅธ์ ๋ฐ๋ผ ์ธ์ ๋ ์ง ํ๋, ์ฌ๋ฅ ๋ฐ - ๊ฒ์ ์๋ก์ด ๊ฐ๋ฐ์๋ ์ฐธ์กฐ๋ฅผ ์ฐพ๊ธฐ ์ํด ์ํ ํ ์์๋ค. Browserify๋ฅผ ์ฌ์ฉํ๋ฉด ์ข ์์ฑ์ด ๋ช ์์ ์ด๋ฉฐ ํ์ผ ๊ฒฝ๋ก๊ฐ ์์ต๋๋ค.
@repsac ์ข
์์ฑ ์์คํ
์ ์ ์ญ ๋ฒ์, ๋ก๋ ์์ ์
๋ชฝ์ ํผํ๊ณ ๋ค๋ฅธ ์ธ๊ธฐ ์๋ ์ธ์ด์ ์ ์ฌํ ํจ๋ฌ๋ค์์ ๋ฐ๋ฅด๊ธฐ ๋๋ฌธ์ ๋ค๋ฅธ ์ธ์ด ์ฌ์ฉ์๊ฐ Three์ ๋ ์ฝ๊ฒ ์ก์ธ์คํ ์ ์๋๋ก ํด์ผ ํฉ๋๋ค. var foo = require('./foo');
๋ (๋์จํ๊ฒ) C#์ using foo;
๋๋ Java์ import foo;
์ ์ ์ฌํฉ๋๋ค.
๋ชจ๋ ๊ฒ์ด ๋ชจ๋ํ๋๋ ๊ฒ์ ๋ณด๊ณ ์ถ์ง๋ง ThreeJS์ ํ์ค์ ์ธ ์ ๊ทผ ๋ฐฉ์์ด ํ์คํ์ง ์์ต๋๋ค. ์ด์ฉ๋ฉด ๋๊ตฐ๊ฐ๊ฐ ํฌํฌ์์ ๋ช ๊ฐ์ง ์คํ์ ํ์ฌ ์คํ ๊ฐ๋ฅํ์ง ํ์ธํด์ผ ํ ์๋ ์์ต๋๋ค.
๋๋ ์ด๊ฒ์ด ๊ฐ ๊ธธ์ด๋ผ๊ณ ์๊ฐํ๋ค, ์ ๋ง๋ก. ์์ ์ ์๋ฃํ๊ณ ์๋ ๋ฐฉ์์ ๋ณด์ฌ์ค๋๋ค.
API๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๊ฝค
ugly: require('three/src/math/Vector2')
์คํ์ผ๋ก ์ ๋ ์ธ ๋ฌธ์์ '์์ํ๊ธฐ'๋ฅผ ์ด ์๋ก์ด ๋ชจ๋์ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ๋ณํํ์ต๋๋ค. ์ฌ๋๋ค์ด ์ฝ๋๋ฅผ ์์ ๋ชจ๋๋ก ๋๋๋ ๊ฒ์ ๋ํด ๋งค์ฐ ์๊ฒฉํ์ง ์๋ ํ ๋ง์ ์ฐธ์กฐ๊ฐ ์๋ค๊ณ ์์ํ ์ ์์ต๋๋ค.
์ด ์์ ์ ์ฃผ์ ์ด์ ์ ๊ฒฐ๊ณผ ๋น๋ ํฌ๊ธฐ๊ฐ ์ ์ฒด Three.js ํฌ๊ธฐ์ ์์ฃผ ์์ ๋ถ๋ถ์ผ ๊ฒ์ด๋ผ๋ ์ ์ ๋๋ค. ์ฌ๊ธฐ์์ ๊ตฌ์ฒด์ ์ผ๋ก ์ฐธ์กฐ๋ ํญ๋ชฉ๊ณผ ํด๋น ํญ๋ชฉ์ด ์์กดํ๋ ํญ๋ชฉ๋ง ํฌํจํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํ์ํ ๋ชจ๋ ์ข ์์ฑ์ ์ฐธ์กฐํ๊ณ ๋ชจ๋ ๊ฐ๋ณ์ ์ผ๋ก ์ค์นํ๋ ๊ฒ์ ์ค์ ๋ก๋ ๋๋ฌด ๋์ฐํ ์ ์์ต๋๋ค.
๋ชจ๋ฐ์ผ ์ฅ์น๋ฅผ ๋ช ์์ ์ผ๋ก ๋์์ผ๋ก ํ๋ ๊ฒฝ์ฐ ์ด ๋งค์ฐ ์ธ๋ถํ๋ ์ ๊ทผ ๋ฐฉ์์ด ์๋ฒฝํ ์ ์์ง๋ง ์ค์ ๋ก๋ ์ ์์ ์ผ๋ก ์๋ํ๋ ์ ์ฒด 3๊ฐ์ API๋ฅผ ๋ด๋ณด๋ด๋ ํจํค์ง์ ๋ชจ๋ ๋ณด๋์ค ์ง์ค๋ฉํธ๋ฆฌ๋ฅผ ์บก์ํํ๋ ๋ ์์ ํจํค์ง๊ฐ ํ์ํฉ๋๋ค. ๋ ๋๋ฌ, ๋ชจ๋ ์ํ, ๋ชจ๋ ์ฌ๋ฃ ๋ฑ, ๊ฐ๋ฐ์๊ฐ ์ค์ค๋ก ๊ฒฐ์ ํ ์ ์๋๋ก ๊ฐ๋ณ ๋ชจ๋ ์์ค์ผ๋ก ๋ด๋ ค๊ฐ๋๋ค.
์, ์น ์ฝ๋ฉ์ ๊ณ ํต์ค๋ฝ์ต๋๋ค.
์ด์จ๋ ์คํ์ ๊ณ์...
์ฐ๋ฆฌ์ ์์กด์ฑ์ ์ค์นํ์ญ์์ค..
npm install three-scene three-perspective-camera three-webgl-renderer three-cube-geometry three-mesh-basic-material three-mesh three-raf
์ฐ๋ฆฌ์ ์ฝ๋๋ฅผ ์์ฑ...
// import our dependencies..
var Scene = require('three-scene'),
Camera = require('three-perspective-camera'),
Renderer = require('three-webgl-renderer'),
CubeGeometry = require('three-cube-geometry'),
MeshBasicMaterial = require('three-mesh-basic-material'),
Mesh = require('three-mesh'),
requestAnimationFrame = require('three-raf');
// set up our scene...
var scene = new Scene();
var camera = new Camera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
var renderer = new Renderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
// create the cube...
var geometry = new CubeGeometry(1, 1, 1);
var material = new MeshBasicMaterial({color: 0x00ff00});
var cube = new Mesh(geometry, material);
scene.add(cube);
// position the camera...
camera.position.z = 5;
// animate the cube..
var render = function () {
requestAnimationFrame(render);
cube.rotation.x += 0.1;
cube.rotation.y += 0.1;
renderer.render(scene, camera);
};
// begin!
render();
๊ทธ๋ฐ ๋ค์ ํ์ผ์ ๋น๋ํ์ญ์์ค.
browserify entry.js -o scripts/hello-world.js
๊ทธ๋ฐ ๋ค์ ์ฐ๋ฆฌ ํ์ด์ง์ ํฌํจํ์ญ์์ค
<script src="/scripts/hello-world.js" type="text/javascript"></script>
ํ์ํ ๋ชจ๋ ์ข ์์ฑ์ ์ฐธ์กฐํ๊ณ ๋ชจ๋ ๊ฐ๋ณ์ ์ผ๋ก ์ค์นํ๋ ๊ฒ์ ์ค์ ๋ก๋ ๋๋ฌด ๋์ฐํ ์ ์์ต๋๋ค.
Three๊ฐ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ด๋ฆฌํ๊ธฐ ์ํด browserify๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ์ต์ข
์ฌ์ฉ์๊ฐ ๋ฐ๋์ ํ๋ก์ ํธ์์ browserify๋ฅผ ์ฌ์ฉํ ํ์๋ ์์ต๋๋ค. 3๊ฐ๋ ์ง๊ธ๊ณผ ๊ฐ์ด ๊ธ๋ก๋ฒ THREE
๋ก ๋
ธ์ถ๋ ์ ์์ต๋๋ค...๋น๋ ํ์ผ์ ํฌํจํ๊ณ ํจ๊ป ์คํํ์ญ์์ค.
@repsac @mrdoob ๋ณ๊ฒฝ ์ฌํญ์ ์ด์ ๋ฒ์ ๊ณผ ํธํ๋๋ฏ๋ก ํ์ฌ ์ฌ์ฉ์๊ฐ ์ํ์ง ์๋ ๊ฒฝ์ฐ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ฌํ ์ ์์ ThreeJS์ ํ์ฅ๋๊ณ ๋ชจ๋๋ฆฌ์ ์ฝ๋๋ฒ ์ด์ค์ ์ฅ๊ธฐ์ ์ธ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅ์ฑ๊ณผ ์๋ช ์ ๊ฐ์ ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ์ข ์์ฑ ๋ฐ ๋ฒ์ ๊ด๋ฆฌ์ ๊ฐ์ ๊ฒ์ ์ด์ฌ์์๊ฒ๋ ๊ณจ์นซ๊ฑฐ๋ฆฌ์ฒ๋ผ ๋ค๋ฆด ์ ์์ง๋ง ThreeJS๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋๊ตฌ, ํ๋ ์์ํฌ, ํ๋ฌ๊ทธ์ธ ๋ฐ ๋๊ท๋ชจ ์น ์ฌ์ดํธ๋ฅผ ๊ฐ๋ฐํ๋ ์ฌ๋๋ค์๊ฒ๋ ํ๋ฅญํฉ๋๋ค.
์ฆ, ์ต์ข
์ฌ์ฉ์ ์ฝ๋๋ ์ฌ์ ํ ๋์ผํ๊ฒ ๋ณด์ผ ์ ์์ผ๋ฉฐ examples
๋ ์ ํ ๋ณ๊ฒฝํ ํ์๊ฐ ์์ต๋๋ค.
<script src="three.min.js"></script>
<script>
var renderer = new THREE.WebGLRenderer();
</script>
๋ชจ๋์ ๋น๋๋ฅผ ์ฐพ๊ณ ์๋ ๋ ์ผ์ฌ์ฐฌ ๊ฐ๋ฐ์, _๋๋_ ThreeJS ์์ ์ฅ๊ธฐ ์๋ฃจ์
์ ๊ฐ๋ฐํ๋ ค๋ ๊ฐ๋ฐ์(์ฆ, ๋ฒ์ /์ข
์์ฑ ๊ด๋ฆฌ ํ์ฉ)์ ๊ฒฝ์ฐ ๋ค์๊ณผ ๊ฐ์ด ๋ณด์ผ ์ ์์ต๋๋ค.
npm install three-vecmath --save
๊ทธ๋ฐ ๋ค์ ์ฝ๋์์:
var Vector2 = require('three-vecmath').Vector2;
//.. do something with Vector2
๋ํ, ์ด๋ฅผ ํตํด ์ฌ๋๋ค์ ThreeJS์ ๋ฒ์ ๋ฐ์์ ThreeJS์ ๋ฒกํฐ ์ํ, ์์ ๋ณํ, ์ผ๊ฐ ์ธก๋ ๋ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋๋ require() ์๋ง์ด ๋์ ์๊ฐ์ด๊ณ ๋์ ์ ์ถฉ์์ด๋ผ๊ณ ์๊ฐํ์ง๋ง, ์ฌ์ฉ์์๊ฒ ๋ ๊ฐ์ง ๋ค๋ฅธ ์ข ๋ฅ์ three.js ์ฝ๋๋ฅผ ๋ ธ์ถ์ํค๋ ๊ฒ์ ๋ ๋์ ์๊ฐ์ผ ๊ฒ์ ๋๋ค. ์ฌ์ฉ์์๊ฒ ํ๋๋ ๋ฉ์ง ๋ชจ๋ ์์คํ ํ๋ฏธ์ด๊ณ ๋ค๋ฅธ ํ๋๋ ๋ ๋จ์ํ(๊ทธ๋ฌ๋ 2๊ธ) ๋ชจ๋ ์์คํ ํ๋ฏธ.
@erno three.js
๋ ๋ด๋ถ์ ์ผ๋ก ๋ชจ๋ ๊ตฌ์กฐ๋ก ๊ตฌ์ฑ๋์ง๋ง ํ์ฌ ์ค์ ๊ณผ ๋ค๋ฅด์ง ์์ ๋น๋ ํ์ผ์ ์์ฑํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
์ฃผ์ ์ด์ ์ three.js
๊ฐ๋ฐ ๋ฐ ์ ์ง ๊ด๋ฆฌ ๊ฒฝํ์ ๊ฐ์ ํ๋ ๊ฒ์
๋๋ค.
@kumavis - ์๋์ @erno ๋ ์ค์ ๋ก ๊ทธ๊ฒ์ ๋์น์ง ์์์ง๋ง three.js
๊ฐ ์๊ตฌ๋ฅผ ํตํด ์ฌ์ฉ๋๋ ๊ฒฝ์ฐ๋ ์๊ณ ์ฌ์ฉํ์ง ์๋ ๊ฒฝ์ฐ ํผ๋๋ ์ ์๋ค๋ ์ ์ ์ดํดํ์ต๋๋ค(*). ์๋ฅผ ๋ค์ด ๋๊ตฐ๊ฐ๋ ์ธ ๊ฐ์ง ์์ค๋ฅผ ๋ชจ๋ ์ดํด๋ณธ ๋ค์ ์ผ๋ถ ํ์ฌ ์์ ๋ฅผ ๋ณด๊ณ ๋ชจ๋ ๊ฒ์ด ์ด๋ป๊ฒ ์๋ํ๋์ง ์ฐจ์ด์ ์ ๋ฐ๊ฒฌํฉ๋๋ค.
(*) ์ฐ๋ฆฌ๋ ์ค๋ ์ผ์ฐ irc์์ ์ด์ ๋ํด ์ด์ผ๊ธฐํ์ต๋๋ค.
๋๋ ๊ทธ๊ฒ์ด ์ผ์ข ์ ์ ํจํ ์์ ์ด๋ผ๊ณ ์๊ฐํ์ง๋ง ๊ทธ๊ฒ์ด ๊ฒฐ๊ตญ ์ด๋ป๊ฒ ์๋ํ๋์ง ํ์คํ์ง ์์ต๋๋ค. ์ค์ ๋ก ๋ชจ๋ ๋ฐ ๋น๋ ์ฌ์ฉ์ ๋ฌธ์ ๊ฐ ์๋์ง ์ฌ๋ถ์ ๋๋ค. ๊ทธ๋ฌ๋ ํ์คํ ์๊ฐํด๋ณผ ๊ฐ์น๊ฐ ์๋ ๊ฒ ๊ฐ๊ณ ์ ๋ฐ์ ์ธ ๋ฌธ์ ๊ฐ ์ฌ๊ธฐ์์ ์ ์คํ๊ฒ ๊ณ ๋ ค๋์๋ค๋ ๊ฒ์ด ์ ๋ฐ์ ์ผ๋ก ๋์๊ฒ ์ข์ ๊ฒ์ฒ๋ผ ๋ณด์์ต๋๋ค. ์ง๊ธ๊น์ง ์ ๋ถ๋ถ์์ ์ ๋ณด์ ๊ฒฌํด์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค.
@anton ์๊ฒ ์ต๋๋ค . ์ฌ๋๋ค์ ์ฌ๊ธฐ์์ ๋ค์ํ ์ ๊ทผ ๋ฐฉ์์ ์ ์ํ์ต๋๋ค. ์ ๋ ์ฃผ๋ก ์ต์์ ์ฌ์ฉ์ ๋ํ ๋ฌธ์๋ฅผ ์ ๊ณตํ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ์ง๋ง( THREE
๋ชจ๋ ๊ฒ์ ์ ๊ฑฐ), ๋ค๋ฅธ ์ฌ๋๋ค์ ์ด๋ฅผ ๋ฐ๋ฅด์ง ์๋ ์์ ๋ฅผ ๋ง๋ค ์ ์์ผ๋ฉฐ ์ฝ๊ฐ์ ํผ๋์ ์ผ๊ธฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๊ฒ์ ์ ํจํ ์ฐ๋ ค์
๋๋ค.
์ธ์ด๊ฐ ์ข ํท๊ฐ๋ ธ๋ ๊ฒ ๊ฐ์์.
๋ค๋ฅธ ํ๋๋ ๋ ๋จ์ํ(๊ทธ๋ฌ๋ 2๊ธ) ๋ชจ๋ ์์คํ ์ ๋๋ค.
์ด๊ฒ์ ๋จ์ง ๋น๋ ํ์ผ์ ์ฐธ์กฐํ๋ ๊ฒ์ ๋๋ค. ๋ค?
์ ์ดํด๋ก๋ ๊ทธ๋ ์ต๋๋ค. ๋ค๋ฅธ ๊ฒ์ ์์ํ ์ ์์ง๋ง ๋ญ๊ฐ๋ฅผ ๋์น ์ ์์ต๋๋ค.
antont, kumavis: ์ฌ๊ธฐ ์ ์์ require() ์คํ์ผ ์ฝ๋๋ฅผ ์ต์ข ์ฌ์ฉ์์๊ฒ๋ ๋ ธ์ถํ๋ ๊ฒ์ ๋ํด ์ด์ผ๊ธฐํ์ต๋๋ค. mattdesl์ ๊ฐ์ฅ ์ต๊ทผ ๋๊ธ์ ๋๋ค.
"๋ชจ๋์ ๋น๋๋ฅผ ์ฐพ๊ณ ์๋ ๋ ์ผ์ฌ์ฐฌ ๊ฐ๋ฐ์ ๋๋ ThreeJS ์์ ์ฅ๊ธฐ์ ์ธ ์๋ฃจ์ ์ ๊ฐ๋ฐํ๋ ค๋ ๊ฐ๋ฐ์(์: ๋ฒ์ /์ข ์์ฑ ๊ด๋ฆฌ ํ์ฉ) [...]"
๋ ์ต์ ํ๋ ๋น๋๋ฅผ ๊ฐ๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ค์ ๋ก ์ข ์์ฑ์ ์๋์ผ๋ก ํ์ ํ๊ณ ํ์ํ ๋ชจ๋์ ๋ง๋๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
์ง๊ธ์ bower & browserify๊ฐ require๋ฅผ ์ฌ์ฉํ์ง๋ง ์ด๊ฒ์ด ์ ์ผํ ์๋ฃจ์ ์ ์๋๋๋ค. ๋๋ ๊ทธ๊ฒ์ ์ํํ๋ ๋ค๋ฅธ ๊ธฐ์ฑ ์คํ ์์ค ํ๋ก์ ํธ๊ฐ ์๋์ง ๋ชจ๋ฅด์ง๋ง (ng-dependencies์ ๊ฐ์) ๊ทธ๋ฌํ ๋๊ตฌ๋ฅผ ์์ฑํ ์ ์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ๊ณ ํต์ ํด๊ฒฐํ๋ ๋ค๋ฅธ ์ ๊ทผ ๋ฐฉ์์ด ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
Google์ ํด๋ก์ ์ปดํ์ผ๋ฌ๊ฐ ๊ทธ๋ฌํ ๋๊ตฌ๊ฐ ๋ ์ ์์ต๋๊น?
์ฌ์ฉ์ ์ธก์์ ์ด๊ฒ์ด ๋์์ด ๋ ๊น์?
http://marcinwieprzkowicz.github.io/three.js-builder/
๊ฝค ํฅ๋ฏธ ๋กญ๋ค์ @erichlof :) @marcinwieprzkowicz ๊ฐ ์ด๊ฒ์ ์์ผ๋ก ์์ฑํ๋์ง ๊ถ๊ธํฉ๋๋ค... https://github.com/marcinwieprzkowicz/three.js-builder/blob/gh-pages/threejs-src/r66/modules.json
three.js๊ฐ commonjs ํ๊ฒฝ์์ ์ฌ์ฉํ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ instanceof๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. https://github.com/mrdoob/three.js/blob/master/src/core/Geometry.js#L82
์ด๋ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์์ค ํธ๋ฆฌ์ ๋์ผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ค๋ฅธ ๋ฒ์ ์ด ์๋ ๊ฒฝ์ฐ๊ฐ ๋ง๊ธฐ ๋๋ฌธ์ instanceof ๊ฒ์ฌ๊ฐ ๋์ผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ค๋ฅธ ๋ฒ์ ๊ฐ์ ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํด๋น instanceof ๊ฒ์ฌ๋ฅผ Geometry.isGeometry(geom) ์คํ์ผ ์ธํฐํ์ด์ค ๋ค์ ๊ธฐ๋ฅ ๊ฒ์ฌ๋ก ๋์ฒดํ๊ธฐ ์ํด commonjs ๋ชจ๋ ์์คํ ์ผ๋ก ์ด๋ํ๋ ๊ฒ์ ์ค๋นํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
git/three.js/src์์:
grep -r instanceof . | wc -l
164
git/three.js/examples:
grep -r instanceof . | wc -l
216
๋ฐ๋ผ์ three.js์๋ ์ด 380๊ฐ์ instanceof
์ด ์์ต๋๋ค. ๋์์ผ๋ก ๊ฐ์ฅ ์ข์ ๊ตฌํ์ ๋ฌด์์
๋๊น?
๋๋ ์ต๊ทผ์ ๊ทธ ๋๋ถ๋ถ์ ๋์ฒดํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ type
์์ฑ์ ์ถ๊ฐํ์ต๋๋ค.
๋๋ ์ต๊ทผ์ ๊ทธ ๋๋ถ๋ถ์ ๋์ฒดํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ์ ํ ์์ฑ์ ์ถ๊ฐํ์ต๋๋ค.
๋ฉ์ง! PR์ ์ค๋นํฉ๋๋ค.
๋ค๋ฅธ ์ธ๊ธฐ ์๋ ๋๊ท๋ชจ JS ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ด๊ฒ์ด ์ด๋ป๊ฒ ์ฒ๋ฆฌ๋๋์ง์ ๋ํ ์๋ https://github.com/facebook/react๋ฅผ ์ดํด๋ณด์ญ์์ค. ์ฝ๋๋ฒ ์ด์ค๋ (browserify๊ฐ ๊ตฌํํ๋) ๋ ธ๋ ์คํ์ผ ๊ธฐ๋ฐ ๋ชจ๋ ์์คํ ์ ์ฌ์ฉํ์ฌ ๊ตฌ์ฑ๋์ง๋ง grunt๋ฅผ ์ฌ์ฉํ์ฌ ๋ฆด๋ฆฌ์ค๋ฅผ ์ํด ๊ตฌ์ถ๋์์ต๋๋ค. ์ด ์๋ฃจ์ ์ 3๊ฐ์ง ์ฌ์ฉ ์ฌ๋ก์ ๋ํด ์ ์ฐํฉ๋๋ค.
require
ํน์ ์ข
์์ฑ๋ง ์ ์ธํ ์ ์์ต๋๋ค. ์ ์ ํ ์ข
์์ฑ ๊ด๋ฆฌ์ ์ด์ ์ ์ ๋ฌธ์ํ๋์ด ์์ต๋๋ค.์กฐ์ฌ๋ฅผ ์ข ํด๋ณด๋...
์ด์ ์ ๋ Three.js ์์ค ์ฝ๋๋ฅผ CommonJS require()
๋ฌธ์ ์ฌ์ฉํ์ฌ ํ์ผ ๊ฐ์ ์ข
์์ฑ์ ์ ์ธํ๋๋ก ๋ณํ ํ๋ (๋ค์ ์ด๋ฆฌ์์) ์คํฌ๋ฆฝํธ ๋ฅผ ํจ๊ป ํดํนํ์ต๋๋ค. ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง ๋ณด๊ธฐ ์ํด... ์ด๊ฒ์:
var THREE = require('../Three.js');
require('../math/Color.js');
require('../math/Frustum.js');
require('../math/Matrix4.js');
require('../math/Vector3.js');
require('./webgl/WebGLExtensions.js');
require('./webgl/plugins/ShadowMapPlugin.js');
require('./webgl/plugins/SpritePlugin.js');
require('./webgl/plugins/LensFlarePlugin.js');
require('../core/BufferGeometry.js');
require('./WebGLRenderTargetCube.js');
require('../materials/MeshFaceMaterial.js');
require('../objects/Mesh.js');
require('../objects/PointCloud.js');
require('../objects/Line.js');
require('../cameras/Camera.js');
require('../objects/SkinnedMesh.js');
require('../scenes/Scene.js');
require('../objects/Group.js');
require('../lights/Light.js');
require('../objects/Sprite.js');
require('../objects/LensFlare.js');
require('../math/Matrix3.js');
require('../core/Geometry.js');
require('../extras/objects/ImmediateRenderObject.js');
require('../materials/MeshDepthMaterial.js');
require('../materials/MeshNormalMaterial.js');
require('../materials/MeshBasicMaterial.js');
require('../materials/MeshLambertMaterial.js');
require('../materials/MeshPhongMaterial.js');
require('../materials/LineBasicMaterial.js');
require('../materials/LineDashedMaterial.js');
require('../materials/PointCloudMaterial.js');
require('./shaders/ShaderLib.js');
require('./shaders/UniformsUtils.js');
require('../scenes/FogExp2.js');
require('./webgl/WebGLProgram.js');
require('../materials/ShaderMaterial.js');
require('../scenes/Fog.js');
require('../lights/SpotLight.js');
require('../lights/DirectionalLight.js');
require('../textures/CubeTexture.js');
require('../lights/AmbientLight.js');
require('../lights/PointLight.js');
require('../lights/HemisphereLight.js');
require('../math/Math.js');
require('../textures/DataTexture.js');
require('../textures/CompressedTexture.js');
WebGLRenderer(๋ฐ ๊ธฐํ)๋ฅผ ์ฌ๋ฌ ๋ชจ๋(atm ํ์ผ ๊ธธ์ด๊ฐ 6000์ค ์ด์)๋ก ๋ถํ ํ๋ ๋ฑ ๋ช ๊ฐ์ง ์ฃผ์ ๋ฆฌํฉํ ๋ง์ด ํ์ํฉ๋๋ค.
THREE.ShaderChunk
๋ก ์ปดํ์ผ๋ ๋ค์ ๋ฐํ์์ THREE.ShaderLib
๋ก ์ปดํ์ผ๋ฉ๋๋ค( THREE.ShaderChunk
์ ๋ฐฐ์ด์ ๊ฒฐํฉ). ๋์ผํ ์์
์ ์ํํ๋ ๋ธ๋ผ์ฐ์ ํ ๋ณํ์ด ํ์ํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค.React.js๋ commoner ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ ๊ฒฝ๋ก๋ก ์ฐธ์กฐํ ํ์ ์์ด ๋ชจ๋์ ์กฐํํฉ๋๋ค. ์ด์ฉ๋ฉด ์ฐ๋ฆฌ๋ ๋์ผํ ์์
์ ์ํํ๊ณ require
GLSL ํ์ผ์ JS ๊ตฌ๋ฌธ์ผ๋ก ๋ณํํ ์ ์๋ ์ฌ์ฉ์ ์ ์ ๊ท์น์ ์ ์ํ ์๋ ์์ต๋๋ค.
@rasteiner https://github.com/stackgl/glslify ์ ๋ํด ์๊ฒ ๋์ด ๋งค์ฐ ๊ธฐ์ ์ ์์ต๋๋ค. ์ด๋ ์ฑ์ฅํ๋ http://stack.gl ์ ํ๊ตฐ์์ ๋น๋กฏ๋ฉ๋๋ค.
๋๋ ์ง๋ ๋ช ๋ฌ ๋์ ๋ชจ๋๊ณผ "unixy" ์ ๊ทผ ๋ฐฉ์์ ๋ํ ์๋นํ ๊ฒฝํ์ด ์์๊ณ ์ง๊ธ์ ๋๋ฌด ๋ฆ์๋ค๊ณ ์๊ฐํ๊ณ ๋ชจ๋ํ ๋๋ npm ๋ชจ๋์ ์ํด threejs๋ฅผ ๋ฆฌํฉํ ๋งํ๋ ๊ฒ์ ๋นํ์ค์ ์ธ ๋ชฉํ๊ฐ ๋ ๊ฒ์ ๋๋ค.
๋ค์์ ๋ชจ๋์ฑ/์ฌ์ฌ์ฉ์ฑ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํ์ฌ ํ๊ณ ์๋ ์ผ์ ๋๋ค.
๋ด ์ ํ๋ก์ ํธ๋ ์์ํ๊ณ ์คํํ๊ธฐ ์ํด npm์์ "3"์ ์ฌ์ฉํ๋ ๊ฒฝํฅ์ด ์์ต๋๋ค. ThreeJS๊ฐ ๋ฆด๋ฆฌ์ค ๋ฒํธ์ ์ผ์นํ๋ ๋ฒ์ ํ๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ ๊ณต์์ ์ผ๋ก npm์ ๋น๋๋ฅผ ๊ฒ์ํ๋ฉด ์ ๋ง ๋ฉ์ง ๊ฒ์ ๋๋ค.
์ถ์ : ์ฌ์ฌ์ฉ ๊ฐ๋ฅ/๋ชจ๋์ ์
ฐ์ด๋๋ฅผ ์ํฌํ๋ก์ ๊ฐ์ ธ์ค๋ ๋ฐ ๊ด์ฌ์ด ์๋ ์ฌ์ฉ์์๊ฒ:
https://gist.github.com/mattdesl/b04c90306ee0d2a412ab
๋ด iPhone์์ ๋ณด๋ธ
2014๋ 11์ 20์ผ ์ค์ 7์ 42๋ถ์ aaron [email protected]์์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@rasteiner https://github.com/stackgl/glslify ์ ๋ํด ์๊ฒ ๋์ด ๋งค์ฐ ๊ธฐ์ ์ ์์ต๋๋ค. ์ด๋ ์ฑ์ฅํ๋ http://stack.gl ์ ํ๊ตฐ์์ ๋น๋กฏ๋ฉ๋๋ค.
โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
Browserify์ ํจ๊ป Three.js๋ฅผ ์ฌ์ฉ ํ๋ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์๋ ๋ค๋ฅธ ์ฌ๋๋ค์๊ฒ ๋์์ด ๋๊ณ ์ด ์ค๋ ๋๋ฅผ ์ฐ์ฐํ ๋ฐ๊ฒฌํ ๊ฒฝ์ฐ, ์ ๊ฐ ์ง์ ์ค์ ํ ๋ฐฉ๋ฒ์ browserify-shim ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
_"๋น์ ์ ๋๋๋ก a) ์ ์ญ ๋ณ์๋ฅผ ์ ์ญ์ผ๋ก ๋ ธ์ถ"_์ ๋ํ README ์น์ ์ ๋ฐ๋ผ Three.js์ ๋ํ ๋ณ๋์ ์คํฌ๋ฆฝํธ ํ๊ทธ๋ฅผ ํฌํจํ๊ณ ์ ์ญ THREE ๋ณ์๋ฅผ ๋ ธ์ถํ๋๋ก ๊ตฌ์ฑํ์ต๋๋ค.
๊ทธ๋ฆฌ๊ณ ๋์ ์ ๊ฐ ์ค์ค๋ก ํด๊ฒฐํด์ผ ํ๋ ๋ถ๋ถ์ ColladaLoader, OrbitControls ๋ฑ๊ณผ ๊ฐ์ ์ถ๊ฐ ๊ธฐ๋ฅ์ ํฌํจํ๋ ๋ฐฉ๋ฒ์ด์์ต๋๋ค. ์ ๋ ๋ค์๊ณผ ๊ฐ์ด ํ์ต๋๋ค.
package.json์์:
"browser": {
"three": "bower_components/threejs/build/three.js"
},
"browserify-shim": "browserify-shim-config.js",
"browserify": {
"transform": [ "browserify-shim" ]
}
Browserify-shim-config.js:
module.exports = {
"three": { exports: "global:THREE" },
"./vendor/threejs-extras/ColladaLoader.js": { depends: {"three": null}, exports: "global:THREE.ColladaLoader" },
"./vendor/threejs-extras/OrbitControls.js": { depends: {"three": null}, exports: "global:THREE.OrbitControls" }
};
๊ทธ๋ฐ ๋ค์ ๋ด ์์ ์ ์คํฌ๋ฆฝํธ์ธ main.js์์ ๋ค์์ ์ํํฉ๋๋ค.
require('../vendor/threejs-extras/ColladaLoader.js');
require('../vendor/threejs-extras/OrbitControls.js');
var loader = new THREE.ColladaLoader(),
controls = new THREE.OrbitControls(camera);
...
Browserify๋ ๋ฐ์ดํธ์์๋ ์์ ํ ๋ ์ ์ฒด ์คํฌ๋ฆฝํธ๋ฅผ ๋ค์ ์์ฑํด์ผ ํฉ๋๋ค. ํ ๋ฒ browserify๋ฅผ ์ฌ์ฉํ์ฌ THREE.js๊ฐ ํ์ํ ํ๋ก์ ํธ๋ฅผ ํจํนํ ๋ค์ ๊ฒฝ๊ณ๋ฅผ ๊ตฌ์ถํ๋ ๋ฐ 2์ด ์ด์์ด ๊ฑธ๋ฆฌ๊ณ ๋ณ๊ฒฝํ ๋๋ง๋ค livereload๋ฅผ ์ฐจ๋จํฉ๋๋ค. ๋๋ฌด ๋ต๋ตํฉ๋๋ค.
livereload ๋ก ๊ฐ๋ฐํ๋ ๋์ ์ผ๋ฐ์ ์ผ๋ก
watchify๋ ๋๋ฅผ ์ํด ์๋ํ์ง ์์ต๋๋ค. ํ์ผ์ ๋ณ๊ฒฝํ๊ณ ์ ์ฅํ ๋ watchify ๋ฐ beefy์ livereload๋ ์ด์ /์บ์๋ ๋ฒ์ ์ ์ ๊ณตํฉ๋๋ค. ์ ์ด๋ฐ ์ผ์ด ๋ฐ์ํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๊ณ ๋ง๊ฒ๋ browserify๋ ์ด๋ฏธ ๊ฝค ์ ์๋ํฉ๋๋ค.
@ChiChou --noparse=three
๋ก ๋ธ๋ผ์ฐ์ ํํฉ๋๋ค. ์ด๊ฒ์ ๋ด ์ปดํจํฐ์์ browserify ๋ฒ๋ค ๋จ๊ณ๋ฅผ 1000ms์์ 500ms๋ก ๋ฎ์ถ๋๋ฐ, ์ด๋ ์ฆ๊ฐ์ ์ธ ํผ๋๋ฐฑ ๋๋์ ์ฃผ๊ธฐ์ ์ถฉ๋ถํฉ๋๋ค.
@rasteiner three.js ์ํธ ์์กด์ฑ์ ๋ํ ๋น๊ณต์ ์ฐ๊ตฌ์ ๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๊ทธ ๋ฐฉ๋ํ deps ๋ชฉ๋ก์ ๋ณด๊ธฐ ํํ ์ฝ๋์ด์ง๋ง ์ค์ ๋ก ๊ทธ ์ถํจ์ ์๋ ๊ทธ๋๋ก ์กด์ฌํ๋ฉฐ ๋ณด์ด์ง ์์ต๋๋ค. Browserify์ ๊ฐ์ ์ ๋๋ฌ์ด ์ธํ๋ฌผ์ ํ๊ธฐ์ํค๊ณ ๋ ์ํจ ์์คํ ์ ์ถ๊ตฌํด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
Three.js์๋ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์์ ์ ํ์ ์ธ์ํ๊ณ ํด๋น ์ ํ์ ๋ฐ๋ผ ๋ค๋ฅธ ์์ ์ ์ํํ๋ ๊ณณ์ด ๋ง์ด ์์ต๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ํด๋น ์ ํ ์ข ์ ์ฝ๋๋ ์ ํ ์์ฒด๋ก ์ด๋ํ ์ ์์ผ๋ฉฐ ์์ ์ค์ธ ๋ชจ๋ ๊ฐ๋ฅํ ์ ํ์ ์ดํดํ ํ์๊ฐ ์์ต๋๋ค.
๋ค์์ WebGLRenderer ์ ์์ฝ๋ ์์ ๋๋ค.
if ( texture instanceof THREE.DataTexture ) {
// ...
} else if ( texture instanceof THREE.CompressedTexture ) {
// ...
} else { // regular Texture (image, video, canvas)
// ...
}
๋ ๋ง์ ํ์์ด์ด์ผํฉ๋๋ค
texture.processTexImage( _gl, mipmaps, otherData )
์ ํ์ด ์ค์ค๋ก๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๊ฒฐ์ ํ๊ฒ ํ์ญ์์ค. ์ด๊ฒ์ ๋ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์๋น์๊ฐ ์ฐ๋ฆฌ๊ฐ ์๊ฐํ์ง ๋ชปํ ์๋ก์ด ํ ์ค์ฒ ์ ํ์ ์ฌ์ฉํ ์ ์๋๋ก ํฉ๋๋ค. ์ด ๊ตฌ์กฐ๋ ์ํธ ์์กด์ฑ์ ์ค์ฌ์ผ ํฉ๋๋ค.
๋ธ๋ผ์ฐ์ ํ ์ํคํ ์ฒ๋ก ์ด๋ํ๋ ๊ฒ์ด ํ์คํ ๊ฐ ๊ธธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. UMD ๋น๋๋ฅผ ์ฌ์ฉํ๋ฉด THREE.js๋ฅผ ๋ ์ฝ๊ฒ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ํ WebGLRenderer๋ฅผ ์ฌ๋ฌ ํ์ผ๋ก ๋ถํ ํ ์ ์์ต๋๋ค. ์ง๊ธ์ ๋ค์ ๋จ์ผํ๊ณ ๋ฌด์ญ๊ฒ ๋ณด์ด๊ธฐ ๋๋ฌธ์ ๋๋ค.
ํ์ฌ ์ฌ๊ธฐ๋ก ์ฎ๊ธฐ๋ ์์ ์ ํ๊ณ ์๋ ์ง์ ์ ์์ํ์ต๋๋ค: https://github.com/coballast/three.js/tree/browserify-build-system
์ด๋ป๊ฒ ์๊ฐํ๋์ง ์๋ ค์ฃผ์ธ์.
๋ค์์ @coballast ์ ๋ณ๊ฒฝ ์ฌํญ ์ ๋๋ค.
browserifyify.js
ํ์ผ๋ก ์๋ํ๋ ๋ณํ ์ ๊ทผ ๋ฐฉ์์ ์ทจํ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๊ฒ์ด ์ฌ๋ฐ๋ฅธ ๋ฐฉ๋ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์ฐ๋ฆฌ ๋ชจ๋๊ฐ ์์ง ๋ง์ด ๋ ผ์ํ์ง ์์ ํ ๊ฐ์ง๋ ์ด ํฌ๊ณ ๋์์์ด ๋ณํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ธ๋ผ์ฐ์ ํ๋ก ์ ํํ๋ ์ต์ ์ ๋ฐฉ๋ฒ์ ๋๋ค. ๋ณ๊ฒฝํ ๋ค์ PR์ ์ด ์ ์์ง๋ง ์ฆ์ ๊ตฌ์์ด ๋ฉ๋๋ค. ์ด๊ฒ์ด ์๋ํ๋ ์ ๊ทผ ๋ฐฉ์์ ๋งค๋ ฅ์ ๋๋ค.
์ฐ๋ฆฌ๊ฐ ํ ์ ์๋ค๋ฉด:
browserifyify.js
)...๊ทธ๋ ๋ค๋ฉด ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ๊ฐ๊น์ด ๋ฏธ๋์๋ ์ฌ์ ํ ์๋ํ ํธ์ ๋ฒํผ ๋ณํ์ผ๋ก ๋ฐ๊ฟ ์ ์์ต๋๋ค. ๊ทธ ๋จ์ํจ์ ์ด๋ฐ์ฌ๋ก๊ธฐ์ ๋ ผ์์ด ์น๋ฆฌํ ๋ ๋ฌ์ฑํ ์ ์๋ ๊ทธ๋ฌํ ๋๊ท๋ชจ ํ๋ก์ ํธ๋ก์ ๊ทผ๋ณธ์ ์ธ ์ํคํ ์ฒ ์ ํ์ ๋ํ ์ด ๊ฟ๊พธ๋ ๊ฐ๋ ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
@coballast ๋ฅผ ์ํด src/Three.js๊ฐ ๋์ผํ๊ฒ ์๋ํ๋ค๋ฉด ๋ณ๊ฒฝ ์ฌํญ์ ์ ๊ฑฐํ๊ฒ ์ต๋๋ค.
์ฐธ๊ณ : ๋๋๋ฆด ๋ฟ๋ง ์๋๋ผ ์ ๋ถ๊ธฐ ๋๋ ๊ฐ์ ํธ์๋ฅผ ํตํด ๋ถ๊ธฐ ๊ธฐ๋ก์์ ํด๋น ๋ณ๊ฒฝ ์ฌํญ์ ์ ๊ฑฐํ์ญ์์ค.
@coballast ๋ณํ ์ ํธ๋ฆฌํฐ๊ฐ three.js
์ ํฌํฌ๊ฐ ์๋๋ผ three.js
๊ฐ๋ฐ ๋๋ ํ ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํค๋ ์ธ๋ถ ์ ํธ๋ฆฌํฐ์ด๊ณ ์์ค๋ฅผ ๋ณํํ๋ ๊ฒ์ด ๋ ํฉ๋ฆฌ์ ์ธ์ง ๊ถ๊ธํฉ๋๋ค three.js
ํ์ผ์ ๋ง๋ค๊ณ ๋น๋ ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ๊ณ ํ
์คํธ๋ฅผ ์คํํฉ๋๋ค.
@kumavis src ๋๋ ํ ๋ฆฌ๋ฅผ ๊ทธ๋๋ก ๋๋ ๋ฐ ๋์ํฉ๋๋ค. ๋๋ ์ ํธ๋ฆฌํฐ๊ฐ commonjs ์ฝ๋๋ก ์ค๋ณต ๋๋ ํ ๋ฆฌ๋ฅผ ์์ฑํ๋๋ก ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฑฐ๊ธฐ์์ browserify ๋น๋๋ฅผ ํ ์คํธํ๊ณ ์คํํ์ฌ ์ฃผ์ ์์ ์ ์๋ํ๊ธฐ ์ ์ ๋ชจ๋ ์์ ๊ฐ ์ ๋๋ก ์๋ํ๋์ง ํ์ธํ ์ ์์ต๋๋ค.
๋ํ ์ฌ๊ธฐ์๋ ์ ์ฒด ์ฝ๋๋ฒ ์ด์ค์์ ์ผ๊ด๋ ์คํ์ผ์ ์๋์ผ๋ก ํ์ธํ๊ณ ์ ์ฉํ๋ ์ ์ ๋ถ์ ํญ๋ชฉ์ ์์ฑํ ์ ์๋ ํฅ๋ฏธ๋ก์ด ๊ธฐํ๊ฐ ์์ต๋๋ค.
@coballast๋ ํ๋ฅญํ๊ฒ ๋ค๋ฆฝ๋๋ค.
์๋ํ๋ ์ฝ๋ ์ฌ์์ฑ์ ์ํ ํ๋ถํ ๋๊ตฌ๊ฐ ์์ต๋๋ค(์: escodegen ) . ์๊ฒฌ ๋ฑ์ ์ ์งํ๊ณ ์๋์ง ํ์ธํด์ผ ํฉ๋๋ค.
threejs-conversion-utility ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์์ํ์๊ฒ ์ต๋๊น?
@coballast ๋ ์ด ์ ํธ๋ฆฌํฐ์ ๋ํ ์๋ฆฌํ ์ด์ ์ ์ ์งํ๋ ๊ฒ์ด ์ค์ํ๋ค๊ณ ๋งํ์ต๋๋ค.
@kumavis ์๋ฃํ
@kumavis @mrdoob ์ฌ๊ธฐ ๋ ผ์ ์ค ์ผ๋ถ๋ npm์ ํตํด ์ค์นํ ๋ค์ browserify๋ก ์ปดํ์ผํ ์ ์๋ ์ฌ๋ฌ ๊ฐ๋ณ ๋ชจ๋๋ก THREE๋ฅผ ๋ถํ ํ๋ ์์ด๋์ด์ ๊ดํ ๊ฒ ๊ฐ์ต๋๋ค. ๋๋ ๊ทธ ์๊ฐ์ ์์ ํ ๋ฐ๋ํ์ง๋ ์์ง๋ง, ๊ทธ๊ฒ์ ๋ณ๊ฐ์ ๋ฌธ์ ๊ฐ ๋์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ์์ ์์ ๋ด๊ฐ ์นํธํ๋ ์ ์ผํ ๊ฒ์ THREE์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ด๋ถ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด browserify๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ์ด์ ํ๊ณ ์ฌ์ฉ์์๊ฒ ํญ์ ํ๋ ๋ฐฉ์์ผ๋ก ์๋ํ๋๋ก ํ ๋ค์ ํ๋นํ ํญ๋ชฉ์ ํ๊ฐํ์ญ์์ค.
๊ทธ ์ ํธ๋ฆฌํฐ์ ์ถ๋ ฅ์ด ๋ฌด์์ธ์ง ๊ถ๊ธํฉ๋๋ค ^^
@coballast ๋งํฌ ์ ์ฅ์๋ ์ด ์์ ์์ ๋น์ด ์๋๋ผ๋ ์ถ์ ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ๊ฑฐ๊ธฐ์์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
https://github.com/coballast/threejs-browserify-conversion-utility
์ฝ๋๊ฐ ์๋ง์ ๋๋ค. ๊ณง ์ ๋ฆฌ๋ ๊ฒ์ ๋๋ค.
์ฌ๊ธฐ ์ฐ๋ฆฌ๊ฐ ๊ฐ๋ค! :๋ก์ผ:
์ด์ browserify src๋ฅผ ์์ฑํ๊ณ ๋ฌธ์ ์์ด ๋น๋ํ ์ํ์ ์ ํธ๋ฆฌํฐ๊ฐ ์์ต๋๋ค. ์ด ์์ ์ ์ง์ ์ํํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์ง์นจ์ผ๋ก ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธํ๊ฒ ์ต๋๋ค. ์ด ์์ ์์ ์์ ๋ ์๋ํ์ง ์์ต๋๋ค. ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ํด๊ฒฐํด์ผ ํ ๋ช ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋๊ตฐ๊ฐ ์๋งค๋ฅผ ๊ฑท์ด๋ถ์ด๊ณ ๋๊ณ ์ถ๋ค๋ฉด ์ ์ฅ์์ ์ถ๊ฐํ๊ฒ ์ต๋๋ค.
@coballast ๋ค, ๋ฌธ์ ๋ฅผ TODO๋ก ์ ์ถํด ์ฃผ์ธ์. ์ ๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ต๋ํ ์ฐธ์ฌํ ๊ฒ์ ๋๋ค.
์ฌ๊ฐํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค. #6241 ์ฐธ์กฐ
๋ค์์ ์ด๊ฒ์ด ์๋ํ๊ธฐ ์ํด ๋ฐ์ํด์ผ ํ๋ ์ผ์ ๋ํ ๋ถ์์ ๋๋ค. https://github.com/coballast/threejs-browserify-conversion-utility/issues/9#issuecomment -83147463
Browserify๋ ๋์์ธ์ผ๋ก ์ธํด ์ต์ํ ์ ์ก์ด ์ค๋ณต๋ฉ๋๋ค. ์ด๊ฒ์ ์ฌ์ฉ ๋น์ฉ์ด ๋ถํ๋ ค์ง๊ณ (๋ฐ์ดํฐ ๊ณํ์ด ์์ต๋๊น?) ๋๋ฆฝ๋๋ค.
์ด์ ๋ํ ๊ฐ๋จํ ํด๊ฒฐ์ฑ ์ ํ๋๊ฐ ์๋ ๋ ๊ฐ์ ํด๋ผ์ด์ธํธ ํ์ผ์ ์๋ฐํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋์์ ๋ฌธ์๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ ํด๋ผ์ด์ธํธ ์ธก js์ ์ผ๋ฐ์ ์ธ ๊ดํ์ ๋๋ค.
์ฒ์์ browserify์ ๊ฒฐํจ์ด ์๊ณ ์์ฒด์ ์ผ๋ก ์์ ํด์ผ ํ๋ ๊ฒฝ์ฐ threejs์ ๊ฐ์ ๊ฒ์ ๊ณ ์ฌํ๊ณ ๊ฐ์ ํด์ผ ํ๋ ์ด์ ๋ฅผ ๊ฑฐ์ ์ ์ ์์ต๋๋ค.
@spaesani ์ด์จ๋ threejs์ ๋ํ ๋ฐ์ดํฐ๋ฅผ ๋ค์ด๋ก๋ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. threejs๋ฅผ ๋ ์์ ๋ชจ๋๋ก ๋๋๊ณ ์๋ํ๋ ๋น๋ ์์คํ ์ด ๋จ์ผ ์ฑ์ ํ์ํ ๊ฒ์ ์ ํํ๋๋ก ํ๋ฉด ์ค์ ๋ก ๋๋ถ๋ถ์ threejs ์ฑ์ ๋ ๊ฐ๋ฒผ์์ง ๊ฒ์ ๋๋ค.
์ด๋ค ์ด์ ๋ก "๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฝ๋์์ ๋ฌธ์"๋ฅผ ๋ถ๋ฆฌํ๋ ค๋ ๊ฒฝ์ฐ์๋ ์ฌ์ ํ ์ด ์์ ์ ์ํํ๊ณ ์ง๊ธ์ฒ๋ผ ๋ฏธ๋ฆฌ ๋น๋๋ ๋ฒ์ ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. --standalone ๋ฐ --exclude ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ์ฌ
Browserify๋ ๋ธ๋ผ์ฐ์ ์์ ๊ฒ์ฆ๋ ๋ชจ๋ ์ ์ API(CommonJS)๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ ๋ฟ์ ๋๋ค. threejs ํ๋ฌ๊ทธ์ธ ๊ฐ๋ฐ์ ํฌ๊ฒ ๋จ์ํํ๊ณ ์ฝ๋ ๋ช ํ์ฑ ๋ฐ ์์ฐ์ฑ์ ํฅ์์์ผ ๋ ๋ง์ ์ฌ๋๋ค์ด ์ฝ๋๋ฅผ ๋ณธ์ง์ ์ผ๋ก ์ ์งํ๋ฉด์ ๋ฒ์ ๊ด๋ฆฌ ์์คํ ์ ํตํด ๋ฌด๊ฒฐ์ฑ์ ์ ์งํ๋ ๋ ํฐ ์ํ๊ณ(npm)์ ํตํฉํ ์ ์์ต๋๋ค. stackgl family), ์ฌ๋๋ค์ด ์ํ์ง ์๋ ๊ฒฝ์ฐ CommonJS๋ก ๊ฐ์ ํ์ง๋ ์์ต๋๋ค.
๋ฌผ๋ก ๋จ์ ์ด ์์ง๋ง ์ธ๊ธํ ๋จ์ ์ ์๋๋๋ค.
three.js ๋ฐ three.min.js๋ ํ๋ก์, ์ผ๋ฐ ๋ชจ๋ฐ์ผ ์๋ฃจ์
๋๋ ์บ์ฑ ๋ธ๋ผ์ฐ์ ์ ์ํด ์ ์ก(๋ฐ์ดํฐ)์ ์ ์ฝํ๊ธฐ ์ํด ์บ์๋ ์ ์์ต๋๋ค.
๋ฌธ์ ํน์ ์ฝ๋๋ก threejs ์ฝ๋๋ฅผ ์ ํํ๊ณ ์ง๊ณํ๋ ์๊ฐ ์บ์ฑ์ ์คํ ๊ฐ๋ฅํ์ง ์์ต๋๋ค.
Browserify๊ฐ ํ์ฉํ๋ ๊ฒฝ์ฐ
sp
On Mar 28, 2015 1:06 PM, Roman Steiner notifications@github.com wrote:@spaesani Because the data for threejs has to be downloaded anyway. If we split threejs into smaller modules and let an automated build system cherry pick what it needs for a single app, actually most threejs apps out there would be lighter.
If for some reason you still want to separate "document from library code", you could still do this and use a pre-built version like we do now. You could even split your browserify-built app into separate modules by using the --standalone flag.
Browserify is just a way to use a battle proven module definition API (CommonJS) on the browser. It would greatly simplify the development of threejs plugins and enhance code clarity and therefore productivity, it would allow us to integrate into a bigger ecosystem (npm) where the code is inherently maintained by more people while still maintaining integrity through the versioning system, and it wouldn't even force people into CommonJS if they don't want it.
Of course there are downsides, but they're not the ones you've mentioned.
โReply to this email directly or view it on GitHub.
@spaesani It(
๋ง์ ๋ชจ๋ฐ์ผ ๋คํธ์ํฌ ๋ก๋ ๋ฌธ์ ๋ http/2์ ๊ฐ์ ๊ฒ์ผ๋ก ๋ค์ ๊ฐ์ ๋ ๊ฒ์ ๋๋ค. ์ด์ ๊ฐ์ ๋ฌธ์ ๋ ์ถ์ํ ์คํ์์ ๋ ๋ฎ์ ๊ณ์ธต์ ์์ ํ์ฌ ๊ฐ์ฅ ์ ํด๊ฒฐ๋ฉ๋๋ค. ์ฑ๋ฅ ๋ฌธ์ ๋ก ์ธํด ๋ชจ๋์ฑ/๊ด์ฌ ๋ถ๋ฆฌ ๋ฑ๊ณผ ๊ฐ์ ์ํํธ์จ์ด ์์ง๋์ด๋ง ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ง ์์์ผ ํฉ๋๋ค.
์ฐ๋ฆฌ ํ์ด ์ต๊ทผ์ jspm์ ์ฌ์ฉํ๊ธฐ ์์ํ๊ธฐ ๋๋ฌธ์ ์ด ๋ฌธ์ ๋ฅผ ๋ฐ๊ฒฌํ์ต๋๋ค. ์ฐ๋ฆฌ๋ threejs๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค(์ฃผ ํ์ผ์ด ๋ธ๋ผ์ฐ์ ํ๋์๊ธฐ ๋๋ฌธ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค). ์ ๋ ์ฃผ๋ก jspm์ ๋น๋ ๊ธฐ๋ฅ(๋ชจ๋ ์ข ์์ฑ์ ๋จ์ผ ํ์ผ๋ก ๋ฒ๋ค๋งํ์ง๋ง ์ฌ์ฉ๋๋ ์ข ์์ฑ๋ง ๊ฐ์ ธ์ด) ๋๋ฌธ์ threejs๋ฅผ es6 ๋ชจ๋๋ก ๋ง๋ ์ฌ๋์ด ์๋์ง ํ์ธํ๋ ค๊ณ ํ์ต๋๋ค.
mrdoob์ด threejs์ ํฌ๊ธฐ๋ฅผ 100kb ๋ฏธ๋ง์ผ๋ก ์ ์งํ๋ ๊ฒ์ ์ข์ง๋ง ๋ด ํ๋ก์ ํธ์ ๋๋ถ๋ถ์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๋ง์ด ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์ ์์์ต๋๋ค(๊ฐ์ฅ ๋ง์ ๊ฒ ๊ฐ์ง๋ง ์์๋ด๋ ค๊ณ ์๋ํ์ง๋ ์์์ต๋๋ค). CubeCamera, OrthographicCamera, CanvasRenderer, ๋ค์ํ ์กฐ๋ช , ๋ก๋, ๊ณก์ , ๊ธฐํํ, ๋์ฐ๋ฏธ ๋ฑ. ๋ํ ๋๋ถ๋ถ์ ํ๋ก์ ํธ์๋ ๋ช ๊ฐ์ง ์์ ์คํฌ๋ฆฝํธ๊ฐ ํฌํจ๋์ด ์์ต๋๋ค.
๋ด ํฌ๋ง์ ์ด๋ฌํ ๋ชจ๋ ๋ชจ๋(์ผ๋ฐ์ ์ผ๋ก threejs์ ํจ๊ป ๋ฒ๋ค๋ก ์ ๊ณต๋๋ ๋ชจ๋๊ณผ ์์ ์ ์๋ ๋ชจ๋)์ ๋จ์ผ ์์น๋ฅผ ๊ฐ์ง ์ ์๊ณ ํ์ํ ๊ฒ๋ง ๊ฐ์ ธ์ค๊ธฐ๋ง ํ๋ฉด ํ๋ก์ ํธ๋ฅผ ๋ฒ๋ค๋ก ๋ฌถ์ ๋ ๊ฒฐ๊ณผ๊ฐ ๋ํ๋ฉ๋๋ค. ์๋ ํฌํจ๋์ง ์์ ๋ง์ ๋ถ๋ถ์ด ํฌํจ๋์ด ์์์๋ ๋ถ๊ตฌํ๊ณ ์๋ threejs๋ณด๋ค ํจ์ฌ ์์ ํ์ผ์ ์์ต๋๋ค.
๋๋ ๋ํ threejs๊ฐ browserify ๋ชจ๋์ ์ฌ์ฉํ์ฌ ๊ตฌ์ถ๋๋ค๋ฉด ํ์ผ ํฌ๊ธฐ์ ์ฝ๊ฐ์ ์ค๋ฒํค๋๊ฐ ์ถ๊ฐ๋์ง๋ง(r70์์ ํ์ฌ 403kb์ ๋น๊ตํ ์ ์์) ์ฝ๋์์ ์ ์ญ THREE ๋ณ์์ ์ฌ์ฉ์ ์ ๊ฑฐํ๋ฏ๋ก THREE.Geometry์ ๊ฐ์ ๋ณ์๋ฅผ ํด๋ก์ ๋ก ์ถ์ํ ์ ์์ต๋๋ค.
๋๋ ์ฐพ๊ธฐ-๋ฐ๊พธ๊ธฐ๋ฅผ ์ํํ์ฌ THREE ๊ฐ์ฒด๋ฅผ ์ ๊ฑฐํ๊ณ (๋ฐ๋ผ์ ๋ชจ๋ ์์์ด ๋ค์์คํ์ด์ค๋ฅผ ์ค์ผ์ํด) ์ ์ฒด ํ์ผ์ IIFE๋ก ๋ํํ ๋ค์ Google ํด๋ก์ ๋ฅผ ํตํด ์ ์ฒด๋ฅผ ์คํํ๋ ๋น ๋ฅธ ํ ์คํธ๋ฅผ ์ํํ์ต๋๋ค. gzip์ผ๋ก ์์ถ๋์ง ์์ ๊ฒฐ๊ณผ ํ์ผ์ 777kb์์ 238kb๋ก ๊ฐ์ํ์ต๋๋ค.
๊ฒฐ๊ณผ๋ ๋ค๋ฅผ ์ ์์ง๋ง ์ด๊ฒ์ด ์ผ์ด๋ ์ ์๋์ง ํ์ธํ๋ ๊ฒ์ ํ์คํ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์๋ ค์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ๋ง์ ์ข์ ์ ๋ค์ด ์๊ณ ์ฐ๋ฆฌ์๊ฒ๋ ์น์ํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ํ ํ ํ๋ก์ ํธ์์ ๋ง์ ๋ ๋๋ฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์์ ์์ ์ผ์ข ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์ ์ ์ํํฉ๋๋ค.
์ถ์์ ๋ํด ๊นจ๋ซ์ง ๋ชปํ์ต๋๋ค. ๊ทธ๊ฒ์ ๊ฝค ํฐ ์ฐจ์ด์ ๋๋ค.
๊ทธ๋ฆฌ๊ณ es6 ๋ชจ๋์ ํ์คํ ์ ๋งํด ๋ณด์์ต๋๋ค. AMD/CommonJS/์ด๋ฌํ ๋ชจ๋ ํจํด ๋ฐ lib ์ฌ์ฉ์๋ ๊ฒฝ๋ก๊ฐ ์๋ค๋ ์์์ ๋ฃ๋ ๊ฒ๋ ์ข์ต๋๋ค.
@colin ๋ธ๋ผ์ฐ์ ํํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋น์ ์ ์ฌ๋ฆฌ์ ํ๋ณต์ ๋์ต๋๋ค.
๋ฌธ์์ ์์ต๋๊น?
Browserify๋ ์บ๋ฆฌ์ด ์บ์ฌ ์นด์ฐ์
๋๋ค ...
2015๋
3์ 31์ผ ํ์์ผ, ์คํ 10:11 - 04:00 Colin Ballast ์๋ฆผ @github.com:
@spaesani It(
๋ง์ ๋ชจ๋ฐ์ผ ๋คํธ์ํฌ ๋ก๋ ๋ฌธ์ ๋ http/2์ ๊ฐ์ ๊ฒ์ผ๋ก ๋ค์ ๊ฐ์ ๋ ๊ฒ์
๋๋ค. ์ด์ ๊ฐ์ ๋ฌธ์ ๋ ์ถ์ํ ์คํ์์ ๋ ๋ฎ์ ๊ณ์ธต์ ์์ ํ์ฌ ๊ฐ์ฅ ์ ํด๊ฒฐ๋ฉ๋๋ค. ์ฑ๋ฅ ๋ฌธ์ ๋ก ์ธํด ๋ชจ๋์ฑ/๊ด์ฌ ๋ถ๋ฆฌ ๋ฑ๊ณผ ๊ฐ์ ์ํํธ์จ์ด ์์ง๋์ด๋ง ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด์ง ์์์ผ ํฉ๋๋ค.
โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
์ด์ browserify๊ฐ require ๋ฌธ ์์ด ์ข ์์ฑ์ ์๋์ผ๋ก ๊ฒฐ์ ํ๋ค๋ฉด... ์ ๊น๋ง์...
@spaesani ์ ๋ ์ค์ ๋ก ๋ช ์์ ์ข ์์ฑ์ ์ ํธํฉ๋๋ค. ์ฝ๋๊ฐ ์ด๋ป๊ฒ ์๋ก ์ ๋ง๋์ง ์ดํดํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
Browserify๋ ์บ๋ฆฌ์ด ์บ์ฌ ์นด์ฐ์ ๋๋ค ...
@spaesani browserify ์ค๋ฒํค๋๋
์ํฉ ์ ๋ฐ์ดํธ:
๋ธ๋ผ์ฐ์ ํ๋ ์ฝ๋๊ฐ ์๋ ๋ถ๊ธฐ๊ฐ ์์ต๋๋ค.
https://github.com/coballast/three.js/tree/browserify
์ด๊ฒ์ ๋งค์ฐ ๋ง์ ์์ ์ด ์งํ ์ค์์ ๋ช ์ฌํ์ญ์์ค. ์ด ์ฝ๋๋ ์๋ ์์ฑ๋์์ผ๋ฉฐ ๊ฒฐ๊ณผ์ ์ผ๋ก ํ๋์ ๋งค์ฐ ๋์ฐํ๊ฒ ๋ณด์ผ ๊ฒ์ ๋๋ค. ๋๋ ์ฌ์ ํ ๋ช ๊ฐ์ง ๋น๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค. ๊ณ ์น ์ ์๋ค๊ณ ์๊ฐ๋๋ฉด coballast/threejs-browserify-conversion-utility#10์ ์ฐธ์กฐํ์ธ์. ๊ทธ๊ฒ์ ์ ์ ๋์ ๊ฑด์ค๋์์ง๋ง ์ง๊ธ์ ์๋๋๋ค.
@kumavis ์ ์ ๋ ์ผ๋ถ ๋ฐํ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ ธ๋ ฅํ๊ณ ์์ต๋๋ค(์ํํธ์จ์ด ์ํคํ ์ฒ๋ ๊ฐ์ ). ์ด๋์ ๊ฐ ์์์ ์ธ๊ธํ ๊ฒ ๊ฐ์์.
๋ต๋ณ์ด ๊ธธ์ด ์ฃ์กํฉ๋๋ค. TLDR: jspm/es6์ด ์คํ๋์ง๋ง ๋ช ๊ฐ์ง ์ด์ํ ์ ์ด ์์ต๋๋ค. 1) ๊ฐ์ฒด๋ฅผ ์ ์ํ๊ธฐ ์ ์ ๋ด๋ณด๋ด๊ธฐ. 2) ๋จ์ผ ํด๋์ค๋ฅผ ๋ด๋ณด๋ด๋ ๊ฒ์ด ์๋๋ผ ๋จ์ผ ํด๋์ค๋ฅผ ํฌํจํ๋ ๊ฐ์ฒด ๋ด๋ณด๋ด๊ธฐ 3) ์ํ ์ข ์์ฑ์ ์ฌ์ฉํ๋ IIFE; 4) ํ์ผ ๊ตฌ์กฐ.
๊ทธ๋๋ ์ฒซ์งธ, (@spinchristopher ์์ ์ ์ ๋๋ค) ๋ํผ ์ ์ : JSPM์ browserified ์ง์ฌ์ ํจ๊ป ์ฐ์ฃผํ๊ณ ๋ช ๊ฐ์ง ๋ฉ๋ชจ๋ฅผ ๊ฐ์ง๊ณ ์ด ์ค๋ ๋๊ฐ ๊ทธ๋ค์ ๊ฐ๋ํ์ง ์๊ณ ๊ทธ๋ค์ด๋์ง ์๋๋ก๊ฒ ์ต๋๊น ๊ทธ ํฌํฌ์ ๋ฌธ์ ๋ฅผ ์ฝ๋ ๋ค ์ข์ง ์์ ๋ค์ฃฝ๋ฐ์ฃฝ?
์คํ๋์ง๋ง ์ค์ ๋ก ์ฌ๋ฐ๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์ถ๋ ฅํ์ง๋ ์์ต๋๋ค. (์์ํ๊ธฐ์์ ๊ฐ๋จํ ๋ฐ๋ชจ ์ฌ์ฉ). ์บ๋ฒ์ค๋ฅผ ๋ง๋ค๊ณ ๊ฒ์ ์์ผ๋ก ์ฑ์ฐ์ง๋ง(ํฌ๋ช ํ ์์์ ํฌ๋ช ์ผ๋ก ์ค์ ํ์ง ์๋ ํ) ์ค์ ๋ก ํ๋ธ๋ฅผ ๋ ๋๋งํ์ง๋ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์์ง ์ด๊ธฐ ๋จ๊ณ์ด๊ธฐ ๋๋ฌธ์ ์ด ์์ ์์ ์๋ํ ๊ฒ์ผ๋ก ๊ธฐ๋ํ์ง๋ ์์ต๋๋ค.
3๊ฐ์ง ์ฃผ์ ๋ฌธ์ ์ ๋ถ๋ช์ณค์ต๋๋ค.
ํ๋. ์ด๊ฒ์ ๊ฐ์ฅ ์ฑ๊ฐ์ ์ผ์ด์๊ณ , ์ ํ ์๋ํ์ง ์์์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด ํน์ ์ค๋ฅ๋ก ์ปดํ์ผํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋์ง ์์งํ ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ง์ ํ์ผ์ด ๋ค์๊ณผ ๊ฐ์ด ์์๋ฉ๋๋ค(ํจ์ ์ ์๊ฐ ์๊ฐ์ ๋ฐ๋ผ ํธ์ด์คํธ๋๊ณ ๊ธฐ๋ณธ์ ์ผ๋ก module.exports ํ์ด ๋จผ์ ๋ํ๋์ง๋ง ๋จผ์ ์คํ๋๊ธฐ ๋๋ฌธ์ ๊ด์ฐฎ์ต๋๋ค):
module.exports.Foo = Foo;
function Foo() {}
๋ฌธ์ ๋ ์ด์ ๊ฐ์ ๋ง์ ํ์ผ์์ ๋ฐ์ํฉ๋๋ค(๋ด๊ฐ ์ฒ์ ๋ณธ ๊ฒ์ math/Math.js์์ต๋๋ค). ๊ฐ์ฒด ์ด๊ธฐํ๋ ํธ์ด์คํ ๋์ง๋ง(์ด๊ฒ์ด ์ ์๋์ง ์์ ์ค๋ฅ๊ฐ ์๋ ์ด์ ์) ์ ์๋ ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค(๋ฐ๋ผ์ ๋ด๋ณด๋ด๊ธฐ๊ฐ ์ ์๋์ง ์์).
module.exports.Foo = Foo;
var Foo = {};
์ฌ๊ธฐ์์ ์ฐพ์ ์ ์ผํ ์์ ์ฌํญ์ ๋ด๋ณด๋ด๊ธฐ ๋ผ์ธ์ ๋์ผ๋ก ์ด๋ํ๊ฑฐ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ค์ ์์ฑํ๋ ๊ฒ์ ๋๋ค(์ ํธ๋จ).
var Foo = module.exports.Foo = {};
๋. ๋ด๋ณด๋ธ ๋ฐ์ดํฐ์
๋๋ค. ๋ชจ๋ํ๋ ํ์ผ์ ๋ค๋ฃฐ ๋ ํ์ค์ ๊ฐ ํ์ผ์ด ๋จ์ผ ๊ฐ์ฒด๋ฅผ ๋ด๋ณด๋ด๋ ๊ฒ์
๋๋ค. ๋๋ถ๋ถ์ ํ์ผ์ด ์ด๋ฐ ๋ฐฉ์์ด์ง๋ง(์ผ๋ถ๋ ๋ ๋ง์ด ๋ด๋ณด๋ด์ง๋ง) ๋จ์ผ ์์ฑ์๋ฅผ ๋ด๋ณด๋ด์ง ์๊ณ ํด๋น ์์ฑ์๋ฅผ ํฌํจํ๋ ๊ฐ์ฒด๋ฅผ ๋ด๋ณด๋
๋๋ค(์: module.exports.Foo = Foo;
๋์ module.exports = Foo;
. ํ์). ๋ชจ๋ browserify ์์ ๊ฐ ์๋ํ๋ ๋ฐฉ์์
๋๋ค). ๋ฐ๋ผ์ require๋ฅผ ์ฌ์ฉํ ๋๋ ํ ๋จ๊ณ ๋ ๊น์ด ๋ค์ด๊ฐ์ผ ํฉ๋๋ค( var Vector3 = require('../math/Vector3').Vector3;
). ๋ถํ์ํ ๊ฒ ์ธ์ es6์ผ๋ก ๊ฐ์ ธ์ฌ ๋ ์ด๋ฅผ ์ํํ ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ( import Vector3 from '../math/Vector3'; var vector = new Vector3.Vector3();
). es6์์ ํน์ ๋ด๋ณด๋ด๊ธฐ๋ฅผ ๊ฐ์ ธ์ฌ ์๋ ์์ง๋ง ๋ธ๋ผ์ฐ์ ํ๋ ๋ชจ๋์ ์ฌ์ฉํ ๋ ์ ์ฉ๋๋ฉฐ ์ฌ์ ํ ๋์ผํ ์ค๋ณต์ฑ( import { Vector3 } from '../math/Vector3';
)์ ๊ฐ์ต๋๋ค. ๋จ์ํ ๋ค๋ฅธ ๊ฐ์ฒด๋ฅผ ์์งํ๋ ํ์ผ์ด ๋ช ๊ฐ ์์ต๋๋ค(Three.js์์ด ๋ถ๋ช
ํจ). ๊ทธ๋ฌ๋ ์ด๋ค์ ์ต์ํ์ผ๋ก ์ ์ง๋์ด์ผ ํ๋ฉฐ ์ค์ ๋ก๋ ํ๋ก๋์
์์ ๋ง์ ๊ฒ์ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ์ด ์๋๋ผ ๋น๋ ํ๋ก์ธ์ค์๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค. .
์ผ. ์ด๊ฒ์ ์ํ ์ข ์์ฑ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. System.js(jspm์์ ์ฌ์ฉํ๋ ๋ชจ๋ ๋ก๋)๋ ์ํ ์ข ์์ฑ์ ์ ์ฒ๋ฆฌํ ์ ์์ง๋ง ํ ๊ฐ์ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ง์ ๊ณณ์์ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. ๋ฌธ์ ๋ Vector3๊ฐ ์ข ์์ฑ์ผ๋ก ์ ๋ฌ๋์์ง๋ง ์ด ์์ ์์ ์์ ํ ๋ก๋๋์ง ์์์ผ๋ฉฐ(Vector3์๋ ์ด ํ์ผ์ด ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ ๊ฐ๊ฐ์ ๋ค๋ฅธ ํ๋๊ฐ ํด๊ฒฐ๋ ๋๊น์ง ํด๊ฒฐํ ์ ์์) ์์ฑํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๋๋ ์ด๊ฒ์ด ์ด๋ป๊ฒ ๋ ์ ๊ณ ์ณ์ง์ง ํ์ ํ ์ ์์ง๋ง ๋งค์ฐ ๋์ ์์ ์ฌํญ(์๋์ ํ์๋จ)์ ์ถ๊ฐํ์ต๋๋ค. ์ด๊ฒ์ ๊ฐ๋จํ ํด๊ฒฐ์ฑ ์ด ์์ ์๋ ์๋ ์ํคํ ์ฒ ๋ฌธ์ ์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ฌ๋ฌ ๋ฒ ๋ฐ์ํฉ๋๋ค. ํจ์๊ฐ ํธ์ถ๋ ๋๋ง๋ค ์๋ก์ด Vector3๊ฐ ์์ฑ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํ ์ต์ ํ์ธ ๊ฒ ๊ฐ์ต๋๋ค. Vector3๋ฅผ ์ต์ ํํ์ฌ ์์ ํ ์ ์๋ ์ฌ๊ฐํ ์ฑ๋ฅ ์ ํ๊ฐ ์ค์ ๋ก ์๋ ๊ฒฝ์ฐ Vector3์ ํจ์๋ฅผ ์ถ๊ฐํ์ฌ ๋์ค์ ๋ฆด๋ฆฌ์ค๋๋ ์ฌ์ฉ๋์ง ์์ vector3์ ๋ฐํํ ๊น์?
Foo.prototype.bar = function() {
var vector = new Vector3();
return function() {
// some data which reuses vector repeatedly.
};
}();
์์ :
Foo.prototype.bar = function() {
var vector;
return function() {
if(!vector) vector = new Vector3();
// some data which reuses vector repeatedly.
};
}();
๋ง์ง๋ง์ผ๋ก ํ์ผ ๊ตฌ์ฑ์ ๋ํด ์กฐ๊ธ ์ถ๊ฐํ๊ณ ์ถ์์ต๋๋ค. ์ด๊ฒ์ ๋ถ๋ช ํ ํ์ฌ ์ธํธ๊ฐ ์ ๋๋ก ๊ตฌ์ถ๋ ํ์ ํด๊ฒฐํด์ผ ํ ๋ฌธ์ ์ด์ง๋ง, ์ ๋ ์ง๊ธ ๊ทธ๊ฒ์ ์ ๊ธฐํ๊ณ ์ถ์์ต๋๋ค. ํ์ฌ ํ์ผ ๊ตฌ์กฐ๊ฐ ์๋ํ๋ ๋์ ์ผ๋ถ๋ ๋ค์ ์ด์ํ๊ฑฐ๋ ์ฌ์ง์ด ์ด์ํฉ๋๋ค. ์ฃผ์ ๊ทธ๋ฃน(์นด๋ฉ๋ผ, ์ฌ๋ฃ, ์ง์ค๋ฉํธ๋ฆฌ ๋ฑ)์ ์ ๋์ด ์๋ ๊ฒ ๊ฐ์ง๋ง ์๋์์ ๋ณผ ์ ์๋ ๊ฒ์ฒ๋ผ ์ฝ๊ฐ์ ๋ณ๊ฒฝ์ ๊ฐํ ๊ฒ์ ๋๋ค. ๋ํ ThreeGlobals์ ์ ์ญ ํญ๋ชฉ์ ์ ์ญ ํญ๋ชฉ์ผ๋ก ์ด๋ํ ๊ฒ์ ๋๋ค. IE: FrontSide, BackSide, DoubleSide๋ ๋ชจ๋ Material์ ์ํฉ๋๋ค(NoShading, FlatShading ๋ฐ SmoothShading๊ณผ ํจ๊ป. ์ค์ ๋ก ๋๋ถ๋ถ์ด...).
๋ด ์ฃผ์ ํผ๋์ ํต์ฌ ๋ฐ ์ถ๊ฐ ๊ธฐ๋ฅ๊ณผ ๊ด๋ จ์ด ์์ต๋๋ค. core/Geometry.js๋ Material์ด materials ํด๋์ ์๋ ๊ฒ์ฒ๋ผ ๊ธฐํํ ํด๋์ ์์ด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ธฐํํ ํด๋๊ฐ ์์ผ๋ฉฐ ์์คํธ๋ผ์ ์์ต๋๋ค. ๋ง๋ถ์ฌ์ extras์๋ ์ฝ์ด์ ์ง์ค๋ฉํธ๋ฆฌ๊ฐ ์์ง๋ง ๊ธฐ๋ณธ ์ง์ค๋ฉํธ๋ฆฌ๋ ์ด ํด๋์ ์์ต๋๋ค. ์ด ๋ง์ ๋์ฐ๋ฏธ ๋ชจ์์ด ์์ง๋ง ๊ฐ ๋์ฐ๋ฏธ๊ฐ ๋์์ด ๋๋ ์ผ์ ํด์ผ ํ์ง ์์ต๋๊น? ๋น๋ ํ๋ก์ธ์ค๋ ์ํ๋ ํ์ผ๋ง ๊ฐ์ ธ์ค๋๋ก ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์์ผ๋ฏ๋ก ์ค์ํ์ง ์์ ํ์ผ์ ๋ค๋ฅธ ๊ณณ์ ๋ ์ด์ ๊ฐ ์์ต๋๋ค.
ํ์ฌ ์ฝ๋์ import BoxGeometry from 'threejs/extras/geometries/BoxGeometry';
๋ฐ var geometry = new BoxGeometry.BoxGeometry( 1, 1, 1 );
์ด ์์ต๋๋ค. `new THREE.BoxGeometry()`` ์ฌ์ฉ์ ์ต์ํด์ง๋ค ๋ณด๋ ํ์ผ์ ์ฐพ๋ ๋ฐ ๊ฝค ์ค๋ ์๊ฐ์ด ๊ฑธ๋ ธ์ต๋๋ค. ๋ชจ๋์์ผ๋ก ์ฌ์ฉํ ๋ ํ์ผ ์์น๋ ํจ์ ์๋ช
๋งํผ ์ค์ํฉ๋๋ค.
ํ์ผ ๊ตฌ์กฐ์ ๋ํ ์ผ๋ฐ์ ์ธ ๋ณ๊ฒฝ ์ฌํญ์ ๋๋ค. ์ด๊ฒ๋ค์ ๋ง์ ๊ณณ์์ ์ ์ฉ๋์ง๋ง ๋๋ ๋จ์ง ์๋ฅผ ๋ณด์ฌ์ค ๋ฟ์ ๋๋ค. (์ฐธ๊ณ ๋ก ์ ๋ ํ์ผ์ด ๋ด๋ณด๋ด๋ ๋จ์ผ ํด๋์ค์ ์ด๋ฆ์ ๋ฐ์ ํ์ผ ์ด๋ฆ์ ์ง์ ํ๊ณ ๊ฐ์ ์ด๋ฆ์ ํด๋์ ํ์ผ์ ๋ฐฐ์นํ๋ ๋ชจ๋ธ์ ํญ์ ์ ํธํ์ต๋๋ค. ์ง๊ณ ์์์ ์ผ๋ฐ์ ์ผ๋ก ํด๋น ํด๋์ ๋ค์ด๊ฐ์ง๋ง ๋ค์ ํ ํด๋์ ๋ค์ด๊ฐ๋๋ค. ํ์ง๋ง ์ด ํจํด์ด ๋ง์์ ๋ค์ง ์์ผ๋ฉด ๊ทธ ์ถ๊ฐ ๋ ๋ฒจ๋ง ๋นผ๋ฉด ์๋์ ๊ฐ์ ๊ตฌ์กฐ๊ฐ ์ ์ฉ๋ฉ๋๋ค. ๋ํ ๋ชจ๋ ํ์ผ ๋ก๋๋ฅผ ์ฝ๊ฒ ์์ ํ ์ ์์ต๋๋ค[ํํฌ๋ ์ผ๋ฐ์ ์ผ๋ก ์ค์ ๋ก ์ง์ ์ ๊ณต๋ฉ๋๋ค]. ๊ณ์ธตํ๋ฅผ ์๋ํํ๊ณ require ๋ฌธ์ ๋จ์ํํฉ๋๋ค.] (์ ๋ ๋ํ ํ์ํ ๊ฒฝ์ฐ ๋ฐ์ค์ด ์๋ ๋ชจ๋ ์๋ฌธ์ ํ์ผ์ ์ ํธํฉ๋๋ค.)
Three.js - This is _only_ used in the build process, so it should actually be with the build files, but run as if it is in this location.
geometry/geometry.js - Currently at core/Geometry.js
geometry/face3/face3.js - from core/Face3.js
geometry/box_geometry/box_geometry.js - Currently at extras/geometries/BoxGeometry.js
geometry/circle_geometry/circle_geometry.js - Similar to above.
geometry/utils/utils.js - from extras/GeometryUtils.js
camera/camera.js
camera/cube_camera/cube_camera.js
camera/perspective_camera/perspective_camera.js
camera/helper/helper.js - or camera/camera_helper/camera_helper.js
scene/scene.js
scene/fog/fog.js
scene/fog_exp2/fog_exp2.js
๋ํ ์ํ์ ์ด๋ฆ์ utils(๊ฐ ๋ฒ์ฃผ์๋ ์์ ๊ธฐํํ๊ณผ ๊ฐ์ utils๊ฐ ์์ ์ ์์)๋ก ์ด๋ฆ์ ๋ณ๊ฒฝํ์ฌ ์ํ(์ฝ์ด์ ๋ง์ ๊ฒ) ์ด์์ ๋ณด์ ํ ์ ์์ต๋๋ค.
@HMUDesign @spinchristopher ํ๋ฅญํ ๋ถ์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! ์ด๋ฌํ ์ข ๋ฅ์ ๋ฌธ์ ๋ ํฅํ coballast/threejs-browserify-conversion-utility ์ ์ฅ์์ ๋ฃ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ต๋๋ค.
์ข์, ์ด์ ๋ด๊ฐ ๋น์ ์ ์๊ฒฌ์ ์ ๋๋ก ์ฝ์ ์ ์์ต๋๋ค.
๋๋ ์ด๋ป๊ฒ ๋ ์์ ํด๋น ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ ๋งํฌ๋ฅผ ๋์ณค์ต๋๋ค. ๋๋ ๊ธฐ๊บผ์ด ๋ด ๋ฌธ์ ๋ฅผ ์ฎ๊ธธ ๊ฒ์
๋๋ค.
๋ด์ผ ๊ทธ ๋ฆฌํฌ์งํ ๋ฆฌ๋ก, ํ์์ ๋ฐ๋ผ ๋ถํ ํฉ๋๋ค(์ต์ํ
์ผ๋ถ๋ ์ด๋ฏธ ์์ต๋๋ค)
2015๋
4์ 9์ผ ์ค์ 12์ 9๋ถ์ "kumavis" notification@github.com์ด ์์ฑํ์ต๋๋ค.
@HMUDesign https://github.com/HMUDesign @spinchristopher
https://github.com/spinchristopher ํ๋ฅญํ ๋ถ์์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค! ์ต์์
์ด๋ฐ ์ข ๋ฅ์ ๋ฌธ์ ๋ฅผ
ํฅํ coballast/threejs-browserify-conversion-utility ์ ์ฅ์.์ข์, ์ด์ ๋ด๊ฐ ๋น์ ์ ์๊ฒฌ์ ์ ๋๋ก ์ฝ์ ์ ์์ต๋๋ค.
โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/mrdoob/three.js/issues/4776#issuecomment -91132413.
์, ์ ๋ ์ ์์ ์ util ์ ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ํด ๊ทธ๋ ๊ฒ ํฉ๋๋ค(*Util ํ์ผ์
๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ๊ฐ ์๋ ๊ฒฝ์ฐ์๋ง ๊ฐ๋ ์ถ๊ฐํ ๊ฒ์
๋๋ค.
Expert), ๊ทธ๋ฌ๋ ์ด ๊ตฌ๋ฌธ์ ๋ค์๊ณผ ๊ฐ์ ๊ฒฝ์ฐ์๋ง ์๋ํฉ๋๋ค.
์ฌ๋ฌ ๋ช
๋ช
๋ ๋ณ์๋ฅผ ๋ด๋ณด๋
๋๋ค. ๊ณตํต js ๋ชจ๋์ฉ ๋ก๋๋ ๋ค์์ ์ฒ๋ฆฌํฉ๋๋ค.
modules.exports๋ ๊ธฐ๋ณธ ๋ด๋ณด๋ด๊ธฐ๋ก,
๊ฐ์ ธ์ค๊ธฐ =(
2015๋
4์ 9์ผ ์ค์ 12์ 12๋ถ์ "kumavis" notification@github.com์ด ์์ฑํ์ต๋๋ค.
es6์์๋ ๋ค์์ ํตํด ๋ด๋ณด๋ด๊ธฐ ๊ฐ์ฒด์์ ์์ฑ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
๊ตฌ์กฐํ.import { Vector3 } from '../math/Vector3';
์ฆ, ๋ชจ๋๋น ํ๋์ ๋ด๋ณด๋ด๊ธฐ๊ฐ ์ ํธ๋๋ค๋ ๋ฐ ๋์ํฉ๋๋ค.
โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/mrdoob/three.js/issues/4776#issuecomment -91132982.
@HMUDesign ๊ทํ์ ์๋์ง์ ๋ถ์์ ๋ค์ ํ ๋ฒ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ์ฌ๊ธฐ์์ ์ฐ๋ฆฌ๋ ํ ์ผ ๋ชฉ๋ก์ ๊ตฌ์ฑํ๊ณ ์์ต๋๋ค. ์์ ๋กญ๊ฒ ๋ฐ์ด๋ค ์ ์์ต๋๋ค. https://github.com/coballast/threejs-browserify-conversion-utility/issues/17
๋ธ๋ผ์ฐ์ ํ๋ฅผ ์ํด +1.
๋ํ glslify๋ฅผ ์ฌ์ฉํ์ฌ ์
ฐ์ด๋๋ฅผ ๋ณ๋์ ํ์ผ๋ก ์ด๋ํ๋ ๋ฐ +1์
๋๋ค.
๋ํ ํด๋์ค ๋ฐ ๋ชจ๋๊ณผ ๊ฐ์ ์ผ๋ถ ES6 ๊ธฐ๋ฅ์ ์ฑํํ๋ฉด +1์ด ๋ฉ๋๋ค. ์ ๋น๋ ์คํ์ ์ฌ์ฉํ๋ฉด ํ์ํ ๊ฒฝ์ฐ ES5๋ก ๋ค์ ์ปดํ์ผํ ์ ์์ต๋๋ค. ์๋ฅผ ์ฐธ์กฐํ์ญ์์ค.
import Object3D from '../core/Object3D';
import Geometry from '../core/Geometry';
import MeshBasicMaterial from '../materials/MeshBasicMaterial';
class Mesh extends Object3D {
constructor(
geometry = new Geometry(),
material = new MeshBasicMaterial({color: Math.random() * 0xffffff}
) {
super();
this.geometry = geometry;
this.material = material;
this.updateMorphTargets();
}
}
export default Mesh;
@lmcd ์ฐ๋ฆฌ๋ es6 ๋ชจ๋์ ์ฌ์ฉํ๊ณ babeljs๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๊ฒ์ ์ปดํ์ผํ ์ ์์ต๋๋ค.
@coballast ๊ทํ์ browserify
์ง์ ์ ๋ถ๊ธฐํ์ฌ ์ด๋ฌํ ์ผ์ ์ํํ๋ ๋ฐ ๊ด์ฌ์ด ์์ต๋๋ค.
@lmcd ๊ท์ฐฎ๊ฒ ํ์ง ์๊ฒ ์ต๋๋ค. es5 ํญ๋ชฉ์ es6์ผ๋ก ์๋ ์ด๋ํ๋ ์๋ํ ๋๊ตฌ๋ฅผ ๊ฐ๋ฐํ ๊ฒ์ ๋๋ค. ์์ฒญ๋ ์์ es5 ์ฝ๋๊ฐ ์๊ณ ์ด๋ฅผ ์์ผ๋ก ์ฎ๊ธฐ๋ ๋ ธ๋๋ ฅ์ด ์ฒ๋ฌธํ์ ์ด๊ธฐ โโ๋๋ฌธ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
@coballast ์ ๋ 5to6
ํจ์ค๋ฅผ ์คํํ๋ ๊ฒ์ ๋ํด ๋ ๋ง์ด ์๊ฐํ์ต๋๋ค: https://github.com/thomasloh/5to6
@lmcd oo ์ข์ ๋ฐ๊ฒฌ
ํ์ง๋ง tbh, three.js๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ์์ฑํ๋ ๊ฒ์ด ๋ ์ฌ์ธ ๊ฒ ๊ฐ์ต๋๋ค. P
@lmcd ์ฐพ์์ฃผ์ ์ ์ ๋ง ๊ธฐ์ฉ๋๋ค. ๊ผญ ํ์ํด์ ํ๋ ค๊ณ ํ๋ ๊ฒ ์ค ํ๋์๋๋ฐ ํ์คํ ์ฌ๋ฏธ๊ฐ ์์์ด์.
@mrdoob ์ด ๋ฌธ์ ์ ๋ํ ํ์ฌ ์๊ฐ์ ๋ฌด์์ ๋๊น?
@anvaka ํ์ฌ ์ ๋ WebGLRenderer
๋ฆฌํฉํ ๋ง์ ์ง์คํ๊ณ ์์ต๋๋ค. ๋ฉํ์ด ๋ถ์กฑํด ๐
๋๋ ์ต๊ทผ์ ์ด๋ฏธ ์ฌ๊ธฐ์์ ์ด๋ฏธ ์ธ๊ธํ babel polyfill๊ณผ ํจ๊ป es6 ๋ชจ๋์ ํ๋ณตํ๊ฒ ์ฌ์ฉํ๊ณ ์๋ ์ผ๋ถ ํ๋ก์ ํธ๋ฅผ ๋ง๋ฌ์ต๋๋ค. ์ง๊ธ์ ๊ทธ๊ฒ์ด ๋ฌด์์ธ์ง ๊ธฐ์ตํ๊ฑฐ๋ ์ฐพ์ ์ ์์์ต๋๋ค. ์ด์จ๋ ๋์๊ฒ๋ ์ข์ ๋ณด์์ต๋๋ค.
๋ํ es6์ ํ์ค ์ธก๋ฉด์์ ์ด์ ์์ฑ๋ ๊ฒ ๊ฐ์ต๋๋ค. "๋๋์ด ECMA-262 Edition 6์ด ๊ณต์ ์น์ธ๋์ด 2015๋ 6์ 17์ผ์ ํ์ค์ผ๋ก ๊ฒ์๋์์ต๋๋ค."๋ผ๊ณ https://developer.mozilla.org/en-US/docs์ ๋์
๋ชจ๋ ์ฌ์์ ํด๋ง ๋ฐ ์์ ์ฑ๊ณผ ๊ด๋ จํ์ฌ ์ํฉ์ ๊ทธ ๋ฉด์์ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
๋๋ ์ต๊ทผ์ ์ด๋ฏธ ์ฌ๊ธฐ์์ ์ด๋ฏธ ์ธ๊ธํ babel polyfill๊ณผ ํจ๊ป es6 ๋ชจ๋์ ํ๋ณตํ๊ฒ ์ฌ์ฉํ๊ณ ์๋ ์ผ๋ถ ํ๋ก์ ํธ๋ฅผ ๋ง๋ฌ์ต๋๋ค. ์ง๊ธ์ ๊ทธ๊ฒ์ด ๋ฌด์์ธ์ง ๊ธฐ์ตํ๊ฑฐ๋ ์ฐพ์ ์ ์์์ต๋๋ค. ์ด์จ๋ ๋์๊ฒ๋ ์ข์ ๋ณด์์ต๋๋ค.
๋ํ 47kb์ ์ถ๊ฐ js์ด๋ฉฐ ํฌํจ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ๊ณ ๋ธ๋ผ์ฐ์ ์์ es5๋ก ๋ณํํ๋ฏ๋ก ์์ ์๊ฐ์ ์ ํฉํ์ง ์์ต๋๋ค.
three.js๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋์ด ์์ ์ ์ฝ๋์์ es6์ ์ฌ์ฉํ๋ ๊ฒ์ ๋ง์ ์ ์๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฌ์ฉํ๋ฉด ์ ๋ฐ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ํธํ์ฑ ๋ฐ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
์ - ์ฌ๊ธฐ์์ ์์ ํ์ต๋๋ค. ์ ๋ณด ๊ฐ์ฌํฉ๋๋ค. ๋น๋ ํ๋ก์ธ์ค์์ ์๋ํ๋ ๋ธ๋ผ์ฐ์ ํ ๋ฑ์ด ์ง๊ธ์ ์ฌ์ ํ โโ๋ ๋์ ๊ฒ ๊ฐ์ต๋๋ค.
์ - ์ฌ๊ธฐ์์ ์์ ํ์ต๋๋ค. ์ ๋ณด ๊ฐ์ฌํฉ๋๋ค. ๋น๋ ํ๋ก์ธ์ค์์ ์๋ํ๋ ๋ธ๋ผ์ฐ์ ํ ๋ฑ์ด ์ง๊ธ์ ์ฌ์ ํ โโ๋ ๋์ ๊ฒ ๊ฐ์ต๋๋ค.
es6์ ์ฃผ์ ๋ฌธ์ ์ค ํ๋๋ es5์์ ๊ตฌ๋ฌธ ๋ณ๊ฒฝ์ด ์ค๋จ๋๋ค๋ ๊ฒ์ ๋๋ค. ์๋ฅผ ๋ค์ด ๋ฑ๋ฑํ ํ์ดํ =>๋ ์๋ชป๋ es5์ด๋ฉฐ ์๋ฐ ์คํฌ๋ฆฝํธ ํ์๊ฐ ์คํจํ๊ณ ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ ค๊ณ ์๋ํ์ง ๋ชปํ๊ฒํฉ๋๋ค. ๋ฐ๋ผ๊ฑด๋ ๋๊ตฐ๊ฐ๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ์๊ฐํด๋ผ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๊ทธ๋ค์ ์์ง ํ์ง ์์์ต๋๋ค.
์ค์ ๋ก ๋ชจ๋ ์์คํ , import ๋ฌธ ๋ฑ๋ง ์๊ฐํ๊ณ ์์์ต๋๋ค.
๋ํ 47kb์ ์ถ๊ฐ js์ด๋ฉฐ ํฌํจ๋ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฝ๊ณ ๋ธ๋ผ์ฐ์ ์์ es5๋ก ๋ณํํ๋ฏ๋ก ์์ ์๊ฐ์ ์ ํฉํ์ง ์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋ฑ๋ฑํ ํ์ดํ =>๋ ์๋ชป๋ es5์ด๋ฉฐ ์๋ฐ ์คํฌ๋ฆฝํธ ํ์๊ฐ ์คํจํ๊ณ ์ฝ๋๋ฅผ ์ปดํ์ผํ๋ ค๊ณ ์๋ํ์ง ๋ชปํ๊ฒํฉ๋๋ค.
es6 ์ฝ๋๋ ๋ฐํ์ ํ๋ํฐ ์์ด _build_ ๋์ es5๋ก ๋ณํ๋ ์ ์์ต๋๋ค. ๋น๋ ํ์ดํ๋ผ์ธ์ babel ๋จ๊ณ๋ฅผ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, ํ์ดํ ํจ์๋ ํด๋ฆฌํ์ด๋ ๋ฐํ์ ํจ๋ํฐ ์์ด ๋น๋ ์ค์ es5๋ก ๋ณํ๋ ์ ์์ต๋๋ค. Babel์ ์ด es6 ์ค๋ํซ์ ํธ๋์คํ์ผํ ๊ฒ์ ๋๋ค.
function MyObj() {
this.step = 1;
this.increment = function ( arr ) {
return arr.map( v => v + this.step );
}
}
์ด ํด๋์ฉ ๋ฒ์ ์ผ๋ก:
function MyObj() {
this.step = 1;
this.increment = function (arr) {
var _this = this;
return arr.map(function (v) {
return v + _this.step;
});
};
}
es6 ํด๋์ค์ ๊ฐ์ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ์์ ํด๋ฆฌํ์ ์์ฑํฉ๋๋ค(babel repl http://babeljs.io/repl/์์ ๋ณผ ์ ์์).
@mrdoob ์ดํดํ์ต๋๋ค. three.js๋ฅผ npm์์ ํธ์คํ ๋๋ ๋ ์์ ๋ชจ๋๋ก ๋๋๋ ์์ด๋์ด๋ฅผ ์ง์งํ์๊ฒ ์ต๋๊น?
๊ธฐ๋ณธ three.js ๋ฆฌํฌ์งํ ๋ฆฌ๋ ๋ณ๊ฒฝ๋์ง ์์ ์ํ๋ก ์ ์ง๋ฉ๋๋ค. ์๋น์๋ ์๋ฌด ๊ฒ๋ ๋น๋ํ ํ์๊ฐ ์์ต๋๋ค. ๊ฒฝํ์ด ๋ง์ ์ฌ์ฉ์๋ three.js์ ํ์ ๋นํธ๋ฅผ ์ ๋ณํ ์ ์์ต๋๋ค.
๊ทธ ์ข์ ์๋ฆฌ. ์์ธํ๋ ๋ชจ๋ฅด์ง๋ง.
es6 ์ฝ๋๋ ๋ฐํ์ ํ๋ํฐ ์์ด ๋น๋ ์ค์ es5๋ก ๋ณํ๋ ์ ์์ต๋๋ค. ๋น๋ ํ์ดํ๋ผ์ธ์ babel ๋จ๊ณ๋ฅผ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด, ํ์ดํ ํจ์๋ ํด๋ฆฌํ์ด๋ ๋ฐํ์ ํจ๋ํฐ ์์ด ๋น๋ ์ค์ es5๋ก ๋ณํ๋ ์ ์์ต๋๋ค. Babel์ ์ด es6 ์ค๋ํซ์ ํธ๋์คํ์ผํ ๊ฒ์ ๋๋ค.
ES6 ํธ๋์คํ์ผ๋ง์๋ ์ฌ์ ํ ์๋นํ ๋ฐํ์ ํ๋ํฐ๊ฐ ์์ต๋๋ค. http://www.incaseofstairs.com/2015/06/es6-feature-performance/ ํนํ ๊ณ ์ฑ๋ฅ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฒฝ์ฐ.
module/npm/browserfy ๋ฑ ๊ทธ๋ฌ๋ ์๋ง๋ ์ข์ ์๊ฐ์ผ ๊ฒ์ ๋๋ค
ES6 ๋ชจ๋์ ์ฌ์ฉํ ์ ์ ํ ๋ชจ๋ํ์ +1
์ ์์ ์ธ ๋ชจ๋ ์์คํ
( commonjs, amd, es6 )์ ์ฌ์ฉํ์ฌ ์ ์ ํ ๋ชจ๋ํ์ +1
๋๋ commonjs์ amd๊ฐ ํธ๋์คํ์ผ์ ํ์๋ก ํ์ง ์๋ ์ ํธ๋๋ ์ ํ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
๊ทธ๋ฌ๋ ๋น๋ ๋จ๊ณ๊ฐ ํ์ํฉ๋๋ค.
ํธ๋์คํ์ผ ๋จ๊ณ.
ES6์ ์ฌ์ฉํ๋ฉด ์ธ์ด์ ๋ค์ ๋ฒ์ ์ด ๋ ๋ฟ๋ง ์๋๋ผ
๋ค์ ๊ธฐ๋ฅ์ ์ํ๋ ๋๋ก ์ฌ์ฉํ๋ ๊ธฐ์กด ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ์์์ํค์ง ์์ต๋๋ค.
์ฝ๋ ๊ธฐ๋ฐ์ ์ด๋ฏธ ๊ตฌ์ถ๋ ์์คํ
์ผ๋ก ๋ฆฌ์ก์
ํ๋ ๊ฒ์ด ์ ๋ง ํ๋ช
ํ๊ฐ์?
์ต์ ์๋?
2015๋
7์ 20์ผ ์คํ 12์ 5๋ถ์ "kumavis" notification@github.com์ด ์์ฑํ์ต๋๋ค.
์ ์์ ์ธ ๋ชจ๋ ์์คํ ( commonjs, amd,
์์ค6 )
๋๋ commonjs์ amd๊ฐ ๊ทธ๋ค์ด ์ ํธํ์ง ์๋ ์ ํ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
ํธ๋์คํ์ผ์ด ํ์ํ๋คโ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/mrdoob/three.js/issues/4776#issuecomment -122990605.
๊ทธ๋ฌ๋ ๋น๋ ๋จ๊ณ๊ฐ ํ์ํฉ๋๋ค.
ํธ๋์คํ์ผ ๋จ๊ณ.
๋น๋์ ํธ๋์คํ์ผ๋ง์ ๋ณต์ก์ฑ ์ธก๋ฉด์์ ๋๋ฑํ์ง ์์ต๋๋ค.
์ฝ๋ ๊ธฐ๋ฐ์ ์ด๋ฏธ ๊ตฌ์ถ๋ ์์คํ ์ผ๋ก ๋ฆฌ์ก์ ํ๋ ๊ฒ์ด ์ ๋ง ํ๋ช ํ๊ฐ์?
์ต์ ์๋?
commonjs๋ ๊ฐ๋จํ๊ณ ํ๋ฅญํ๊ฒ ์๋ํฉ๋๋ค. im์ '์ต์ ' === '๋ ๋์'์ด๋ผ๋ ๊ฐ๋ ์ผ๋ก ํ๋งค๋์ง ์์ต๋๋ค.
ES6 [...]์(๋ฅผ) ์ฌ์ฉํ๋ฉด ์ํ๋ ๋๋ก ๋ค์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด๊ฒ์ ๊ณ ๋ คํ ๊ฐ์น๊ฐ ์์ต๋๋ค. es6 ๊ธฐ๋ฅ์ ์ํ์ญ๋๊น? ์ฐ๋ฆฌ๊ฐ es6์ ํธ๋์คํ์ผํ๊ธฐ ์์ํ๋ฉด ์ฌ๋๋ค์ es6์ ํ๋ณดํ๊ธฐ ์์ํ ๊ฒ์ ๋๋ค. @benaadams๊ฐ ์ ์ํ ๋๋ก
๋ ๋์๊ฐ '๋ชจ๋ ์์คํ '๊ณผ 'es6 ๊ธฐ๋ฅ'์ ๋ฌธ์ ๋ฅผ ํผ๋ํ ํ์๊ฐ ์์ต๋๋ค. es6์ ํธ๋์คํ์ผํ๊ณ commonjs๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ๋ณ๋๋ก ์๊ฐํ ์ ์์ต๋๋ค.
browserify / commonjs์ ๊ฒฝ์ฐ +1 - ์ฌ๋๋ค์ด ์ํ ๊ฒฝ์ฐ ์ฌ์ ํ ์ ํต์ ์ธ ๋ฐฉ์์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๋ฐฉ์์ผ๋ก browserify๋ก ์ปดํ์ผํ๋ ๊ฒ์ ๊ฐ๋จํฉ๋๋ค. ์ด๊ฒ์ด UMD์ ๋ชฉ์ ์ด๋ฉฐ, AMD๊ฐ ์๊ตฌํ๋(์: require.js), CommonJS๋ ์ฐ๋ฆฌ๊ฐ ์คํ ์ค์ธ ํ๊ฒฝ์ ๋ฐ๋ผ (node โโ+ browserify์ ๊ฐ์) ์ ์ญ ์ฐฝ๊ณผ (์คํฌ๋ฆฝํธ ํ๊ทธ์ ๊ฒฝ์ฐ) ์ฐฝ์ ํ์๋ก ํฉ๋๋ค.
PIXI.js๋ browserify๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋์ ์ํคํ ์ฒ๋ก ์ด๋ํ์ผ๋ฉฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋งค์ฐ ์ ์ฌํ ๋ฐฉ์์ผ๋ก ์ค์ ๋์์ต๋๋ค. ๋ชจ๋ ๊ฒ์ด ์ ์ญ PIXI ๊ฐ์ฒด์ ์ฒจ๋ถ๋ฉ๋๋ค. ์ค์ ์ @kumavis ๊ฐ ๋ ๋ฒ์งธ ๊ฒ์๋ฌผ์์ ์ค๋ช ํ ๊ฒ๊ณผ ๋งค์ฐ ์ ์ฌํฉ๋๋ค.
browserify๋ commonjs ๋ชจ๋ 3D ์์ง์ ํน์ ์๊ตฌ ์ฌํญ์ ๋ค๋ฃจ์ง ์์ต๋๋ค. ์ฆ, ์ฌ์ฉํ ์ ์๋ค๋ ์๋ฏธ๋ ์๋์ง๋ง ๋ ํฐ ํผ์ฆ์ ํ ์กฐ๊ฐ์ผ๋ก ๋ณด์์ผ ํฉ๋๋ค.
๊ตฌ์ฑ ์์๋ ์ธ์คํด์ค ์์ฑ์ ๋ํ ๋ฉํ ์ ๋ณด๋ฅผ ๋ด๋ณด๋ด์ผ ํ๋ฏ๋ก ์์ ๊ฐ์ฒด ๋ฐ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ์ฐ๊ฒฐ์ ๋ํ ๋ก๋๊ฐ ์์ ์ ์์ต๋๋ค. ์ด๋ฌํ ์ํคํ ์ฒ๋ฅผ ์ฌ์ฉํ๋ฉด ์ฒ์ ์ฌ์ฉํ ๋ ์ฝ์ด ์ธ๋ถ ๊ตฌ์ฑ ์์ ์ฝ๋๋ ๋ก๋ํ๋ ๊ฒ์ด ์์์ ์ธ ๋ฌธ์ ์ ๋๋ค. #6464 ๋ฐ #6557์์ ์ด ์ฃผ์ ์ ๋ํด ๋ธ๋ ์ธ์คํ ๋ฐํ์ต๋๋ค.
+1
+1
ํ์ด๋ธ๋ฆฌ๋ ์๋ฃจ์ ์ผ๋ก์ ์๊ตฌ์ฌํญ์ ์ฃผ์์ผ๋ก ์ถ๊ฐํ๋ ๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. ๋๋ browserfy๊ฐ ์ด๋ฏธ ๋ง์ ์ํ๊ณ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ง๋ง, ์๋ฌด ๊ฒ๋ ๋ณ๊ฒฝํ ํ์๊ฐ ์๊ธฐ ๋๋ฌธ์ ๋น ๋ฅด๊ฒ ๋ณํ์ ๊ตฌํํ๊ธฐ ์ํด ์ฌ๊ธฐ์ ๋จ๊ฒจ๋๊ณ ์ถ์์ต๋๋ค. ๋ชจ๋ ํ์ผ ์์ ์ฃผ์์ ์ถ๊ฐํ๊ธฐ๋ง ํ๋ฉด ๋ฉ๋๋ค.
๊ฐ๋ฐ์๋ @requires
์ ๋ณด์ gulp ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ฌ ์์ ๋ง์ min.js ํ์ผ์ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
์๋ ํ์ธ์, ์ ๋ ์ต๊ทผ์ ๊นจ๋ํ๊ณ ๊ตฌ์กฐํ๋ ๋ฐฉ์์ผ๋ก ์์ฒด ์ข ์์ฑ์ ๊ฐ์ง ์์์ ๋ฆฌ์์ค๋ฅผ ๋ก๋ํด์ผ ํ๋ ๋น์ทํ ํ์์ฑ์ด ์์๊ณ ๋ชจ๋ ์ ํ์ ๋ฆฌ์์ค์ ๋ํด require.js ํ๋ฌ๊ทธ์ธ์ ์์ฑํ๋ ์๋ฃจ์ ์ ์๊ฐํด ๋์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ผ๋ก ๋๋ require.js ์์กด์ฑ ํด๊ฒฐ์ด ๋ฆฌ์์ค๋ฅผ ์ ์ ํ๊ฒ ๋ค์ด๋ก๋ํ๊ณ ์บ์ฑํ๋๋ก ํฉ๋๋ค.... ๋์์ ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ค์ํ ํ๋ก์ ํธ์์ ์ฌ์ฉํ ์ ์๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฆฌ์์ค '๋ฒ๋ค'์ ๋ง๋ญ๋๋ค.
๊ด์ฌ์ด ์์ผ์๋ฉด https://github.com/wavesoft/three-bundles ์์ ํ๋ก์ ํธ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
(์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ์์ ๋ ๊ณง ์ ๊ณต๋ ์์ ์
๋๋ค)
์์ผ๋ก๋ require.js ์ตํฐ๋ง์ด์ ๊ฐ ๋ฆฌ์์ค๋ฅผ ํจ์ฌ ๋ ๊ฐ๊ฒฐํ ํ์์ผ๋ก ์ปดํ์ผํ ์ ์๋๋ก ์ด๋ฌํ ํ๋ฌ๊ทธ์ธ์ ์ต์ ํ ๋จ๊ณ๋ฅผ ํฌํจํ ๊ณํ์ ๋๋ค.
https://twitter.com/defunctzombie/status/682279526454329344 ์ด ๋ํ๋ฅผ ๋ณด๋ฉด es6 ๋ชจ๋์ด ๊ฐ๊น์ด ์ฅ๋์ ๊ตฌํ๋ ๊ฒ ๊ฐ์ง ์์ต๋๋ค. ๋ช ์ฌํด์ผ ํ ๊ฒ์ด ์์ต๋๋ค.
๋๋ commonjs ๋ชจ๋๊ณผ browserify๋ก ๋ช ๊ฐ์ง ํ๋กํ ํ์ ์ ๋ง๋ค์์ต๋๋ค.
๋ด ์ต์ข
๋ธ๋ผ์ฐ์ ํ๋ ๋ฒ๋ค์ src
ํด๋์ ๋ชจ๋ ๋จ์ผ ํ์ผ์ ํฌํจํ๋ฉฐ ๊ฒฐ๊ณผ์ ์ผ๋ก 962K
ํ์ผ ํฌ๊ธฐ๊ฐ ๋ฉ๋๋ค( ์๋์ ํ์๋์ง ์์ ๋ฒ์ 885K
๊ณผ ๋น๊ต).
cloth
์์ ์ ๋์ ๋น๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
580K
(~44% ๋ ์์)431K
์ถ์(~8% ๋ ์์)๋ฒ๋ค ํฌ๊ธฐ ๋ถ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. http://output.jsbin.com/yogoxawozu. ๋ ๋๋ฌ๋ ๋ฒ๋ค์ 40%๋ฅผ ์ฌ์ฉํ๊ณ ๊ทธ ์ค 10%๋ ์ ฐ์ด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฌ์ฉํฉ๋๋ค.
๋ค์๊ณผ ๊ฐ์ด ๋ฒ๋ค์ ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
instance of
๊ฒ์ฌ ์ ๊ฑฐ - ์ฌ์ฉ๋์ง ์๋ ๊ฒฝ์ฐ์๋ ๋ช
์์ ์ผ๋ก ์ฐธ์กฐํ๋ ๋ชจ๋์ด ํ์ํฉ๋๋ค. ์ผ๋ถ ํด๋์ค์๋ ์ด๋ฏธ type
๊ฐ ์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฒด์์ ์ด๊ฒ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.glslify
๋ ๋ช ๋ฒ ๊ฐ์ ธ์๊ณ ํ์คํ ๋์์ด ๋ ์ ์์ต๋๋ค. ์ด์์ ์ผ๋ก ์
ฐ์ด๋๊ฐ ํ์ํ ๊ฐ ๊ตฌ์ฑ ์์๋ ์
ฐ์ด๋์ ๋ช
์์ ์ผ๋ก ์์กดํด์ผ ํฉ๋๋ค.๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๊ณ ์ฝ๋๋ฅผ ํ์ธํ ์ ์์ต๋๋ค.
git clone --depth 1 --branch commonjs https://github.com/anvaka/three.js.git
cd three.js
npm i
# build backward compatible three.js library from commonjs modules.
# The output will be save into `build/three.min.js`. I'm using `.min.js` just
# to quickly verify examples. The actual file is not minified.
npm run build
# build cloth example
# the output is saved into ./examples/cjs/webgl_animation_cloth.bundle.js
npm run demo
es6 ๋ชจ๋์ด ๊ฐ๊น์ด ์ฅ๋์ ๊ตฌํ๋ ๊ฒ ๊ฐ์ง ์์ต๋๋ค. ๋ช ์ฌํด์ผ ํ ๊ฒ์ด ์์ต๋๋ค.
๊ทธ๊ฒ์ ์ฌ์ค์ด์ง๋ง CommonJS ๋ชจ๋ ์ง์์ ๋ธ๋ผ์ฐ์ ์์ _์ ๋_ ๊ตฌํ๋์ง ์์ ๊ฒ์ด๋ผ๋ ์ ์ ๊นจ๋ซ๋ ๊ฒ๋ ์ค์ํฉ๋๋ค. ๋ฐ๋ผ์ ์ ํ์
D3์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋ฏธ CommonJS ๋ชจ๋์ด ํ ์ ์๋ ๋ชจ๋ ๊ฒ์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ES6 ๋ชจ๋์ ์ฑํํ๊ณ ์์ต๋๋ค(Three.js์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์๋ ์ค์ ๋ก ๋ฌธ์ ๊ฐ ๋์ง ์๋ Node.js์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์คํ ์ ์ธ). ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ ์์ ๋น๋๊ฐ ์์ฑ๋ฉ๋๋ค.
๋๋ https://github.com/rollup/three-jsnext ์์ ์ฝ๊ฐ์ ์คํ์ ํ๊ณ ํ๋ก๋์ ์ค๋น๊ฐ ๋์ง๋ ์์์ง๋ง(์์ ๋ฅผ ํฌํ ํ๋ ๋ฐ ์กฐ๊ธ ๋ ์๊ฐ์ ํ ์ ํด์ผ ํฉ๋๋ค!) ์์ฑํ๋ UMD ๋น๋๋ ์ค์ ๋ก _์์_ ํ์ฌ ๋น๋๋ณด๋ค
es6 ๋ชจ๋๊ณผ ๋ค๋ฅธ ์์คํ
์ ๋ํ ๋ฉ๋ชจ์ ๋์ํฉ๋๋ค. ์ฌ๋ถ ๋๋
๊ทธ๊ฒ๋ค์ es ํ์ค์ด ์๋๋ผ ์ปค๋ฎค๋ํฐ ํ์ค์
๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ทธ๋ค์
๋
ธ๋์์ "๊ธฐ๋ณธ์ ์ผ๋ก" ์คํํ ์ ์์ผ๋ฉฐ Babel ํํฌ๋ก ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณด์ผ ์ ์์ต๋๋ค.
๋๋ ๋น์ ์ repo๋ฅผ ๊ณง ๋ฐ๋ผ๊ฐ ๊ฒ์ ๋๋ค.
๋ํ ํฌ๊ธฐ๊ฐ ์๋ค๋ ์ฌ์ค์ ์ด์ ์ ์ธ๊ธํ๋ ๊ฒ์
๋๋ค.
์ด ๋ํ. "THREE.Geometry"๋ "๊ธฐํํ"์ด ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด "a"๋ก ์ถ์๋ฉ๋๋ค.
๋ํ ์ํ ์ธ์คํด์ค์ ๋ํ ํด๊ฒฐ์ฑ
์ ๋ชจ๋ ์ ๊ฑฐํ๋ ๊ฒ์
๋๋ค.
ํจ๊ป. ํ๋์ ๋ชจ๋์ ๋ฌด์์ ๋ฐ๋ผ ๋ค๋ฅด๊ฒ ๊ฐ์ง์ง ์์์ผ ํฉ๋๋ค.
๊ทธ๊ฒ์ ์ฃผ์ด์ก์ง๋ง, ์คํ๋ ค ๊ทธ๊ฒ์ด ํ์๋ก ํ๋ ๊ฒ์ ํ๊ธฐ ์ํด ์ ๊ณต๋ ์ผ์ ์ฐ๊ธฐํ๋ค.
ํ ๊ฒ. ๊ทธ๋ฐ ๋ค์ ์ธ์คํด์ค ๋๋ ์ ํ ๊ฒ์ฌ๊ฐ ์์ต๋๋ค.
2016๋
1์ 1์ผ ์คํ 8์ 23๋ถ์ "Rich Harris" notification@github.com์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
es6 ๋ชจ๋์ด ๊ฐ๊น์ด ์์ผ ๋ด์ ๊ตฌํ๋ ๊ฒ ๊ฐ์ง ์์ต๋๋ค.
๋ฏธ๋. ๋ช ์ฌํด์ผ ํ ๊ฒ์ด ์์ต๋๋ค.์ฌ์ค์ด์ง๋ง CommonJS ๋ชจ๋์ด
์ง์์ ๋ธ๋ผ์ฐ์ ์์ _์ ๋_ ๊ตฌํ๋์ง ์์ผ๋ฏ๋ก ์ ํ์
- ๋น ๋ชจ๋์ ์ํคํ ์ฒ ๋ฐ ์์ ๋น๋๋ก ๊ณ์
์ง๊ธ๊น์ง Three.js๋ฅผ ์ ์ฌ์ฉํ์ง๋ง ์ฑ์ฅ์ ์ ๋ ์ฅ์น ์ญํ ์ ํ๋ ์์คํ
์ฅ๊ธฐ์ ์ผ๋ก๋- ์ํ์ ๋ํ ์ฝ๊ฐ์ ์์์๋ฅผ ํฌํจํ๋ CommonJS ๋ชจ๋ ์ฌ์ฉ
์ข ์์ฑ ๋ฐ ๊ฒฐ๊ณผ๋ก ๋ ํฐ ๋น๋ ๋๋- Three.js์ ๊ฐ์ ์ฝ๋๋ฒ ์ด์ค์ ์ ๋ง๋ ES6 ๋ชจ๋ ์ฌ์ฉ
์ฃผ๊ธฐ์ ์ธ ์ข ์์ฑ์ ๊ฐ์ง๋ฉฐ ๊ฒฐ๊ณผ์ ์ผ๋ก ๊ฐ์ฅ ์๊ณ ๊ฐ์ฅ
์ถ์ ๊ฐ๋ฅํ ๋น๋ ๊ฐ๋ฅ. ๊ฒฐ๊ตญ ๋ธ๋ผ์ฐ์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฅผ ์ง์ํฉ๋๋ค.
๋ก๋์ ์์์น ๋ชปํ ๋ฌธ์ ๋ฅผ ์์ฉํ๊ธฐ ์ํด ํ์ํ ๋ณ๊ฒฝ ์ฌํญ
์ฌ์์ ๊ด๋ จ๋ ๋ ธ๋ ฅ์ ๋นํด ์ฌ์ํ ๊ฒ์ผ ๊ฐ๋ฅ์ฑ์ด ํฝ๋๋ค.
CommonJS ์ฝ๋๋ฒ ์ด์ค์์ ์ ๊ทธ๋ ์ด๋.D3์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด๋ฏธ ํ ์ ์๊ธฐ ๋๋ฌธ์ ES6 ๋ชจ๋์ ์ฑํํ๊ณ ์์ต๋๋ค.
CommonJS ๋ชจ๋์ด ํ ์ ์๋ ๋ชจ๋ ๊ฒ(Node.js์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์คํ๋๋ ๊ฒ์ ์ ์ธํ๊ณ ,
Three.js์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์๋ ์ค์ ๋ก ๋ฌธ์ ๊ฐ ๋์ง ์์), ๊ฒฐ๊ณผ์ ์ผ๋ก
๋น๋.๋๋ ์์ ์ฝ๊ฐ์ ์คํ์ ํ๋ค
https://github.com/rollup/three-jsnext ๋ฐ ํ๋ก๋์ ์ด ์๋ ๋์
์ค๋น๋จ(์์ ๋ฑ์ ์ด์ํ๋ ๋ฐ ์กฐ๊ธ ๋ ์๊ฐ์ ํ ์ ํด์ผ ํฉ๋๋ค!) UMD ๋น๋
์์ฑํ๋ ๊ฒ์ ์ค์ ๋ก ํ์ฌ ๋น๋๋ณด๋ค _์์ต๋๋ค_.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/mrdoob/three.js/issues/4776#issuecomment -168363092.
CommonJS๋ ์ฌ์ ํ ์ํ ์ข ์์ฑ์ด ์๋ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ ๋ ํฐ ๋น๋๋ฅผ ์์ฑํฉ๋๊น?
@cecilemuller ์ โ https://github.com/nolanlawson/rollup-comparison์ ์ฐธ์กฐ
es5๋ก ํธ๋์คํ์ผํ๋ ๋ฐ ์ฝ๊ฐ์ ์ค๋ฒํค๋๊ฐ ์์ง๋ง. ํ์ฌ,
๋๋ ์์ฃผ ์กฐ๊ธ ์ถ๊ฐํ๋ babel๊ณผ ํจ๊ป webpack์ ์ฌ์ฉํฉ๋๋ค. ๋ชจ๋๋น ๋น์ฉ์ด ์์ต๋๋ค.
s ํจ์์๋ ๋ํ๋์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ข
์์ฑ์ ์ต์ข
์ ์ผ๋ก ์ ์ธ๋ฉ๋๋ค.
์ ์ ์ธ๋ฑ์ค๊ฐ ์๋ require ์ ์ฌ ํจ์๋ฅผ ํธ์ถํ์ฌ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ค์์ ์ป์ ์ ์์ต๋๋ค.
์๋ '๊ฐ์ ธ์ค๊ธฐ'์์ "var a=f(5)"์ ๊ฐ์ ๊ฒ์ผ๋ก ์ถ์๋์์ต๋๋ค.
"./geometry"์ ๊ธฐํํ;'
์์ฑ๊ธฐ๋ฅผ ์ฌ์ฉํ๋ฉด ์กฐ๊ธ ๋ ์ถ๊ฐ๋์ง๋ง ๋ค์ ๊ตฌ์กฐ๋ ์์ํ์ง ์์ต๋๋ค.
์ฝ๋๋ ๊ณง ๊ทธ๋ ๊ฒ ๋ง์ด ๋ณ๊ฒฝ๋ ๊ฒ์
๋๋ค.
2016๋
1์ 2์ผ ์ค์ 5์ 53๋ถ์ "Rich Harris" notification@github.com์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@cecilemuller https://github.com/cecilemuller ์ โ ์ฐธ์กฐ
https://github.com/nolanlawson/rollup-comparison. CommonJS ๋ชจ๋ ์ฌ์ฉ
๋ชจ๋๋น ๋น์ฉ์ ์ง๋ถํฉ๋๋ค(๊ฐ ๋ชจ๋์ ํจ์๋ก ๋ํ๋์ด์ผ ํฉ๋๋ค.
๋ฒ๋ค ์ ์ฒด์์ ๊ณต์ ๋๋ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ๋ค์ ์ ์ธํด์ผ ํ๋ฏ๋ก
๋ ๋ชจ๋ํ๋ ์ฝ๋๋ฒ ์ด์ค์ ๋ํด ๋ฒ์ ์ ๋ฐ์ต๋๋ค. ๋ฒ๋ค๋น ๋น์ฉ(ํ์ํ
Node.js ํ๊ฒฝ์ ์๋ฎฌ๋ ์ด์ ํ๊ธฐ ์ํด) ๋ฐ ์ถ์ํ ์ ์๋ ๊ฒ๊ณผ ๊ฐ์ ๊ธฐํ ๋น์ฉ
ES6์์ ์ถ์ ๊ฐ๋ฅํ ๋ณ์ ์ด๋ฆ์ด ๋ ๊ฐ์ฒด ์์ฑ ์ด๋ฆ
๋ชจ๋. ES6 ๋ชจ๋์ ์ฌ์ฉํ๋ฉด ๋ง ๊ทธ๋๋ก ์ค๋ฒํค๋๊ฐ ์๋ ๋ฒ๋ค๋ง์ด ๊ฐ๋ฅํฉ๋๋ค.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/mrdoob/three.js/issues/4776#issuecomment -168394376.
es5๋ก ํธ๋์คํ์ผํ๋ ๋ฐ ์ฝ๊ฐ์ ์ค๋ฒํค๋๊ฐ ์์ง๋ง
๋ชจ๋ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ค๋ช
ํ๊ธฐ ์ํด import
๋ฐ export
๊ตฌ๋ฌธ๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ Babel ๋๋ ์ด์ ์ ์ฌํ ๊ฒ์ผ๋ก ์ฝ๋ ์์ฒด๋ฅผ ํธ๋์คํ์ผํ ํ์๊ฐ ์์ต๋๋ค. ๋ค๋ฅธ ES6 ๊ธฐ๋ฅ(ํด๋์ค ๋ฐ ๋ธ๋ก ๋ฒ์ ์ง์ ๋ฐ ํ์ดํ ๊ธฐ๋ฅ ๋ฑ)์ ์ถ๊ฐํ๊ธฐ ์์ํ ๋๋ง ํธ๋์คํ์ผ์ด ํ์ํ๋ฏ๋ก import
๋ฐ export
์ฌ์ฉ์ ๋ํ ์ค๋ฒํค๋๊ฐ ์์ต๋๋ค. D3์ PouchDB๋ import
์ export
ํ์ง๋ง ๊ทธ ์ธ์๋ Babel์ด ์๋ ES5์ด๊ณ three-jsnext๋ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ํ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ ๊ฐ์ง ์์
๋๋ค.
์ข์์, ์ฐ๋ฆฌ ๋ชจ๋๋ ๊ฐ์ ์๊ฐ์ ํ์ต๋๋ค. lodash์ ๊ฐ์ ์ด์ผ๊ธฐ๊ฐ ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
์ฝ๋๋ฅผ ๊ฑฐ์ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ชจ๋ํํ ์ ์๋ ๋ชจ๋ ๊ตฌ์ฑ ์์ _foo_(์: three-vector2)์ ๋ํด _three-foo_ ํจํค์ง๋ฅผ ์์ฑํ์ฌ ์ํฅ ์์ด ์ด ์ ์ฅ์๋ก ๊ฐ์ ธ์ฌ ์ ์๋๋ก ์ ์ํฉ๋๋ค.
npm์ ๊ฒ์ํ๋ ์ฌ๋๋ค์ @mrdoob ์ด ์ด ํ๋ฅญํ ์ํํธ์จ์ด์ ์ ์์์ด๊ธฐ ๋๋ฌธ์ ์ ํ๋ ์ดํ๊ณ ๊ณต๋ ์์ ํด์ผ ํฉ๋๋ค. ๋ฐ๋ผ์ ๊ทธ๊ฐ _babel_ ์์ฑ์์ ๊ฐ์ ๋ชจ๋ ํจํค์ง๋ฅผ ๋ค์ ์ค์ ์ง์คํํ๋ ค๋ฉด(๊ฐ์ ํด๋์ ์๋ ๋ชจ๋ ํต์ฌ ํจํค์ง๋ฅผ ์๋ฏธํฉ๋๋ค), ๊ฒ์์๋ ๊ฐ์ ธ์จ npm ๋ค์์คํ์ด์ค์ ๋ํ ์ ์ด ๊ถํ์ ๊ทธ์๊ฒ ๋ถ์ฌํด์ผ ํฉ๋๋ค.
๋ด๊ฐ ํ์ํ ํจํค์ง๋ฅผ ์ํด ๊ทธ๋ ๊ฒ ํ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค. ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง ๋ด ์๋ค.
ํ๋์ ํฐ ์ปค๋ฎค๋ํฐ๊ฐ ์์ต๋๋ค. :)
๋๋ ์๋ฌด๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ค์๊ณผ ๊ฐ์ด ์์ ํ ๋ถ๋ฆฌํ๋๋ก ์ ์ํ ๊ฒ์ ๋ณด์ง ๋ชปํ์ต๋๋ค.
๋ก๋ค์ฌ. Lodash๋ ์ผ๋ฐ ์ด๋ฆ์ ์ ํธ๋ฆฌํฐ ๋ชจ์์
๋๋ค. ๋ ํ์
ํ ์กฐ๊ฐ ์ง์ด์ ์ฌ์ฉํฉ๋๋ค. Threejs๋ ๊ทธ๋ ์ง ์์ต๋๋ค. ๊ทธ๊ฒ์ ํฌ๊ด์ ์ธ
๋๋ถ๋ถ์ ๋๋จธ์ง๊ฐ ์์ผ๋ฉด ์ธ๋ชจ๊ฐ ์์ต๋๋ค. ๋ช ์กฐ๊ฐ ์๋ค
ํน์ ์ฌ๋ฃ ์ ํ๊ณผ ๊ฐ์ด ๋ถ๋ฆฌํ ์ ์๋
๊ธฐํํ ์์ฑ๊ธฐ, ๊ทธ๋ฌ๋ ๊ทธ๊ฒ๋ค์ ํ์ฐ์ ์ผ๋ก ๋งค์ฐ ๋ฐ์ ํ๊ฒ ๋ ๊ฒ์
๋๋ค
ํต์ฌ์ ๋ฌถ์ฌ ์ ํํ ๋ฒ์ ์ผ์น๊ฐ ํ์ํ ์ ์์ต๋๋ค. ๊ทธ๋ค์
ํฌ๊ธฐ๊ฐ ์ปค์ง๋ฉด ์ธก์ ๊ฐ๋ฅํ ์ด๋์ด ์๋ ์ ์ง ๊ด๋ฆฌ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค.
mr doob์ด ๊ทธ๋ฐ ์ฑ๊ฒฉ์ ๋ถํ ์ ์น์ธํด์ผ ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
threejs-*๋ฅผ ์ฃผ์ฅํ๋ ๊ณต์ ๋ฉ์ธํ
์ด๋๋ฅผ ์ ์ธํ ๋ชจ๋ ์ฌ๋์๊ฒ ์ ํฉํฉ๋๋ค.
ํจํค์ง.
์์ ๋ด์ฉ์ ๊ด๊ณ์์ด ๋ชจ๋์์ผ๋ก ์๋ํ๋๋ก ํ๋ ๊ฒ์ด ํ๋ช
ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
๋ฌด์๋ณด๋ค ํ๊ฒฝ. ์ด๊ฒ์ผ๋ก ์ฌ๋ฌ ํ๋ก์ ํธ๊ฐ์์์ต๋๋ค
๋ชฉํ๋ฅผ ๋ฌ์ฑํ์ง๋ง ๋ชจ๋ ์คํจํ ๊ฒ ๊ฐ์ต๋๋ค.
2016๋
3์ 6์ผ ์ค์ 11์ 39๋ถ์ "Gianluca Casati" notification@github.com์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์ข์์, ์ฐ๋ฆฌ ๋ชจ๋๋ ๊ฐ์ ์๊ฐ์ ํ์ต๋๋ค. ์ ๊ฐ์ ์คํ ๋ฆฌ๊ฐ ์์ผ๋ฉด ์ข์ํ ๋ฐ
๋ก๋ค์ฌ.๋ชจ๋ ๊ตฌ์ฑ ์์ _foo_์ ๋ํด _three-foo_ ํจํค์ง๋ฅผ ๋ง๋ค ๊ฒ์ ์ ์ํฉ๋๋ค(
๊ฑฐ์ ๋ณ๊ฒฝ ์์ด ๋ชจ๋ํํ ์ ์๋ instance three-vector2)
์ฝ๋์ด๋ฏ๋ก ์ํฅ ์์ด ์ด ๋ฆฌํฌ์งํ ๋ฆฌ๋ก ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.npm์ ๊ฒ์ํ๋ ์ฌ๋๋ค์ ์ ๋๊ณ @mrdoob๊ณผ ํ๋ ฅํด์ผ ํฉ๋๋ค.
https://github.com/mrdoob ์ด ์๋ํ ์ํ์ ์ ์์์ด๊ธฐ ๋๋ฌธ์
๋ฐ๋ผ์ ๊ทธ๊ฐ ๋ค์๊ณผ ๊ฐ์ด ๋ชจ๋ ํจํค์ง๋ฅผ ๋ค์ ์ค์ ์ง์คํํ๋ ค๋ ๊ฒฝ์ฐ
_babel_, ๊ฒ์์๋ ๊ฐ์ ธ์จ npm ๋ค์์คํ์ด์ค์ ๋ํ ์ ์ด ๊ถํ์ ๊ทธ์๊ฒ ๋ถ์ฌํด์ผ ํฉ๋๋ค.๋ด๊ฐ ํ์ํ ํจํค์ง๋ฅผ ์ํด ๊ทธ๋ ๊ฒ ํ๋ ค๊ณ ๋ ธ๋ ฅํ ๊ฒ์ ๋๋ค. ๋ฌด์จ ์ผ์ด ์ผ์ด๋๋์ง ๋ด ์๋ค.
ํ๋์ ํฐ ์ปค๋ฎค๋ํฐ๊ฐ ์์ต๋๋ค. :)
โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/mrdoob/three.js/issues/4776#issuecomment -192970867.
@mattdesl : ์๋ฅผ ๋ค์ด 3-shader-fxaa ๋ THREE.Vector2์ three-effectcomposer๋ฅผ ์ ์ธํ๊ณ ์์์ ์ ์ํ ๋ชจ๋์ ์ ๊ทผ ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ์ ๋ง ๊ฐ๋ฒผ์ด ๋น๋๊ฐ ๋ ๊ฒ์ ๋๋ค.
@HMUDesign : ๊ทํ์ ์์ฌ์ ์ดํดํ์ง๋ง ์ฌ์ ํ ์ข์ ์ ๊ทผ ๋ฐฉ์์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์๋ํ๊ณ ์ถ์ง๋ง GitHub URL์ npm ํจํค์ง๋ฅผ ์ฌ์ฉํ์ฌ ์ฑ์ค๋ฌ์ด ๋ ์ง์คํธ๋ฆฌ ์ ๊ฒ์ํ์ง ์๊ณ ์กฐ์ธ์ ๋ค์ ๊ฒ์ ๋๋ค.
Vector2, Vector3, Quaternion ๋ฑ์ ์์กดํ๋ TrackballControls ์์์ ์์ํ์ฌ ์๋ํด ๋ณด์์ต๋๋ค.
์ํ dep๊ฐ ์์ต๋๋ค(์: Matrix4๋ Vector3์ ์ข ์๋๊ณ ๊ทธ ๋ฐ๋๋ ๋ง์ฐฌ๊ฐ์ง). lib(์ฆ, threejs)๊ฐ ๋ชจ๋๋ฆฌ์์ผ๋ก ์์๋ ๊ฒฝ์ฐ์๋ ์ํํ ์ ์์ต๋๋ค.
์ฅ์ ์ด ์๋ ๋ชจ๋ ํจํด์ ์ด๋ ๊ฒ ์ค์ํ ํ๋ก์ ํธ์ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋ค๋ ๊ฒ์ด ์ํ๊น์ต๋๋ค.
๋๋ svg.js, vvvvjs, ์ฌ์ง์ด x3dom๊ณผ ๊ฐ์ ๋ค๋ฅธ ํ๋ก์ ํธ๋ก๋ ์๋ํ์ง๋ง, ์ ์๋ ์ด ๊ธ์ง์ ์ธ ์ ํ์ ๋ํด ์์ ํ ํ์ ํ์ง ๋ชปํ๊ณ ์์ต๋๋ค.
์คํธ์ ๋ํด ๋ฏธ์ํ์ง๋ง ์ฌ์ ์ ์๋ํ๊ณ ์ถ์์ต๋๋ค. ๊ทธ๋ฐ๋ฐ ๋๋ three-trackballcontrols repo๋ก ์์ํ์ต๋๋ค.
@fibo ES6 ๋ชจ๋ ํจํด์๋
๋๋ ๋น์ ์ด ์ด๊ฒ์ ๋ณด์์ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค. https://github.com/kamicane/three-commonjsify ๊ทธ๋ commonJS์์ ๊ทธ๊ฒ์ ํด๊ฒฐํ์ต๋๋ค.
@drcmda ์ ๋ง ์ฌ๋ฏธ
๋ชจ๋์ ์ํคํ ์ฒ๋ก ์ด๋ํ๋ ๊ฒฝ์ฐ +1.
+1
+1
@drcmda ๋ง์ต๋๋ค. ES6 ๋ชจ๋์๋ ์ํ ์ฐธ์กฐ๋ฅผ ํ์ฉํ๋ ์ด๊ธฐํ ๋จ๊ณ์ ์คํ ๋จ๊ณ๊ฐ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ๋ชจ๋ ์คํ ์ปจํ ์คํธ(๋ชจ๋์ ์ ์ญ ์์ญ)์์ ์ง์ ์ํ ์ข ์์ฑ์ ๊ฐ๊ฒ ๋๋ฉด ๋ฐํ์ ์ค์ ๋ก๋๋ ์ฒซ ๋ฒ์งธ ํญ๋ชฉ์ ์ข ์์ฑ์ ๋ํด ์ ์๋์ง ์์ ๊ฐ์ ๊ฒฝํํ๊ฒ ๋ฉ๋๋ค. ๋ฐํ์ ์คํ ์์๊ฐ ์ค์ํ ๋ค๋ฅธ ์ปจํ ์คํธ ๋ด์์ ์ฐธ์กฐ๊ฐ ์ฌ์ฉ๋๋ ํ ์ํ ์ข ์์ฑ์ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค.
Browserify ๋์ webpack๋ ๊ณ ๋ คํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
@gionkunz ์คํฌ๋์น ๋ณ์๋ฅผ ์์ฑํ๊ธฐ ์ํ ํด๋ก์ ๊ฐ ์๋ ํจํด์ ์ด๊ธฐํ ๋จ๊ณ bc์์ ์ํ ์ฐธ์กฐ๊ฐ ์์ต๋๋ค.
Webpack 2์ ๋ฒ ํ ๋ฒ์ ์ด ๋ฐฉ๊ธ ์ถ์๋์์ต๋๋ค(https://twitter.com/TheLarkInn/status/747955723003322368/photo/1). ๋ฐ๋ผ์ es6 ๋ชจ๋์ ๋ฒ๋ค๋ก ์ ๊ณต๋ ๋ ํธ๋ฆฌ ์์ดํน์ ์ด์ ์ ์ป์ ์๋ ์์ต๋๋ค.
@mrdoob
๋ ์ต๊ทผ์ ๊ณต์ ์ฑ๋ช
์ด ๋์์ต๋๊น? ๋ง์ ์ฌ๋๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ฐ๋ฆฌ๋ ์ค๋ ์ ์ ES5์ glue-concats๋ฅผ ํฌ๊ธฐํ์ผ๋ฉฐ ํ๋ ๋น๋ ์์คํ
์์ THREE๊ฐ ์ผ๋ง๋ ๋ง์ด ๋จ์ด์ง๋์ง ๋งค์ฐ ๋์ฉ๋๋ค. ์ฐ๋ฆฌ๋ ํ ์ ์๋ ๊ฒ์ 10% ์ ๋๋ฅผ ์ฌ์ฉํ์ง๋ง ์ฐ๋ฆฌ๊ฐ ์ ๊ณตํ๋ ๊ฐ์ฅ ํฐ ์์กด์ฑ์
๋๋ค.
์ด๊ฒ์ ์๋ง๋ ๊ฐ์ธ์ ์ผ๋ก Github์์ ๊ฐ์ฅ ์ข์ํ๋ ํ๋ก์ ํธ์ผ ๊ฒ์ ๋๋ค. ์ฐ์ ์์๊ฐ ๋ค์ ๊ณ ๋ ค๋๊ธฐ๋ฅผ ์ง์ฌ์ผ๋ก ๋ฐ๋๋๋ค.
ํ , ๋ธ๋ผ์ฐ์ ์ง์์ ๋ํด ์์ธํ ์๊ณ ์ถ์ต๋๋ค. ์ด๋ค ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ํ๊ณ ์ด๋ค ๋ธ๋ผ์ฐ์ ๊ฐ ์๋ํ์ง ์์ต๋๋ค. ๊ทธ๋ ์ง ์์ ๋ธ๋ผ์ฐ์ ์ ๊ฒฝ์ฐ ํด๊ฒฐ ๋ฐฉ๋ฒ์ ๋ฌด์์ด๋ฉฐ ์ฑ๋ฅ ์ ํ๋ ๋ฌด์์ ๋๊น?
์ฌ์ค, ๋ธ๋ผ์ฐ์ ์ง์์ ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค(์ง๊ธ๋ณด๋ค ํจ์ฌ ๋ํฉ๋๋ค). ๋น๋ ์์คํ ์ ES6 ์ฝ๋๋ฅผ ๊ฐ์ ธ์์ es5๋ก ๋ณํํฉ๋๋ค(๋๋ก๋ ์๋ ES5๋ณด๋ค ๊ณต๊ฐ์ ๋ ์ฐจ์งํจ). ํน์ ์ข ๋ฅ์ ํธ๋์คํ์ผ๋ ๊ฒ๋ค์ ๊ฒฐ๊ตญ ์ปค์ง๊ฒ ๋์ง๋ง(์ฃผ๋ก: ์ ๋๋ ์ดํฐ ๋ฐ ๋น๋๊ธฐ ํจ์), ๊ทธ๊ฒ๋ค์ ํผํ๋ค๋ฉด ๊ทธ๋ฌํ ๋ถ์ด์ต์ ์์ ๊ฒ์ ๋๋ค.
@drcmda๊ฐ ์ธ๊ธํ๋ฏ์ด ๋น๋ ์์คํ
์ ์ฌ์ ํ โโ๋ชจ๋๋ฆฌ์ ์ถ๋ ฅ์ ์์ฑํ์ง๋ง(ํด๋น ์ถ๋ ฅ์ ํฌํจ๋ ๋ด์ฉ์ ์ ํํ๊ฒ ์ฌ์ฉ์ ์ ์ํ๋ ๊ฒ์ ๋งค์ฐ ์ฝ์ต๋๋ค) ๊ฐ๋ณ ๋ชจ๋๋ ์์ฒด ํ๋ก์ ํธ์ ํฌํจ๋ ์ ์์ผ๋ฏ๋ก ๋ค์๊ณผ ๊ฐ์ ๋ถ๋ถ๋ง ์ฌ์ฉํฉ๋๋ค. ์ฐ๋ฆฌ๋ ํ์ํฉ๋๋ค. ์ต๋ํ ํ์ฉํ๋ ค๋ฉด
์ฆ, ์ํธ ์ข
์์ฑ์ ์กฐ์ ํด์ผ ํ์ง๋ง ์๊ฐ์ด ์ง๋จ์ ๋ฐ๋ผ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ํ๋ ์ฃผ์ ๊ธฐ๋ฅ์ ๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ๋ก ๋ชจ๋ํํ๋ ๊ฒ์
๋๋ค. ๊ทํ์ ๊ด์ ์์ ๋ณด๋ฉด ํ๋กํ ํ์
๋ณด๋ค ํด๋์ค๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค(๊ทธ๋ค์ ์ฌ์ ํ โโํ๋ ์๋์์ ํ๋กํ ํ์
์ ์ฌ์ฉํ๋ฏ๋ก ์ฌ์ ํ
ํ์์ ๋ฐ๋ผ ์๋ง).
๋ช ๊ฐ์ง ๋น๋ ์์คํ ์ด ์์ต๋๋ค. ๋ด ํฌํ๋ webpack(ํธ๋์คํ์ผ์ ์ํด babel์ ์ฌ์ฉํจ)์ด ๋ ๊ฒ์ ๋๋ค. babel์ ์ฌ์ฉํ๋ฉด ์ฌ์ฉ์ ์ ์ ๋ก๋๋ฅผ ์ ์ํ ์ ์์ผ๋ฏ๋ก ์ ฐ์ด๋์ฉ์ผ๋ก ๊ฐ๋ฐํ ์ฒญํน ์์คํ ์ #include ํ์ฅ์ ์ฌ์ฉํ๋ ์ค์ glsl ์ฝ๋๋ก ์ถ์๋ ์ ์์ต๋๋ค(์ ๋ ์ค์ ๋ก ์ด ๋ฐฉ์์ผ๋ก ์ ฐ์ด๋๋ฅผ ์ํํ๋ฉฐ ํ๋ก์ ํธ์ ๊ธฐ์ฌํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค). ์ด๊ฒ์ ์์คํ ๊ณผ ๋์ผํ ์ด์ (์ฝ๋ ์ค๋ณต ์์)์ ์ป์ง๋ง ์ฌ์ฉ์ด ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
๋ชจ๋ํ ํ๋ก์ ํธ์ ์ฐธ์ฌํ๊ณ ์ถ์ง๋ง ๊ทํ์ ์ง์(๋ฐ ์ง์ ๊ฐ๋ฅ์ฑ) ์์ด๋ ์ด๊ฒ์ด ์ฑ๊ณตํ ์ ์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ์ฐ๋ฆฌ ์ค ๋ง์ ์ฌ๋๋ค์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ์๊ณ ์์ง๋ง ์ฌ๋ฌ๋ถ๋งํผ ๋ด๋ถ์ ์ผ๋ก ์ด๋ป๊ฒ ์๋ํ๋์ง ์๋ ์ฌ๋์ ์๋ฌด๋ ์์ต๋๋ค.
ํน์ ์ข ๋ฅ์ ํธ๋์คํ์ผ๋ ๊ฒ๋ค์ ๊ฒฐ๊ตญ ์ปค์ง๊ฒ ๋์ง๋ง(์ฃผ๋ก: ์ ๋๋ ์ดํฐ ๋ฐ ๋น๋๊ธฐ ํจ์), ๊ทธ๊ฒ๋ค์ ํผํ๋ค๋ฉด ๊ทธ๋ฌํ ๋ถ์ด์ต์ ์์ ๊ฒ์ ๋๋ค.
์ผ๋ง๋ ์ปค?
๋ํ ์ฑ๋ฅ ํจ๋ํฐ์ ๋ํด ์ด์ผ๊ธฐํ์ง ์์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๊น?
๋ด๊ฐ ๋ณผ ์ ์๋ ํ, ES6 Imports๋ ์ฌ์ ํ ์ด๋ค ๋ธ๋ผ์ฐ์ ์์๋ ์ง์๋์ง ์์ผ๋ฏ๋ก ์ด ๋ชจ๋ ๋ฆฌํฉํฐ๋ ์ฃผ๋ก ๋น๋ ์์คํ ์ฉ์ด๊ฒ ์ฃ ?
rollupjs์ ๊ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ป์ ์ ์๋ ์ด์ ์ ์์ง ๋ง์ญ์์ค. ๊ทธ๋ฌ๋ฉด ์ฌ์ฉ์๊ฐ ์ฌ์ฉํ์ง ์๋ ๋ชจ๋ ๋ด๋ณด๋ด๊ธฐ๊ฐ ์๋์ผ๋ก ์ ์ธ๋ฉ๋๋ค. (JSPM์ ๊ธฐ๋ณธ๊ฐ)
๋ค์์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์๋ง ํ์ํ babel-polyfil ํจํค์ง
์ ๋๋ ์ดํฐ(์ด ํ๋ก์ ํธ์์๋ ์ดํด๊ฐ ๋์ง ์์ ์๋ ์์) ๋๋ ๋น๋๊ธฐ
๊ธฐ๋ฅ(ํ๋ก์ ํธ์์ ๋ง์ด ๋ณ๊ฒฝ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
๋ ์ค ํ๋), ์ต์ข
๋น๋์ ์ฝ 50k๋ฅผ ์ถ๊ฐํฉ๋๋ค. ๊ทธ๋ฌ๋ ๋ค์ ๋งํ์ง๋ง ์ด๊ฒ์ ์ ํ ์ฌํญ์
๋๋ค.
์ฑ๋ฅ์ ๊ดํด์๋ ์ ํํ ์ด๋ค ๊ธฐ๋ฅ์ธ์ง์ ๋ฌ๋ ค ์์ต๋๋ค.
์ฌ์ฉ. ์๋ฅผ ๋ค์ด ํ์ดํ ๊ธฐ๋ฅ์
๊ธฐ๋ณธ ๋ฐ์ธ๋ฉ, ํด๋์ค๋ ์์ฑํ๋ ๋ฐ ์ฝ๊ฐ ๋๋ฆฌ์ง๋ง
์ธ์คํด์คํ ์๊ฐ์ ๋์ผํฉ๋๋ค. https://kpdecker.github.io/six-speed/
ES6 ๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ๋ ๋ธ๋ผ์ฐ์ ์์ ์ง์๋์ง ์์ง๋ง
๋น๋ ์์คํ
์ ํตํด ๋ฌธ์ ๊ฐ ๋์ง ์์ต๋๋ค. ์ ํ ์ถ๋ ฅ์
ํ์ฌ ๊ทธ๋๋ก ์ฌ์ฉํ ์ ์์ง๋ง(์ด์ ๋ฒ์ ๊ณผ๋ ํธํ ๊ฐ๋ฅ)
๋น๋ ์์คํ
์ ํตํฉํ ์ ์๋๋ก ํ๊ณ
์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ๋ด๋ถ ๊ตฌ์ฑ ์์.
์ฃผ๋ชฉํด์ผ ํ ๋ ๋ค๋ฅธ ์ฌํญ์ ์ต์ข
๋น๋ ํฌ๊ธฐ์
๋๋ค. ํ์ฌ ๊ธฐํํ๊ณผ ๊ฐ์ ๊ฒ์,
Material, Mesh ๋ฑ์ THREE ๋ค์์คํ์ด์ค์ ์ผ๋ถ์
๋๋ค. ์ถ์ํ๋ฉด,
THREE.Geometry, THREE.Material, THREE.Mesh ๋ฑ์ ๋ํ ์ฐธ์กฐ๋
์ํธ. ๋ชจ๋์ ์์คํ
์ ์ฌ์ฉํ๋ฉด ์ด๋ฌํ ๊ฐ ํ์ผ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฉ๋๋ค.
var Geometry = require('./geometry');
๋ํ ์ฐธ์กฐ๊ฐ ์์ต๋๋ค.
๋ณ์ Geometry
๋์ค์. ๊ทธ๋ฐ ๋ค์ minifaciton์์ Geometry
๋ฐ require
๋ ๋ค ๋จ์ผ ๋ฌธ์๋ก ์ ํ๋๋ฉด './geometry'๊ฐ
๋ง์ ๋น์ฉ์ ์ ๊ฐํ ์ ์์ต๋๋ค. ๋
ํจ ์ํ: ์ถ์
๋น๋๋ 511,794๋ฐ์ดํธ์ด๋ฉฐ 2942๊ฐ์ ์ฐธ์กฐ๋ฅผ ํฌํจํฉ๋๋ค.
THREE\.[A-Z][a-zA-Z]+
. ์ด ๋ชจ๋ ๊ฒ์ ํ๋์ ๋ฌธ์๋ก ๋์ฒด
ํ์ผ ํฌ๊ธฐ๊ฐ ๊ฑฐ์ 10% ๊ฐ์ํฉ๋๋ค(464,782๊น์ง). (gzip์ผ๋ก ์์ถ๋
ํฌ๊ธฐ๋ ๊ฐ๊ฐ 117,278 ๋ฐ 110,460์ผ๋ก 6% ๊ฐ์). ๋น๋
์ด๊ฒ์ ๋ ์ค์ด๊ธฐ ์ํด ์กฐ์ ๋ ์ ์์ต๋๋ค.
์ต์ข
๋น๋์์ ์ฌ์ฉํ์ง ์๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ ๋กค์
์ด ๊ธฐ๋ณธ๊ฐ์
๋๋ค.
jspm์ ์ฌ์ฉํ๋ฉด webpack2์ ๊ธฐ๋ณธ๊ฐ์ด ๋ฉ๋๋ค.
์นํฉ์ผ๋ก). ๋ชจ๋ ๊ฒ์ด ๋ชจ๋์์ผ๋ก ์ฐ์ฌ์ง๋ค๋ฉด, ๋๋ ์ด๊ฒ์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
๋์์ด ๋์ง๋ง. ์ด์จ๋ ์ฝ๋๊ฐ ๋ค์์ผ๋ก ํธ๋์คํ์ผ๋ ์ ์๋ ํ
babel, ๋ชจ๋ ๋น๋ ์์คํ
์์ ์ฌ์ฉํ ์ ์์ต๋๋ค(๋ด๊ฐ ์ธ๊ธํ glsl ๋ก๋
before๋ webpack๊ณผ ํจ๊ป ์๋ํ๋๋ก ๋ง๋ค ์๋ ์์ต๋๋ค).
2016๋ 7์ 7์ผ ๋ชฉ์์ผ ์คํ 1์ 28๋ถ์ Mr.doob notification@github.com์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
ํน์ ์ข ๋ฅ์ ํธ๋์คํ์ผ๋ ๊ฒ๋ค์ ๊ฒฐ๊ตญ ์ปค์ง๊ฒ ๋ฉ๋๋ค(์ฃผ๋ก:
์์ฑ๊ธฐ ๋ฐ ๋น๋๊ธฐ ํจ์), ํ์ง๋ง ์ด๋ฅผ ํผํ๋ฉด
๊ทธ ๋ฒ์น.์ผ๋ง๋ ์ปค?
โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ณ GitHub์์ ํ์ธํ์ธ์.
https://github.com/mrdoob/three.js/issues/4776#issuecomment -231197171,
๋๋ ์ค๋ ๋ ์์๊ฑฐ
https://github.com/notifications/unsubscribe/AA71cqAqmgxsUjpvamnI_xyL2wpzeWrdks5qTWGBgaJpZM4B4aA7
.
์ด๊ฒ์ด ๋งค์ฐ ๋์์ด ๋๋์ง ํ์คํ์ง ์์ง๋ง ์ด๊ฒ์ ๋์ผํ ๋ฌธ์ ์ ๊ดํ D3์ ํ ๋ก ์ค๋ ๋์ ๋๋ค: https://github.com/d3/d3/issues/2220. D3 4.0์ ๋ชจ๋์ ๊ด๋ฆฌํ๊ธฐ ์ํด ES6 ๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ๋ฅผ ์ฑํํ์ง๋ง ์ฌ์ ํ ES5๋ก ์์ฑ๋์์ต๋๋ค(https://github.com/d3/d3/issues/2220#issuecomment-111655235).
๋งค์ฐ ํฅ๋ฏธ๋ก์ด @jpweeks!
๊ทธ๋์... ์ด ๊ฐ์ ธ์ค๊ธฐ/๋ด๋ณด๋ด๊ธฐ ์ ๊ทผ ๋ฐฉ์์ผ๋ก... object instanceof THREE.Mesh
์ ๊ฐ์ ํญ๋ชฉ์ ์ด๋ป๊ฒ ์๊ฒผ์ต๋๊น?
@mrdoob
import/export
๋ ๋ชจ๋์ด ์ ์ธ๋๊ณ ์๊ตฌ๋๋ ๋ฐฉ์์
๋๋ค. ๋ชจ๋ ๋ด์ ์ ์๋ ์ฝ๋์ ์ํฅ์ ๋ฏธ์น๊ฑฐ๋ ๋ณ๊ฒฝํ์ง ์์ต๋๋ค.
src/๊ฐ์ฒด/Mesh.js
// Mesh class, stays the same as today (except the export part)
var Mesh = function ( geometry, material ) {
// ...
}
export default Mesh
src/Three.js
// Library entry point, exports all files using som bundling tech
// In a "THREE" namespace for browsers
// As import three from 'three' in node
import Mesh from './objects/Mesh'
export {Mesh} // All three objects, such as Geometry, Material etc..
์ ํ๋ฆฌ์ผ์ด์ .js
// In node
import {Mesh} from 'three'
var mesh = new Mesh(geo, mat)
console.log(mesh instanceof Mesh) // true
ํด๋ผ์ด์ธํธ.js
// In a browser
var mesh = new THREE.Mesh(geo, mat)
console.log(mesh instanceof THREE.Mesh) // true
๋งค์ฐ ๋์์ด ๋ฉ๋๋ค @GGAlanSmithee! ๊ฐ์ฌ ํด์!
์ ๋ ์๊ฐ์ ์ธ ์ฌ๋์ด๋ฏ๋ก ์์ฌ ์ฝ๋ ์์ ๊ฐ ํฐ ํ ์คํธ ๋ฉ์ด๋ฆฌ๋ณด๋ค ๋ ์ค๋๋ ฅ์ด ์์ต๋๋ค ๐
๋ง์์, ๊ทธ๋์ ์ฝ๊ฐ์ ๋ฆฌํฉํ ๋ง์ด ํ์ํ ๊ฒ์ ๋๋ค...
ํด๋ก์ ์ปดํ์ผ๋ฌ๊ฐ ์ด๊ฒ์ ์ง์ํ ๊ณํ์ธ์ง ์๋ ์ฌ๋์ด ์์ต๋๊น?
๋ง์์, ๊ทธ๋์ ์ฝ๊ฐ์ ๋ฆฌํฉํ ๋ง์ด ํ์ํ ๊ฒ์ ๋๋ค...
๋น์ ์ ์ป์๋ค! ์ด ์ค๋ ๋๊ฐ ์ง๋ ๋ฉฐ์น ๋์ ํ๋ฐํด์ก๊ธฐ ๋๋ฌธ์ ์ ๋ three-jsnext ์ ๋ํด ์กฐ๊ธ ๋ ์์
ํ์ต๋๋ค. ๊ธฐ์กด Three.js ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ฐ์ ธ์์ ์๋์ผ๋ก ES ๋ชจ๋๋ก ๋ง๋๋ ํ๋ก์ ํธ์
๋๋ค. ๋ช ๊ฐ์ง ๊น๋ค๋ก์ด ์ํ ์ข
์์ฑ(ํนํ KeyframeTrack
์ฃผ๋ณ)๊ณผ ์จ๋ฆํ๊ณ ์์ง๋ง ๊ณง ๊ณต์ ํ ๋ฌด์ธ๊ฐ๊ฐ ์์ด์ผ ํฉ๋๋ค. ๋ด๊ฐ ๋งํ ์ ์๋ ํ, ๋ชจ๋ ์์ ๊ฐ ๊ณ์ ์๋ํ๊ณ ์ถ์๋ ๋น๋๊ฐ ํ์ฌ ๋น๋๋ณด๋ค ์์ผ๋ฏ๋ก(UMD ํ์ผ์ ์์ฑํ๊ธฐ ์ํด Rollup์ ์ฌ์ฉ) ๋ชจ๋ ์ข์ ์์์
๋๋ค.
์ข์, ๋๋ ์ด๊ฒ์ ๋ํ ํ ๋ฆฌํ์คํธ๋ฅผ ์ด์์ต๋๋ค: #9310
@mrdoob
์ฐ๋ฆฌ๋ ์ด๋ ์ ๋ THREE์ ๊ฐ์ด ๊ตฌ์กฐํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋ก๋์
์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ธ๋ผ์ฐ์ ๋ฐ ๋ชจ๋์ ํ๊ฒฝ์์ ์๋ํฉ๋๋ค. ์ฝ๋๋ฒ ์ด์ค๋ ES6์ด์ง๋ง ๋ธ๋ผ์ฐ์ ๋ ์ ํ ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค.
๋ชจ๋ ๋ชจ๋์ด ํฌํจ๋ npm _์๋ ๊ทธ๋๋ก_ + ์ปดํ์ผ๋ ์ ์ญ ๋ค์์คํ์ด์ค ๋ธ๋ผ์ฐ์ ๋ชจ๋๋ฆฌ์ค(three.js)์ ์ด๊ฒ์ ๋ฐฐ์กํฉ๋๋ค. ๊ทธ๊ฒ์ ๋จ์ผ ๋ถ๋ถ์ ์ฌ์ฉํด์ผ ํ๋ ์ฌ๋์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒ๋ค์ ๋ง๋ญ๋๋ค.
๋ค์๊ณผ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
/src
classA.js
classB.js
classC.js
/index.js
/browser.js
index.js๋ ๋จ์ํ ๋ชจ๋ ๋ชจ๋๊ณผ ๊ธฐ๋ฅ์ ํ๋์ ํ์ผ๋ก ๋ค์ ๋ด๋ณด๋ ๋๋ค.
export ClassA from './src/classA';
export ClassB from './src/classB';
export ClassC from './src/classC';
๋ฐ๋ผ์ ์ต์ข ์ฌ์ฉ์๋ npm์ผ๋ก lib๋ฅผ ์ค์นํ๊ณ ๋ ์ด์ ๊ณ ๋ฏผํ์ง ์๊ณ ์ฌ์ฉํ ์ ์์ต๋๋ค.
// all exports from index.js will be under: mylib.ClassA, etc.
import * as mylib from 'libname':
// selected exports from index.js
import { ClassA, ClassC } from 'libname';
// or, specific modules
import ClassB from 'libname/src/classB'
browser.js๋ ํจํค์ง์ ์ ์ผํ ์ปดํ์ผ๋ ๋ถ๋ถ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก Babel์ ํตํด ES5๋ก ๋ณํ๋๊ณ ์คํฌ๋ฆฝํธ ํฌํจ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์ ์ญ ๋ค์์คํ์ด์ค๋ก ๋ด๋ณด๋ด์ง๋๋ค. ๋กค์ , ์นํฉ ๋ฑ์ ์ด๊ฒ์ ์ฝ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค.
@mrdoob ๋ฉ์ง ์ฌํ์ด์์ต๋๋ค ๐
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋น์ ์ ์ป์๋ค! ์ด ์ค๋ ๋๊ฐ ์ง๋ ๋ฉฐ์น ๋์ ํ๋ฐํด์ก๊ธฐ ๋๋ฌธ์ ์ ๋ three-jsnext ์ ๋ํด ์กฐ๊ธ ๋ ์์ ํ์ต๋๋ค. ๊ธฐ์กด Three.js ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ฐ์ ธ์์ ์๋์ผ๋ก ES ๋ชจ๋๋ก ๋ง๋๋ ํ๋ก์ ํธ์ ๋๋ค. ๋ช ๊ฐ์ง ๊น๋ค๋ก์ด ์ํ ์ข ์์ฑ(ํนํ
KeyframeTrack
์ฃผ๋ณ)๊ณผ ์จ๋ฆํ๊ณ ์์ง๋ง ๊ณง ๊ณต์ ํ ๋ฌด์ธ๊ฐ๊ฐ ์์ด์ผ ํฉ๋๋ค. ๋ด๊ฐ ๋งํ ์ ์๋ ํ, ๋ชจ๋ ์์ ๊ฐ ๊ณ์ ์๋ํ๊ณ ์ถ์๋ ๋น๋๊ฐ ํ์ฌ ๋น๋๋ณด๋ค ์์ผ๋ฏ๋ก(UMD ํ์ผ์ ์์ฑํ๊ธฐ ์ํด Rollup์ ์ฌ์ฉ) ๋ชจ๋ ์ข์ ์์์ ๋๋ค.