์๋ ํ์ธ์
three.js์ ๋ํ externs ํ์ผ์ด ์์ต๋๊น? ๋ด ๋ง์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
http://code.google.com/closure/compiler/docs/api-tutorial3.html#externs
๊ฐ์ฌ ํด์
๋ ๋ชจ
์๋์, three.js์๋ ์ธ๋ถ ์ข ์์ฑ์ด ์์ผ๋ฏ๋ก ์ง๊ธ๊น์ง ์ด์ ๊ฐ์ ๊ฒ์ด ํ์ํ์ง ์์์ต๋๋ค.
๋๋ ์์, ํ์ง๋ง ์ปดํ์ผ ๊ฐ๋ฅํ ํ๊ฒฝ์์ THREE.js๋ฅผ ํตํฉํ๋ ๊ฒ์ด ์์ฒด ํ๋ก์ ํธ์์๋ ์ ์ฉํฉ๋๋ค.
๊ทธ๋ฌํ ํ์ผ์ ์ด๋ป๊ฒ ์๊ฒผ์ต๋๊น? ๊ณต์ ํ ๋งํฌ์ ์ด๋ฏธ ์ค๋ช ๋์ด ์๋ค๋ฉด ์ฃ์กํฉ๋๋ค. ํ์ด์ง๊ฐ ๋๋ฌด ๋ง์์(ํ ์คํธ๊ฐ ๋๋ฌด ๋ง์) ์ฝ๊ณ /์ดํดํ ์ ์์ต๋๋ค.
@mrdoob , ๋ค์์์ ๋ช ๊ฐ์ง ์๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
http://code.google.com/p/closure-compiler/source/browse/#svn %2Ftrunk%2Fexterns
๋๋
http://code.google.com/p/closure-compiler/source/browse/#svn %2Ftrunk%2Fcontrib%2Fexterns
๋ค์ ์ฌํญ๋ ์ค์ํฉ๋๋ค.
http://code.google.com/closure/compiler/docs/js-for-compiler.html
๋๊ธ/ํค๋? ์ฝ๋๋ฅผ ์ฝ๊ธฐ ์ด๋ ต๊ฒ ๋ง๋ค ๊ฒ ๊ฐ์๋ฐ...
์, ํ์ง๋ง ์ ์ฒด ์ฝ๋๊ฐ ์๋ ์ด extern ํ์ผ์๋ง ํด๋น๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๊ตฌ๋ ํ ์ ์์ง๋ง ํ์๋ ์๋๋๋ค.
http://www.dotnetwise.com/Code/Externs/index.html ๋ก ์๋ํ์ต๋๋ค. ๊ทธ๋ฌ๋ Three.js์์๋ ์์ ํ ์๋ํ์ง ์์ต๋๋ค. ๋ชจ๋ ์ ์๊ฐ ์ถ์ถ๋์ง๋ ์์ต๋๋ค.
๋ธ๋ก๊ทธ ํญ๋ชฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
http://blog.dotnetwise.com/2009/11/closure-compiler-externs-extractor.html
this.method = function(){}
ํจํด์ ์ง์ํ๋ ๊ฒ ๊ฐ์ง๋ง ํ๋กํ ํ์
์ ์ง์ํ์ง ์์ต๋๋ค...
@mrdoob , ํด๋ก์ ์ปดํ์ผ๋ฌ ๊ณ ๊ธ ์ตํฐ๋ง์ด์ ๊ฐ ์๋ ์์ฒด ์์ฉ ํ๋ก๊ทธ๋จ์ THREE.js๋ฅผ ํตํฉํ๊ธฐ ์ํ ๊ถ์ฅ ์ฌํญ์ ๋ฌด์์ ๋๊น? ํ์ฌ ๋ถ๊ฐ๋ฅํ๋ค๋ ๊ฒ์ด ์ฌ์ค์ ๋๊น?
๋ด๊ฐ ์๋ ํ ๊ณ ๊ธ ์ตํฐ๋ง์ด์ ๋ ์ฌ์ฉ ์ค์ธ ํด๋์ค๋ง ํฌํจํฉ๋๋ค. ๋ง๋์? ์ด๋ก ์ ์ผ๋ก ์๋ํด์ผ ํฉ๋๋ค... ์๋ํ์ง ์์ต๋๊น?
three.js๋ก ๊ณ ๊ธ ์ต์ ํ๋ฅผ ์๋ํ์ง๋ ์์์ง๋ง ์ฝ๋๋ฅผ ๊นจ๋ ๋ฐ ์ฌ์ฉํ ๋ค๋ฅธ ๊ฒ๋ค์ ๊ธฐ์ตํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก "์์ "ํ์ง ์์์ต๋๋ค. ๊ธฐ๋ณธ ๋จ์ ์ต์ ํ์์๋ ํญ์ ์๋ํ์ง๋ง ๊ณ ๊ธ์์๋ ๋๋๋ก ์๋ํ์ง ์์ต๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ปดํ์ผํ๋ฉด ์ฝ๋๊ฐ ๊นจ์ง์ง๋ง ์์ฉ ํ๋ก๊ทธ๋จ(๋ฉ์๋๊ฐ ํธ์ถ๋๊ณ ๋ชจ๋ ๊ฒ์ด ํฌํจ๋จ)์ผ๋ก์ ์๋ํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ฃ ?
@mrdoob ์ด ์ปดํ์ผ๋(์ต์ ํ๋) ์ฝ๋์ ํจ๊ป ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ชจ๋ ํด๋์ค์ ๋ฉ์๋๋ฅผ ์ ์ธํ๋ "externs" ํ์ผ์ด ํ์ํฉ๋๋ค. ๊ทธ๊ฒ ์์ด๋ ์๋ํ์ง ์์ต๋๋ค. ๊ทธ๋ฌ๋ three.js์ ํจ๊ป ์๋ํ๋ ๋ค๋ฅธ ๋๊ตฌ๊ฐ ์์ต๋๊น? ๋ด three.js ์์ฉ ํ๋ก๊ทธ๋จ์ ๋๋ ํ(์ถํ)ํ๋ ค๋ฉด ํ์ํฉ๋๋ค. ํ ํ๋ณด๋ https://github.com/mishoo/UglifyJS ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋๋ ๊ทธ๊ฒ์ ์๋ํ์ง ์์์ต๋๋ค.
Google ํด๋ก์ externs๋ ์ปดํ์ผ๋ ์ฝ๋์์ ์ฌ์ฉํ ์ ์ฒด ๊ฐ์ฒด๋ฅผ ์ค๋ช
ํ๋ ํ์ผ์
๋๋ค.
์ด ํ์ผ์ด ์์ผ๋ฉด ์ปดํ์ผ๋ฌ๋ ํจ์ ์ด๋ฆ์์ a() ๋๋ b()์ ๊ฐ์ ๊ฒ์ ๋ง๋ญ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์์ JQuery์ฉ์ ๋๋ค. http://code.google.com/p/closure-compiler/source/browse/trunk/contrib/externs/jquery-1.7.js
externs๊ฐ three.js๋ฅผ ์ํ ๊ฒ์ด๋ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค.
๋๋ ๊ด์ฐฎ์ง๋ง ์ค์ค๋ก ํด๊ฒฐํ ์๋ ์์ต๋๋ค. ๋ค๋ฅธ ์ฌ๋์ด ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํด์ผ ํฉ๋๋ค.
@yurikor , node.js๋ฅผ ์ฌ์ฉํ ๋ node-browserify์ uglify-js๋ฅผ ํจ๊ป ์ฌ์ฉํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ฉด ์๋ฌด๊ฒ๋ ๋ง๋ค ํ์๊ฐ ์์ต๋๋ค.
@remo ์กฐ์ธ ๊ฐ์ฌํฉ๋๋ค. ์๋ํด ๋ณผ๊ฒ.
์ด ๋ฌธ์ ๋ ์ ์ ๋์ ๋นํ์ฑํ๋์์ง๋ง ๋์ค์ ๋๊ตฐ๊ฐ๊ฐ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ๋ฅผ ์ํด ๋ช ๊ฐ์ง ์ถ๊ฐ ์ ๋ณด๊ฐ ์์ต๋๋ค.
๋ด ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ๋ด ํ๋ก์ ํธ๋ฅผ ์ปดํ์ผํ ์ ์๋ ์ถฉ๋ถํ threejs ๋ด๋ณด๋ด๊ธฐ๊ฐ ์๋ ๊ฐ๋จํ ํ์ผ ์ ๋ง๋ค์์ต๋๋ค. ํด๋ก์ ์ปดํ์ผ๋ฌ๊ฐ ๋ชจ๋ ์ ํ์ ํ์ธํ๊ณ ๋ด ์ฝ๋์์ ๋ช ๊ฐ์ง ๋ฒ๊ทธ๋ฅผ ์ฐพ์ ์ ์๋๋ก ํ๊ธฐ ๋๋ฌธ์ ๋งค์ฐ ์ ์ฉํ ์ ํ ์ฃผ์์ด ํจ๊ป ์ ๊ณต๋ฉ๋๋ค. ์ด ํ์ผ์ ์๋์ผ๋ก ๋ง๋ค์์ต๋๋ค. ๋๋ ์ฃผ๋ก ๋ฒ๊ทธ ๊ฒ์ฌ๋ฅผ ์ํด ํด๋ก์ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ค์ ์ถ์๋ฅผ ์ํด์๋ ๋ ๊ฐ๋ ฅํ์ง๋ง ์์ ํ uglifyjs ๋ฅผ ์ฌ์ฉ ํฉ๋๋ค.
๋ํ ํด๋ก์ ์ปดํ์ผ๋ฌ๊ฐ ๋ด ๊ณต์ฉ ์ธํฐํ์ด์ค ๊ธฐํธ์ ์ด๋ฆ์ ๋ฐ๊พธ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ช ์ค์ ์ฝ๋ ๋ฅผ ์ถ๊ฐํด์ผ blah.xyz
๋ฅผ ํตํด ์ก์ธ์คํ ๋ชจ๋ ์์ฑ์ ์ด๋ฆ์ ๋ณ๊ฒฝํ์ง๋ง blah["xyz"]
๋ฅผ ํตํด ์ก์ธ์คํ ์์ฑ์ ๊ฑด๋๋ฆฌ์ง ์์ต๋๋ค.
๋ง์ง๋ง์ผ๋ก window['ColladaLoader2'] = ColladaLoader2
๋ผ์ธ ์ ํด๋ก์ ์ปดํ์ผ๋ฌ์๊ฒ ์ด ํด๋์ค๋ฅผ ์ ์ญ ๋ฒ์๋ก ๋ด๋ณด๋ด์ผ ํจ์ ์๋ฆฌ๋ ๋ฐ ํ์ํ์ต๋๋ค.
๊ทธ๋ฌ๋ ํ๋ก๋์
์ ํด๋ก์ ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋ฒ๊ทธ ๊ฒ์ฌ๋ง ์ฌ์ฉํ๊ณ ์์ต๋๊น? ๊ทธ๋์
extern ํ์ผ์ ์ ์ง ๊ด๋ฆฌํ๋ ๊ฒ์ด ๊ทธ๋งํ ๊ฐ์น๊ฐ ์๋์ง ํ์คํ์ง ์์ต๋๋ค. ๊ทธ๋ฅ ์คํ ์ข
๋ฃ
์ ๊ทน์ ์ธ ์ต์ ํ๊ฐ ์์ผ๋ฉด extern ํ์ผ์ด ํ์ํ์ง ์์ต๋๋ค.
ํ์ง๋ง ์ฌ์ ํ ๋ด๊ฐ ๋ฏฟ๋ ๋๋ถ๋ถ์ ๊ฒ์ฆ ๋๋ ์๋ง๋ ๋ชจ๋
ํ์ธ. ์๋ง๋ ๋น์ ์ ๋ช
ํํ ํ ์ ์์ต๋๊น?
๋ด ์ ํ์์ ๋ณด๋์ต๋๋ค. ๋ฌธ๋ฒ๊ณผ ๊ฐ๊ฒฐํจ์ ์ ๊ฐ์ค๋ฝ๊ฒ ์๊ฐํฉ๋๋ค.
2013๋
2์ 12์ผ ์ค์ 5์ 19๋ถ์ "Robert Carnecky" [email protected]์ด ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
์ด ๋ฌธ์ ๋ ์ ์ ๋์ ๋นํ์ฑํ๋์์ง๋ง ๋๊ตฐ๊ฐ๊ฐ ์ํ๋ ๊ฒฝ์ฐ
ํฅํ ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ์ถ๊ฐ ์ ๋ณด๊ฐ ์์ต๋๋ค.๋ด ํ๋ก์ ํธ์ ๊ฒฝ์ฐ ๋ด ํ๋ก์ ํธ๋ฅผ ์ปดํ์ผํ ์ ์๋ ์ถฉ๋ถํ threejs ๋ด๋ณด๋ด๊ธฐ๊ฐ ํฌํจ๋ ๊ฐ๋จํ ํ์ผ( https://github.com/crobi/ColladaAnimationCompress/blob/master/threejs-exports.js) ์ ๋ง๋ค์์ต๋๋ค. ๊ทธ๊ฒ์ ์จ๋ค
ํด๋ก์ ๋ฅผ ํ์ฑํํ ๋ ๋งค์ฐ ์ ์ฉํ ์ ํ ์ฃผ์ ํฌํจ
์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ์ ํ์ ํ์ธํ๊ณ ๋ด ์ฝ๋์์ ๋ช ๊ฐ์ง ๋ฒ๊ทธ๋ฅผ ์ฐพ์ต๋๋ค. ๋๋ ๊ฐ์ง๊ณ ์๋ค
์ด ํ์ผ์ ์๋์ผ๋ก ์์ฑํ์ต๋๋ค. ๋๋ ์ฃผ๋ก ๋ฒ๊ทธ์ ํด๋ก์ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
ํ์ธ, ์ค์ ์ถ์๋ฅผ ์ํด ๋ ๊ฐ๋ ฅํ์ง๋ง ์์ ํ ๊ฒ์ ์ฌ์ฉํฉ๋๋ค.
uglifyjs https://github.com/mishoo/UglifyJS.๋ํ ํด๋ก์ ์ปดํ์ผ๋ฌ๊ฐ ๋ด ๊ณต์ฉ ์ธํฐํ์ด์ค์ ์ด๋ฆ์ ๋ฐ๊พธ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ์ํด
๊ธฐํธ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ช ์ค์ ์ฝ๋ ๋ฅผ ์ถ๊ฐํด์ผ ํ์ต๋๋ค
ํด๋ก์ ์ปดํ์ผ๋ฌ๋ blah.xyz๋ฅผ ํตํด ์ก์ธ์ค๋๋ ๋ชจ๋ ์์ฑ์ ์ด๋ฆ์ ๋ฐ๊ฟ๋๋ค.
๊ทธ๋ฌ๋ blah["xyz"]๋ฅผ ํตํด ์ก์ธ์ค๋๋ ์์ฑ์ ๊ฑด๋๋ฆฌ์ง ์์ต๋๋ค.๋ง์ง๋ง์ผ๋ก https://github.com/crobi/ColladaAnimationCompress/blob/366344d3aa5dbbc0a53c47a2c1759b86bb1e0fcd/ColladaLoader2.coffee#L3383 ์ฐฝ['ColladaLoader2']
= ColladaLoader2(๋ฌธ์์ด ์ฌ์ฉ์ ๋ค์ ์ฃผ์)๊ฐ ํ์ํ์ต๋๋ค.
์ด ํด๋์ค๋ฅผ ์ ์ญ ๋ฒ์๋ก ๋ด๋ณด๋ด์ผ ํ๋ ํด๋ก์ ์ปดํ์ผ๋ฌ.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ Gi tHubhttps://github.com/mrdoob/three.js/issues/341#issuecomment -13426131์์ ํ์ธํ์ธ์.
๋ด๊ฐ ์๋ ํ ๋จ์ ๋ชจ๋ ๋ ์ ํจ์ฑ ๊ฒ์ฌ๋ฅผ ์ ํ ์ํํ์ง ์์ต๋๋ค. ์ง์ญ ๋ณ์์ ์ด๋ฆ์ ๋ฐ๊พธ๊ณ ์ ์ ์๋ ๊ธฐํธ๋ฅผ ๋ง๋๋ฉด ์ ์ญ ๋ณ์๋ผ๊ณ ๊ฐ์ ํ๊ณ ๊ทธ๋๋ก ๋ก๋๋ค.
๊ณ ๊ธ ๋ชจ๋ ๋ ๊ฐ๋ ฅํ ํ์์ ์ธ์ด์์ ์ปดํ์ผ๋ฌ์ฒ๋ผ ์๋ํฉ๋๋ค(ํ์ ์ ๋ณด๋ฅผ ์ฌ์ฉํ ์ ์๋ค๊ณ ๊ฐ์ ): ์ ์ ์๋ ํจ์ ๋๋ ์์ฑ์ ๋ํด ๊ฒฝ๊ณ ํ๊ณ ์๋ชป๋ ์์ ์ธ์๋ก ํจ์๋ฅผ ํธ์ถํ๊ฑฐ๋ ์๊ฐ ์์๋์์ต๋๋ค.
์๋ฅผ ๋ค์ด ๋จ์ ๋ชจ๋๋ ๋ค์ ์ฝ๋๋ฅผ ๋ณํํฉ๋๋ค.
function fn() {
var foo = {}; // local variable, safe to rename this
foo.bar(); // undefined property, will crash here
}
fn();
์ด๋ค ๊ฒฝ๊ณ ๋ ์์ด
function fn(){({}).bar()}fn();
({}).bar()
์์ ๋ถ๋ช
ํ ์ถฉ๋ํฉ๋๋ค. ๊ณ ๊ธ ๋ชจ๋๋ ๋ค์ ์ฝ๋๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
({}).a(); // fn() inlined, private member 'bar' renamed to 'a'
์ฌ์ ํ ์ถฉ๋ํ์ง๋ง ์ปดํ์ผ๋ฌ๋ ๊ฒฝ๊ณ ๋ ์ ๊ณตํฉ๋๋ค.
Property bar never defined on foo at line 3 character 0.
THREE.Vector3
๋ฅผ Matrix4.makeTranslation
์ ๋ฌํ ๋ฒ๊ทธ ์ ํ์ด์์ต๋๋ค Matrix4.makeTranslation
์ ๊ฒฝ์ฐ์ ๋ง์ฐฌ๊ฐ์ง).์ ๋ ํ์ฌ THREE.js ์ ํ๋ฆฌ์ผ์ด์
์ ํด๋ก์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํตํฉํ๊ธฐ ์ํด ํด๋ก์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ externs.js ํ์ผ์ ๋ง๋ค๊ณ ์์ต๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ์ฐ๋ฆฌ๊ฐ ์ฐพ์ผ๋ ค๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ชจ๋ THREE.js ํด๋์ค์ ํด๋น ํด๋์ค๊ฐ ๊ตฌํํ๋ ํ๋กํ ํ์
๋ฉ์๋์ ๋ชฉ๋ก์ด ์ด๋๊ฐ์ ์์ต๋๊น? ๋ชฉ๋ก์ ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค.
THREE.ํ
์ค์ฒ
THREE.Texture.constructor
THREE.Texture.clone
THREE.Texture.dispose
THREE.DataTexture.clone
(๋ฑ๋ฑ...)
Ps- Three.js๋ ํ๋ฅญํ์ง๋ง ์ ์ ํ jsDocs๋ฅผ ์ฌ์ฉํ๋ฉด ์ด ๋ชฉ๋ก์ ์ฝ๊ฒ ์ถ์ถํ ์ ์์ต๋๋ค. :)
์ฌ๊ธฐ ์ three.js ๋ด๋ณด๋ด๊ธฐ์ ๋ถ๋ถ ๊ตฌํ์ด
@crobi : ์ ๊ฑฐ๊ธฐ์ ๋ฌธ์ ์ฃผ์์ ๋ฃ์์ต๋๊น? ์๋ฌด๋๋ ์๊ฐ์ด ๋ง์ด ๊ฑธ๋ฆฌ๊ณ ๊ทธ๋ด ํ์๊ฐ ์์ ๊ฒ ๊ฐ๊ธด ํ๋ฐ...
@taoeffect : ์ฃผ์์ ๋๋ถ๋ถ ํด๋ก์ ์ปดํ์ผ๋ฌ ๊ณ ๊ธ ๋ชจ๋์ ๋ํ ๊ฒ์ ๋๋ค. ๋๋ ๊ฐ๋ ฅํ ํ์์ ์ฝ๋๋ฅผ ์ข์ํฉ๋๋ค.
@crobi , ์ค ๋๊ธ๋ก ์ธํด ๊ฐ์ ์ ๋ ฅ์ด ๋ฐ์ํฉ๋๊น? ๋ฉ์ง๋ค์.
ํด๋ก์ ์ปดํ์ผ๋ฌ๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ ์ค๋ฅ๋ฅผ ํ์ธํ๋ ๊ฒฝ์ฐ์๋ง. typescript ์ ์ ์ฌํฉ๋๋ค. ๋ ๋ค ์ฃผ์์ด ๋ฌ๋ฆฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ผ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ ์ฒ๋ฆฌํฉ๋๋ค. ๋ฐ๋ผ์ ์ปดํ์ผ ํ์ ๊ฒ์ฌ ์ ์ฉ์ ๋๋ค.
์ฌ๊ธฐ์ ์๋ ํด๋ก์ ์ ๊ณ ๊ธ ์ต์ ํ ๋ชจ๋์ ๋ํ ๋๋ถ๋ถ์ ์๊ฒฌ์ ์ ํํ์ง ์์ต๋๋ค.
์ฃผ์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ค์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ http://www.dotnetwise.com/Code/Externs/์ ๋ํ ํด๋ก์ extern์ ์๋์ผ๋ก ์์ฑํ ์ ์์ต๋๋ค
๋ํ ๋จ์ํ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฌ์ฉํ๋ ๋์ three.js๋ฅผ ์ฝ๋์ ๋ํ ์ ๋ ฅ์ผ๋ก ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค๋ฉด ํ๋๊ทธ๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.
--language_in=ECMASCRIPT5
์ด์ ๋ํ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์์ฑํด์ผ ํฉ๋๋ค.
์ค์ํ ์ ๋ฐ Google Closure๋ฅผ ํตํด ์คํํ๋์ง ํ์ธ
์ต์ ํ๊ฐ ์ ๋ ์ปดํ์ผ๋ฌ๋ ์ฐจ์ด๋ฅผ ๋ง๋ญ๋๋ค.
-๋ฒค
2014๋
1์ 13์ผ ์์์ผ ์คํ 12์ 31๋ถ, Rodrigo Formigone <
[email protected]>์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
๋ํ ์ฝ๋ ์ ๋ ฅ์ผ๋ก three.js๋ฅผ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ๋ค๋ฉด
๋จ์ํ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฌ์ฉํ๋ ค๋ฉด ํ๋๊ทธ๋ฅผ ์ถ๊ฐํด์ผ ํฉ๋๋ค.--language_in=ECMASCRIPT5
โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ Gi tHubhttps://github.com/mrdoob/three.js/issues/341#issuecomment -32191167์์ ํ์ธํ์ธ์.
.
์น์ ํ๋,
๋ฒค ํด์คํด
์์ฑ: 613-762-4113 ์ค์นด์ดํ: ben.exocortex ํธ์ํฐ: @exocortexcom
http://Clara.io - ์ ๋ฌธ๊ฐ๊ธ WebGL ๊ธฐ๋ฐ 3D ์ฝํ
์ธ ์ ์
๊ทธ๋ฐ ๊ธ์ ์ธ ์ ์์ ๊ฒ ๊ฐ์์. ๊ทธ๋ฌ๋ ๋ช ํํ ํ๊ธฐ ์ํด (externs ํ์ผ์ ์ ๋ฌด์ ๊ด๊ณ์์ด) ํด๋ก์ ๋ฅผ ํตํด Three.js๋ฅผ ์คํํ๋ ค๋ ์ด์ ๋ ๋ฐ๋์ ์ฑ๋ฅ ์ต์ ํ๋ง์ ์ํ ๊ฒ์ ์๋๋๋ค. ํด๋ก์ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก JavaScript(ํนํ ๋งค์ฐ ํฐ ์ฝ๋ ๊ธฐ๋ฐ)์์ ์ ์ง ๊ด๋ฆฌ ๊ฐ๋ฅํ ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค. ๋ชฉํ๋ ๊ฐ๋ฐ์๊ฐ JavaScript๋ฅผ "ํผํ๋" ๊ฒ์ด ์๋๋ผ(GWT ๋๋ ๊ธฐํ ์ ์ฌํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ) JavaScript๋ฅผ "๊ธธ๋ค์ธ"(๊ธฐ๋ณธ JS ์์ฑ)์ ๋๋ ๊ฒ์ ๋๋ค. ๋จ์ํ Three.js๋ฅผ Closure ํ๋ก์ ํธ์ ์ผ๋ถ๋ก ์ปดํ์ผํ๋ ค๊ณ ํ๋ฉด Three.js๊ฐ ์ผ๋ถ ํ์ค์ ์ค์ํ์ง ์์ ์ ์๊ธฐ ๋๋ฌธ์ ์ปดํ์ผ๋ฌ๊ฐ ์๋ฆฌ๋ฅผ ์ง๋ฅด๊ฒ ํ ์ ์์ต๋๋ค(JSDoc์ด ์ถฉ๋ถํ์ง ์์๊ฐ์?). --language_in ์ปดํ์ผ๋ฌ ํ๋๊ทธ๋ฅผ ์ฌ์ฉํ๋ฉด ํ์ฌ๋ก์๋ ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋์ง๋ง ๋ช ๊ฐ์ง ๊ฒฝ๊ณ ๊ฐ ํ์๋ฉ๋๋ค. ๋จ์ํ ์์ ์ JS ์ฝ๋๋ฅผ ์ปดํ์ผํ๊ณ ์ถ์ง๋ง Three.js๋ฅผ ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์ฐธ์กฐํ๋ ค๋ ๊ฒฝ์ฐ(๋ฐ๋ผ์ Three.js์ ๋ชจ๋ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ๊ฑด๋๋ฆฌ์ง ์๊ณ ์ต์ ํํ์ง ์์ ์ฑ๋ก ๋๋ ๊ฒฝ์ฐ) ์์์ ์ธ๊ธํ externs ํ์ผ์ด ํ์ํฉ๋๋ค. externs ํ์ผ์ด ์์ผ๋ฉด Closure๋ THREE.*๊ฐ ์ด๋์๋ ์ ์ธ๋์ง ์์๋ค๋ ์ปดํ์ผ ์ค๋ฅ๋ฅผ ๋ฐ์์ํต๋๋ค.
Closure ํ๋ก์ ํธ์์ Three.js๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ๊ณผ ์ด์ ๋ฅผ ์ค๋ช ํ๋ ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ์์ฑํ ์๋ ์์ง๋ง Google Closure ๋๊ตฌ์ ๋ํ ์ต๊ณ ์ ์๊ฐ ํ๋ ์ ํ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. (Google I/O 2011์์) https://www.youtube.com/watch?v=M3uWx-fhjUc (๊ธด ๋น๋์ค๋ผ๋ ๊ฒ์ ์๊ณ ์์ง๋ง ์ปดํ์ผ๋ฌ์ ๋ชฉ์ ์ด ๋ฌด์์ธ์ง, ๋ค๋ฅธ ์ปดํ์ผ ๋ชจ๋๊ฐ ์ค์ ๋ก ๋ฌด์์ ํ๋์ง ๋ถ๋ช ํ ํฉ๋๋ค. ๋ํ ์ค๋ช ํฉ๋๋ค. extern ํ์ผ์ด ํ์ํ ์ด์ ).
์๋ ํ์ธ์, three.js๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ธฐ๋ฅผ ๊ธฐ๋ํ๊ณ ์์ผ๋ฏ๋ก ADVANCED_OPTIMIZATIONS ์ต์ ์ง์์ ์ํฉ๋๋ค.
๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ๋ ์๋ฒ ๋ฉ ์ ํ๋ฆฌ์ผ์ด์ ์ด Three.js ๊ธฐ๋ฅ์ ์ผ๋ถ๋ง ์ฌ์ฉํ ๋ ๊ฐ๋ ฅํ๊ฒ ์๋ํฉ๋๋ค.
ํ์ฌ three.js๋ "three.min.js๊ฐ ํ์ํฉ๋๋ค!"๋ก ์ ํ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ชจ๋ ๋จ์ผ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํด์ผ ํฉ๋๋ค. ์ด ๊ณ ์ ์ ์ธ ์ ๊ทผ ๋ฐฉ์์ ์ดํดํ๊ธฐ ์ฝ์ง๋ง ์ด ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์์ฑ๋ ์ฝ๋์ ๊ฒฝ์ฐ JavaScript ์ต์ํ ํ๋ก๊ทธ๋จ์ด ์ฝ๋๋ฅผ ์ค์ผ ์ ์์ต๋๋ค. ๋ณ์ ์ด๋ฆ ์ถ์(์งง์ ๋ณ์ ์ด๋ฆ์๋ ํจ๊ณผ์ ์ด์ง ์์), ๊ณต๋ฐฑ ์ ๊ฑฐ(๋ค์ฌ์ฐ๊ธฐ ๊ณต๋ฐฑ, ํญ ๋ฐ ์ค ๋ฐ๊ฟ์๋ง ์ ํจ) ๋ฐ ๊ธฐํ ์ ๋ ดํ ๋ฐฉ๋ฒ์ผ๋ก ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ ์ ์์ต๋๋ค.
"Closure ์ปดํ์ผ๋ฌ ์คํ์ผ" ์ฝ๋์ ADVANCED_OPTIMIZATIONS ์ต์ ์ ์ฌ์ฉํ๋ฉด ๋๋ถ๋ถ ํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ค์น๋ฅผ ์ฃผ๋ ์ ์ฒด "ํ์ํ์ง ์์ ์ฝ๋"๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค. Closure ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ๊ฐ์ ์ปค์ก์ง ๋ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์์ ๊ฐ๋ฐ์๋ ๋๋ถ๋ถ์ ์ฝ๋๊ฐ ์ปดํ์ผ ๋จ๊ณ์์ ์ ๊ฑฐ๋๋ค๋ ๊ฒ์ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ์๊ดํ์ง ์์ต๋๋ค.
three.js๋ ์ด๋ฏธ ๊ฐ์ฒด ์งํฅ ์คํ์ผ๋ก ์์ฑ๋์๊ธฐ ๋๋ฌธ์ ์ ์ฒด ์ฝ๋๋ฅผ "ํด๋ก์ ์ปดํ์ผ๋ฌ ์คํ์ผ" ์ฝ๋๋ก ์ ๋ฐ์ดํธํ๋ ๊ฒ์ด (๊ธฐ์ ์ ์ผ๋ก) ์ด๋ ต์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด๊ฐ ๊ฑฑ์ ํ๋ ๊ฒ๋ค...
ํ์ด ์ค์ผ๋ ์๋ฅด,
์ด๊ฒ์ ์ข์ ์์ด๋์ด์
๋๋ค. ๋ฐฉ๋ฒ์ ๋ํ ์์ ์ค๋ํซ์ ๊ณต์ ํ ์ ์์ต๋๊น?
์ด๊ฒ์ three.js์ ์ถ๊ฐ๋์ด์ผ ํฉ๋๊น?
๊ด๋ จํ์ฌ,
๋์๋ค๋ฅด ๋ง๋ค๋ฐ
2014๋
6์ 24์ผ ํ์์ผ ์คํ 4:23 Schedul Xor [email protected]
์ผ๋ค:
์๋ ํ์ธ์, three.js๋ฅผ ์ฌ์ฉํ์ฌ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ธฐ๋ฅผ ๊ธฐ๋ํ๊ณ ์์ต๋๋ค.
๊ทธ๋์ ADVANCED_OPTIMIZATIONS ์ต์ ์ง์์ ์ํฉ๋๋ค.๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ๋ ์๋ฒ ๋ฉ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ง ์ฌ์ฉํ ๋ ๊ฐ๋ ฅํ๊ฒ ์๋ํฉ๋๋ค.
Three.js ํจ์์ ์ผ๋ถ์ ๋๋ค.ํ์ฌ three.js๋ ๋ชจ๋ ๋จ์ผ ๊ธฐ๋ฅ์ ๊ฐ๋ฐํด์ผ ํฉ๋๋ค.
์๋๋ ์ฌ์ฉ์ "3.min.js๊ฐ ํ์ํฉ๋๋ค!"๋ก ์ ํ๋ฉ๋๋ค. ์ด ๊ณ ์
์ ๊ทผ ๋ฐฉ์์ ์ดํดํ๊ธฐ ์ฝ์ง๋ง ์ด ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์์ฑ๋ ์ฝ๋์ ๊ฒฝ์ฐ
JavaScript ์ต์ํ ํ๋ก๊ทธ๋จ์ ๋ณ์ ์ด๋ฆ์ ์ถ์ํด์ผ๋ง ์ฝ๋ ํฌ๊ธฐ๋ฅผ ์ค์ผ ์ ์์ต๋๋ค.
(์งง์ ๋ณ์ ์ด๋ฆ์๋ ์ ํจํ์ง ์์), ๊ณต๋ฐฑ ์ ๊ฑฐ(์ ํจ
๋ค์ฌ ์ฐ๊ธฐ ๊ณต๋ฐฑ, ํญ ๋ฐ ์ค ๋ฐ๊ฟ) ๋ฐ ๊ธฐํ ์ ๋ ดํ ํธ๋ฆญ.ADVANCED_OPTIMIZATIONS ์ต์ ์ "ํด๋ก์ ์ปดํ์ผ๋ฌ ์คํ์ผ"์ ์ฌ์ฉ
์ฝ๋์์ ๋๋ถ๋ถ ๊ฐ์ค์น๋ฅผ ๋ถ์ฌํ๋ "ํ์ํ์ง ์์ ์ฝ๋" ์ ์ฒด๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค.
๋ํ ๋์๊ด. ํด๋ก์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
https://developers.google.com/closure/library/ ๊ฐ ์ปค์ก์ง๋ง
๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์์ ๊ฐ๋ฐ์๋ ๊ทธ๊ฒ์ ์๊ณ ์๊ธฐ ๋๋ฌธ์ ๊ทธ๊ฒ์ ๋ํด ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค.
๋๋ถ๋ถ์ ์ฝ๋๋ ์ปดํ์ผ ๋จ๊ณ์์ ์ ๊ฑฐ๋ฉ๋๋ค.three.js๋ ์ด๋ฏธ ๊ฐ์ฒด ์งํฅ ์คํ์ผ๋ก ์์ฑ๋์์ผ๋ฏ๋ก
(๊ธฐ์ ์ ์ผ๋ก) ์ ์ฒด ์ฝ๋๋ฅผ "ํด๋ก์ ์ปดํ์ผ๋ฌ"๋ก ์ ๋ฐ์ดํธํ๋ ๊ฒ์ ์ด๋ ต์ง ์์ต๋๋ค.
styled" ์ฝ๋. ๋ด๊ฐ ๊ฑฑ์ ํ๋ ๊ฒ์...
- ํด๋ก์ ์ปดํ์ผ๋ฌ ์คํ์ผ์๋ ๊ฐ ํจ์์ ๋ํ ์ฃผ์์ด ํ์ํฉ๋๋ค.
ํ์ฌ ๊ทธ๋ค ์ค ๋๊ตฌ๋ ์์ต๋๋ค. ์ฃผ์์ ์ถ๊ฐํ๋ ๋ฐ ์ผ๋ง๋ ๊ฑธ๋ฆฝ๋๊น?
์ด์ ๊น์ง ๊ฐ๋ฐ๋ ๋ชจ๋ ๊ธฐ๋ฅ์?- ํด๋ก์ ์ปดํ์ผ๋ฌ์๋ ์๊ฒฉํ ์ ํ ์ ์๊ฐ ํ์ํฉ๋๋ค. null์ ๋ํด์๋
์ ์๋์ง ์์ ๊ฒฝ์ฐ ์ ๋๋ก ์๋ํด์ผ ํฉ๋๋ค. ์๊ฒ๋ ํ๋ ์ผ์ด ๋ ์ ์์ต๋๋ค
"null-allowed" ๋งค๊ฐ๋ณ์, "undefined-allowed"๊ฐ ์๋ ํจ์
๋งค๊ฐ๋ณ์, ...- ๊ธฐ๋ํ๊ณ ์๋ค๋ฉด ์ ์ ํ externs ํ์ผ์ ์ค๋นํด์ผ ํฉ๋๋ค.
์ ์ํด ์ปดํ์ผ๋ "์ ์ฒด ๋ฒ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ" ์ค๋น
ADVANCED_OPTIMIZATIONS.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/mrdoob/three.js/issues/341#issuecomment -46957189.
@schedul-xor ์ฐ๋ฆฌ๋ ํ์คํ ๋์์ด ํ์ํฉ๋๋ค... ์ฝ๋ ์ฃผ์์ด ์ค์ ๋ก ํ์ํ๊ฐ์ ์๋๋ฉด extern์ผ๋ก ์ถฉ๋ถํฉ๋๊น?
์๋ ํ์ธ์,
์ ๋ ์ด ์ปค๋ฎค๋ํฐ๋ฅผ ์ฒ์ ์ฌ์ฉํฉ๋๋ค. ์ด ์ปค๋ฎค๋ํฐ์ ๊ธฐ์ฌํ๋ ๋ฐ ๊ด์ฌ์ด ์์ต๋๋ค.
๋ณ๊ฒฝ.
๊ด๋ จํ์ฌ,
๋์๋ค๋ฅด ๋ง๋ค๋ฐ
2014๋ 6์ 24์ผ ํ์์ผ ์คํ 7์ 23๋ถ์ Mr.doob [email protected]์ ๋ค์๊ณผ ๊ฐ์ด ์ผ์ต๋๋ค.
@schedul-xor https://github.com/schedul-xor ์ฐ๋ฆฌ๋ ํ์คํ ๋์์ด ํ์ํฉ๋๋ค
๊ทธ๊ฒ์ผ๋ก ... ์ฝ๋ ์ฃผ์์ด ์ค์ ๋ก ํ์ํ์ง ์๋๋ฉด ์ถฉ๋ถํฉ๋๊น?
์ธ๋ถ์ธ?โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/mrdoob/three.js/issues/341#issuecomment -46973166.
๊ณ ๊ธ ์ต์ ํ์๋ ํน์ ์ฝ๋ฉ ์คํ์ผ์ด ํ์ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฝ๋๊ฐ ์์๋ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด three.js๋ uniforms["diffuse"]
๋ฐ uniforms.diffuse
ํผํฉํฉ๋๋ค. ์ด๋ ํด๋ก์ ๊ณ ๊ธ ์ต์ ํ์์ ํ์ฉ๋์ง ์์ต๋๋ค. #3222๋ ์ฐธ์กฐํ์ญ์์ค.
๋ชจ๋ ๊ณณ์ ์๊ฒฉํ ์ ํ ์ฃผ์์ ์ถ๊ฐํ๋ ๊ฒ์ ์์ฒญ๋ ์์ ์์ ์ด๋ฉฐ ๋ง์ ์ฃผ์ ํ์ ์ถ๊ฐํฉ๋๋ค(์ ํ๋ก์ ํธ์์๋ ํ ์๊ฐ 2๋ฐฐ ์ฆ๊ฐํ์ต๋๋ค).
๋ค๋ฅธ ์น ํ๋ ์์ํฌ/์ธ์ด์ ๋ํ extern ํ์ผ์ ๊ฐ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ํํ ๋ฆฌ์ผ ์ ๋ฐ๋ฅด๋ฉด, externs๋ ์ด๋ฆ์ ๋ฐ๊พธ๊ณ ์ถ์ง ์์ ๋ณ์๋ฅผ ๋ณดํธํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ด๊ฒ์ ๊ณต๊ฒฉ์ ์ธ ๋ณ์ ์ด๋ฆ ๋ณ๊ฒฝ์ผ๋ก๋ถํฐ ํด๋ก์ ์ปดํ์ผ๋ฌ ์คํ์ผ ํ๋ก์ ํธ์์ ์ฌ์ฉํ๋ ํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ(๋นํด๋ก์ ์ปดํ์ผ๋ฌ ์คํ์ผ)๋ฅผ ๋ณดํธํ๋ ค๋ ๊ฒฝ์ฐ์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
externs ํ์ผ์ด ์ ๊ณต๋๋ ์ ์ผํ ๊ฒฝ์ฐ์๋ ์ปดํ์ผ๋ฌ๊ฐ ์ฌ์ ํ ๋ฐ๋ ์ฝ๋๋ฅผ ์๋ฅด๋ ค๊ณ ํ๋์ง ํ์คํ์ง ์์ต๋๋ค. ๋ชจ๋ ๊ธฐ๋ฅ์ ์ฃผ์์ ์์ฑํ๋ ๊ฒ๋ณด๋ค extern ํ์ผ๋ง ์์ฑํ๋ฉด ํจ์ฌ ๋ ์ฌ์ธ ๊ฒ์ ๋๋ค...
์ ์๊ฐ์๋ ๊ฐ ํจ์์ ์ด๋ ธํ ์ด์ ์ ์์ฑํ๋ ๊ฒ์ด extern์ ์์ฑํ๋ ๊ฒ๋ณด๋ค ๋ซ์ต๋๋ค. ์๋ํ๋ฉด ํ์ ์ ์ ํ์ผ๊ณผ ์์ค ์ฝ๋๊ฐ ๋ค๋ฅด๋ฉด ๋์ค์ extern ํ์ผ์ ๋๊ธฐํํ๊ธฐ ์ด๋ ค์์ง๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ฐ ๊ธฐ๋ฅ ์์ ์ externs ํ์ผ ์ ๋ฐ์ดํธ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ผ๋ง๋ ์ฑ๊ฐ์๊ฒ ๋ ์ง ์์ํ ์ ์์ต๋๋ค. ์ ํ(externs ๋๋ /** */ ํจ์์ ๋ํ ์ฃผ์)์๋ ์ฃผ์์ด ํ์ํ๋ฉฐ ๋๋ถ๋ถ์ ๊ฒฝ์ฐ ๋ ์ฌ์ด ๋ฐฉ๋ฒ์ด ์ด๊น๋๋ค.
three.js๋ ๋๊ท๋ชจ ํ๋ก์ ํธ์ด๊ธฐ ๋๋ฌธ์ ์ด๋์ ๋จผ์ ์์ ํด์ผ ํ๋์ง ๊ถ๊ธํฉ๋๋ค. ์ฝ๊ฒ ํ ์ ์๋ ๊ฒ๋ถํฐ ์์ํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
ํ์ผ ํค๋๋ฅผ ๋ฃ๊ณ ํจ์๋ณ ์ ์ โโ์คํ์ผ์ ๋ฐ๊พธ๋ ๊ฒ์ ์ด๋จ๊น์?
THREE.Material = function(){
:
};
THREE.Material.prototype = {
constructor: THREE.Material,
setValues: function ( values1, value2 ) {}
getValues: function () { return this.a; }
:
};
โ
goog.provide('THREE.Material'); โ Write goog.provide('package.classname') at the first line
โ three empty lines before <strong i="10">@constructor</strong>
/**
* <strong i="11">@constructor</strong> โ Add <strong i="12">@constructor</strong> annotation to constructor
*/
THREE.Material = function(){
:
};
โ two empty lines before function definition
/**
* <strong i="13">@param</strong> {!Array.<!string>} values1 Values1 explanation โ values1 is an array of strings. values1 can't be null, and elements inside values1 can't be null.
* <strong i="14">@param</strong> {!number} value2 Value2 explanation โ value2 is a number.
*/
THREE.Material.prototype.setValue = function(values1, value2){
goog.asserts.assertArray(values1);
goog.asserts.assertNumber(value2);
:
};
/**
* <strong i="15">@return</strong> {!number} โ This function returns a non-null number.
*/
THREE.Material.prototype.getValue = function(){
return this.a;
};
๋ชจ๋ ๋งค๊ฐ๋ณ์ ์ ํ์ ์๊ฒฉํ๊ฒ ์ ํํ๊ณ ๊ฐ ์ ํ์ null์ด ์๋ ๊ฐ์ผ๋ก ๋ฐํํ๋ ๊ฒ์ด ๋ ์ฌ์ธ ๊ฒ์ ๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ADVANCED_OPTIMIZATIONS ์ปดํ์ผ ์ค๋ฅ๋ฅผ ํจ์ฌ ๋ ์ฝ๊ฒ ์ ๋ฌํ ์ ์์ต๋๋ค.
ํ , ๋๋ ์ฌ์ ํ ์ฝ๋์ ์๋ง์ ์ฃผ์์ด ์๋ ๊ฒ์ ๋ง์กฑํ์ง ์์ต๋๋ค. ๋๋๋ก ๋๋ ๋ชจ๋ ๊ฒ์ TypeScript ์ ๊ฐ์ ๊ฒ์ผ๋ก ํฌํ ํ๋ ๊ฒ์ด ๋ ์ข์ง ์์์ง ๊ถ๊ธํฉ๋๋ค.
Typescript๋ ํด๋ก์ ๋ณด๋ค ๊ฐ๋ ฅํ ํ์์ ์๋ฐ์คํฌ๋ฆฝํธ์์ ํจ์ฌ ๋ ์ข๊ฒ ๋๊ปด์ง๋๋ค. ์ด๊ฒ์ ์ ๋นํ ํฌ๊ธฐ์ ์ฝ๋ผ๋ค ๋ก๋๋ฅผ ๋จผ์ ํด๋ก์ ํธํ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ฌ์์ฑํ ๋ค์ ํ์ดํ์คํฌ๋ฆฝํธ๋ก ์ฌ์์ฑํ ํ์ ๊ฒฝํ์
๋๋ค. ๋ ์ ๊ทผ ๋ฐฉ์ ๋ชจ๋ ์ปดํ์ผ ์๊ฐ์ ๋ฒ๊ทธ๋ฅผ ์ฐพ๋ ๋ฐ ๋์์ด ๋์์ต๋๋ค. Closure๋ ๋ด ์ฝ๋์ ๋ํด ๊ฝค ์ข์ ์ต์ ํ(์ธ๋ผ์ด๋, ๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ)๋ฅผ ์ํํ์ผ๋ฉฐ nullable ํ์์ ์ง์ํฉ๋๋ค. ๋ฐ๋ฉด์ ์์ฒญ๋ ์์ ์ฃผ์์ ์ฃผ์๋ฅผ ์ฐ๋งํ๊ฒ ํ๊ณ IDE ์ง์(์ฝ๋ ์์ฑ์ ์ํ)์ typescript๋งํผ ์ข์ง ์์์ต๋๋ค. ๋ํ ECMAScript6๊ณผ ์ ์ฌํ class
ํค์๋๋ก ์ธํด typescript๋ก ํด๋์ค๋ฅผ ์์ฑํ๋ ๊ฒ์ด ํจ์ฌ ์ฝ์ต๋๋ค.
๊ทธ๋ฌ๋ ๊ทธ๊ฒ์ ๊ฐ์ธ์ ์ธ ์๊ฒฌ์ผ ๋ฟ์ ๋๋ค. ๋ ์ค์ํ ๊ฒ์ ๊ณ ๊ธ ์ปดํ์ผ ๋ชจ๋์์ ํด๋ก์ ๋ฅผ ๊ณต์์ ์ผ๋ก ์ง์ํ๊ธฐ ์ ์ ๋ชจ๋ ์์ฑ ์ก์ธ์ค๊ฐ ์ผ๊ด ์ ์ธ์ง ํ์ธํด์ผ ํ๋ค๋ ์ฌ์ค์ ๋ค์ ๊ฐ์กฐํ๊ณ ์ถ์ต๋๋ค. externs ํ์ผ์ ๊ฐ๋ ๊ฒ์ ๋์์ด ๋์ง ์์ต๋๋ค. ์์ฑ ์ก์ธ์ค๋ ๋ด๋ณด๋ด์ง์ง ์๋ ๋ด๋ถ ๊ฐ์ฒด์ ๋ํด ์ผ๊ด์ฑ์ด ์์ด์ผ ํฉ๋๋ค. ์๋ํ๋ฉด ๋น์ ์ ๊ทธ๊ฒ๋ค์ ์ ๊ทน์ ์ผ๋ก ์ด๋ฆ์ ๋ฐ๊พธ๊ฑฐ๋/์ธ๋ผ์ธ/์ ๊ฑฐํ๊ธฐ๋ฅผ _์ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ชจ๋ ํด๋์ค์ ๋ชจ๋ ๋ณ์์ ์ฃผ์์ ์ถ๊ฐํ๋ฉด ์ผ๊ด์ฑ ์๋ ์์ฑ ์ก์ธ์ค๋ฅผ ํฌ์ฐฉํ ์ ์์ง๋ง ์ ์ฒด three.js ์ฝ๋๋ฒ ์ด์ค์ ๋ํด ์ด ์์ ์ ์ํํ๋ ๋ฐ ๋ช ์ฃผ๊ฐ ๊ฑธ๋ฆฝ๋๋ค(๋ด ํ๋ก์ ํธ์ ์ฃผ์์ ์ถ๊ฐํ๋ ๋ฐ ๊ฑธ๋ฆฐ ์๊ฐ์ ์ถ์ ํ๋ฉด).
๋ง์ง๋ง์ผ๋ก three.js์ ๊ฐ์ ํฐ ํ๋ก์ ํธ๋ฅผ ๋ค๋ฅธ ์ธ์ด/ํ๋ ์์ํฌ/์ฝ๋ฉ ์คํ์ผ๋ก ์ด์ํ๋ ๊ฒ์ ์์ธํ ๋ ผ์ํด์ผ ํฉ๋๋ค.
์ข์ต๋๋ค. three.js๊ฐ ์์ฒญ๋๊ฒ ๋ง๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ ๊ธฐ๋ฅ์ ์ฃผ์์ ์ถ๊ฐํ๋ ๋ฐ ๋ช ์ฃผ๊ฐ ๊ฑธ๋ฆด ์ ์์ต๋๋ค. ํด๋ก์ ๋ณด๋ค ๋ ๋์ AltJS๊ฐ ์กด์ฌํ ์ ์์ต๋๋ค. ์ด๊ฒ์ (๋ค๋ฅธ ๊ฒ์ผ๋ก ์ด์ํ๊ธฐ๋ฅผ ๊ธฐ๋ํ๋ค๋ฉด) ๋ ๊น์ด ๋ ผ์ํด์ผ ํฉ๋๋ค.
์ฃ์กํฉ๋๋ค. ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค. ํ์ฌ ์ปค๋ฐ์ ํฌํฌํ๊ณ ํฌํ ์ ์์ํ๊ฒ ์ต๋๋ค.
์๋ ํ์ธ์,
์ด ์ฃผ์ ์ถ๊ฐ๋ฅผ ์๋ํํ ์ ์์ต๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ถ๊ฐํ ์ ์์ต๋๋ค.
build.py์ ์ถ๊ฐํ๊ณ ํด๋ก์ ์ ๊ณ ๊ธ ์ต์ ํ๋ฅผ ํ์ฑํํ๊ธฐ ์ง์ ์ ์ถ๊ฐํฉ๋๋ค.
๊ด๋ จํ์ฌ,
๋์๋ค๋ฅด ๋ง๋ค๋ฐ
2014๋
6์ 25์ผ ์์์ผ ์ค์ 6:05, Schedul Xor [email protected]
์ผ๋ค:
์ข์์, three.js๊ฐ ๊ฑฐ๋ํ๋ค๋ ๋ฐ ๋์ํฉ๋๋ค. ๋ฐ๋ผ์ ๊ฐ๊ฐ์ ์ฃผ์์ ์ถ๊ฐํฉ๋๋ค.
๊ธฐ๋ฅ์ ๋ช ์ฃผ๊ฐ ์์๋ ์ ์์ต๋๋ค. ๋ณด๋ค ๋์ AltJS๊ฐ ์กด์ฌํ ์ ์์ต๋๋ค.
ํ์. ์ด๊ฒ์ ๋ ผ์๋์ด์ผ ํฉ๋๋ค(๋ง์ฝ ๋น์ ์ด ๊ทธ๊ฒ์
๋ค๋ฅธ ๊ฒ) ๋ ๊น์ด.์ฃ์กํฉ๋๋ค. ๊ธฐ๋ค๋ฆด ์ ์์ต๋๋ค. ํ์ฌ ์ปค๋ฐ์ ํฌํฌํ๊ณ ํฌํ ์ ์์ํ๊ฒ ์ต๋๋ค.
โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/mrdoob/three.js/issues/341#issuecomment -47047966.
@ramsundhar20 , ์ ์๊ฒฌ์ผ๋ก๋
Three.js์๋ ํ์ฌ 1354๊ฐ์ ํจ์๊ฐ ์ ์๋ 163๊ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด ํฌํจ๋์ด ์์ต๋๋ค. ์, ๊ทธ๊ฒ์ ๊ฑฐ๋ํ์ง๋ง ๋๋ฌด ๋จผ ๋ชฉํ๋ ์๋๋๋ค.
// ์ด ์ฃผ์ ๊ฐ ์ ์ ํ์ง ์์ผ๋ฉด ๋๋ ต์ต๋๋ค ...
@schedul-xor ๋ค์ ๋งํ์ง๋ง, ์ ๋ ๊ธฐ๋ฅ๋ณ๋ก ์ฃผ์์ ๋ฌ๊ณ ์ถ์ง ์์ต๋๋ค./
@mrdoob ๋ค ,
๊ทํ์ ์ ์ฑ ์ ์กด์คํ์ฌ ๋ด ํฌํฌ ์๋ง ๊ธฐ๋ฅ๋ณ ์ค๋ช ์ ์ถ๊ฐํ๊ณ ์ถ์ต๋๋ค. ๋ํ ํ ๋ฆฌํ์คํธ๋ ์ ๋ ํ์ง ์์ต๋๋ค. ๋์ ์๋ three.js ์์ ์ฌํญ์ ํด๋ก์ ์คํ์ผ์ ํฌํฌ๋ก ์ด์ํ๊ฒ ์ต๋๋ค. ๊ทํ์ ํธ์์ ์ธ ๋ฐฐ๋ ค๋ฅผ ๋ถํ๋๋ฆฝ๋๋ค.
๊ทธ ์ข์ ์๋ฆฌ :)
๊ฐ์ฌํฉ๋๋ค! ์์ ์ ์์ํ๊ฒ ์ต๋๋ค.
ํด๋ก์ ์ปดํ์ผ๋ฌ์ ํจ๊ป ์ฌ์ฉํ ๊ธฐ๋ณธ three.js externs ํ์ผ์ด ์ต์ํ ์์ต๋๊น? ์ด๋ Three.js ์์ค ์ฝ๋์ ์ถ๊ฐ Google ์คํ์ผ ์ฃผ์์ด ํ์ํ์ง ์์ต๋๋ค. ์ด๋ three.js๋ฅผ ์ฌ์ฉํ๋ ์ธ๋ถ app.js์์ ๋งํฌ๋ฅผ ์ถฉ๋ถํ ์ปดํ์ผ ๊ฐ๋ฅ/๋๋ ํํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค.
๋๋ ๋ํ three.js๋ฅผ ์ํ ๊ณ ํ์ง์ ์์ ํ externs ํ์ผ์ ๋งค์ฐ ๊ด์ฌ์ด ์์ต๋๋ค. ๋ค์์ ํ๋์ด์ง๋ง ์์ ํ์ง ์์ต๋๋ค.
https://github.com/cljsjs/packages/blob/master/three/resources/cljsjs/three/common/three.ext.js
ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ด ๋ฐฉ๋ฒ์ผ๋ก ์์ํ์ฌ ์ฌ์ฉํ๋ ํญ๋ชฉ์ ์๋์ผ๋ก ์ถ๊ฐํ๋ ๊ฒ์ ๋๋ค.
์, ๋ด ํฌํ๋ฅผ ๊ณ์ฐํฉ๋๋ค. ๊ณ ๊ธ ๋ชจ๋ ์ปดํ์ผ ๊ฐ๋ฅ, 100% ์ ํ threejs ๋๋ ์ต์ํ externs ํ์ผ์ ์ด์์ ์ ๋๋ค.
์ ํ ์ถ๋ก ์ด ํฅ์๋๊ณ ํ์ํ ํผ๋์ด ์ค์ด๋ญ๋๋ค. ๋ฒ์์ ๋ณ์นญ์ด ์์ผ๋ฉด ์ฝ๋๋ฅผ ํด๋ก์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋งํผ ์ฅํฉํ๊ฒ ์ฝ์ ํ์๊ฐ ์์ต๋๋ค. ๊นจ๋ํ ์ฝ๋์ ๊ฒฝ์ฐ ์ ๋ ฅ๋ ์ธ๋ผ์ธ ๋ฌธ์๋ฅผ ์์ฑํ๋ ๊ฒ์ผ๋ก ๊ท๊ฒฐ๋ฉ๋๋ค. ๊ทธ๊ฒ๋ค์ ๋ชจ๋ ์ด์ ์ ๋ฅ๊ฐํ ๋งํผ ์ถฉ๋ถํ ๋์๊ฐ?
๊ณ ๊ธ ๋ชจ๋ + JS ์์ถ + ์ ํ ๊ธฐ๋ฐ ์ต์ ํ์ ๊ฐ์ ๋งค์ฐ ๊ณต๊ฒฉ์ ์ธ ์ค์ ์ ๋ฐ๋ ์ฝ๋๋ฅผ ์ ๊ฑฐํ ๋ฟ๋ง ์๋๋ผ ์ต์ ํ ์ปดํ์ผ๋ฌ๊ฐ ํ ์ ์๋ ๋ชจ๋ ๋ฉ์ง ์์ ์ ์ํํ ์ ์์ต๋๋ค.
๋ช ๋ช ๋ ์์ / ์ด๊ฑฐํ์ ์ซ์๋ก ๋์ฒด๋ฉ๋๋ค. ๋ํ ์ปดํ์ผ๋ฌ๋ constness๋ฅผ ์ถ์ ํ๊ณ ๋ค๋ฅธ ์์๋ก ๊ณ์ฐ์ ์ํํ๊ณ ๋ง์ง๋ง์ผ๋ก ํ์ํ ๊ณณ์ ์ผ๋ฐ ์ซ์๋ฅผ ์ฝ์ ํ ์ ์์ต๋๋ค. ์ข ์ ํ๋ฆ ์ ์ด๋ ๋ฌผ๋ก ๋ฐ๋ ์ฝ๋ ์ ๊ฑฐ์ ๋์์ด ๋ฉ๋๋ค. ๊ฒฐ๊ณผ ์์ฉ ํ๋ก๊ทธ๋จ์ ํ์ฑ ํธ์ถ ์ฌ์ดํธ๊ฐ ํ๋๋ง ์๋ ํจ์์ ์์ถ๋ ํ์์ด ์ ์์์ ์ ์ฅํ๋ ๊ฒ๋ณด๋ค ์์์ง๋ ํจ์๋ ์ธ๋ผ์ธ๋ฉ๋๋ค. ๋ค์์คํ์ด์ค๊ฐ ์ ๊ฑฐ๋ฉ๋๋ค. ๋ณดํธ๋์ง ์๋ ๋ชจ๋ ์ด๋ฆ์ ์ต์๋ก ์ถ์๋ฉ๋๋ค.
์กฐํ๋ JavaScript์์ ๋น๊ต์ ๋น์ฉ์ด ๋ง์ด ๋ญ๋๋ค. ์ด๋ฆ ๋ฐ๊พธ๊ธฐ, ์ง์์ ์ธ ์ ๊ธฐ ๋ฐ ์ธ๋ผ์ธ์ ๊ฒฐํฉํ๋ฉด ๋ง์ ์กฐํ์ ์๋ง์ ํจ์ ํธ์ถ์ด ์ ๊ฑฐ๋ฉ๋๋ค. ๊ฒ๋ค๊ฐ ์ ์ ํ ํค๋๊ฐ ์ฃผ์ด์ง๋ฉด(ํด๋ก์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๋๊ฐ ์์) ๋ชจ๋ ํ์คํ๋ WebGL ์์๋ฅผ ๋ ๋๋ฌ์ ์ ์ฉํ ์ ์์ต๋๋ค.
๊ทธ ๊ฒฐ๊ณผ ๋ ์๊ณ ๋ ๋น ๋ฅด๋ฉฐ ์์ฒด ๋ฌธ์ํ๋๊ณ ์๋์ผ๋ก ์ฌ์ฉ์ ์ ์ ๊ฐ๋ฅํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๋ฉ๋๋ค. ์ปดํ์ผ๋ฌ๋ ๋ํ ๋ ๊ณต๊ฒฉ์ ์ธ ์ค์ ์์ ๋ ๋ง์ ๋ฒ๊ทธ๋ฅผ ํฌ์ฐฉํฉ๋๋ค. ์๋ง๋ ์ฝ๋ ๊ฒํ ๊ฐ ์ฌ์์ง ๊ฒ์ ๋๋ค. ๋ง์ง๋ง์ผ๋ก ์ค์ํ ๊ฒ์ ๋๋ ํ ํจ๊ณผ์ ๋๋ค. ํด๋ผ์ด์ธํธ ์ฝ๋๋ฅผ ์ฌ์ฉ์ ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจ๊ป ์ฌ์ฉํ๋ฉด externs ํ์ผ์ ํตํด ๋ณด์กด๋ ๊ธฐํธ๋ฅผ ํ์ํ๋ ์ฝ๋๋ณด๋ค ์ง์ ์ฌ์ฐ๊ถ ๋๋์ ํจ์ฌ ๋ ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
์์์ ์ธ๊ธํ ์ง์ ์ ์ฐพ์ ์ ์์ต๋๋ค. ์์ง ํ์ดํ๋ ๋ฒ์ ์ผ๋ก ์์ ํ๋ ์ฌ๋์ด ์์ต๋๊น?
@mrdoob ๋ฉ์ธ ๋ผ์ธ์ ๋ํ ๋ง์์ ๋ณํ์ โโ๋ํ ํฌ๋ง์ด ์์ต๋๊น?
๊ธฐ๊บผ์ด ๋์๋๋ฆฌ๊ฒ ์ต๋๋ค.
@mrdoob ๋ฉ์ธ ๋ผ์ธ์ ๋ํ ๋ง์์ ๋ณํ์ โโ๋ํ ํฌ๋ง์ด ์์ต๋๊น?
ํ์ฌ ์ ๋ WebGLRenderer
๋ฆฌํฉํ ๋ง์ ์ง์คํ๊ณ ์์ต๋๋ค ๐
์ ์์๋ฅผ ๋ณ๊ฒฝํ ์ const
๋ณด๋ค๋ var
์ข์ ์ง์์ด ๋ชจ๋ WebGL์ด ๋ธ๋ผ์ฐ์ https://kangax.github.io/compat-table/es6/ (const-> ๊ธฐ๋ณธ) ๋ฐ JS ์์ง์ const
๋ํ ์ต์ ํ๋ฅผ ์์ํ๊ณ ์์ต๋๋ค. ๊ณ ์ ํ๋ ์ต์ ํ๋ฅผ ์ฌ์ฉํ์ฌ ์ ์ญ ์์์ ์๋๋ฅผ ๋์
๋๋ค.
๊ทธ๋ฌ๋ ํฅ๋ฏธ๋กญ๊ฒ๋ var
๋์ ์ ์๋ํ๊ธฐ ๋๋ฌธ์ ๋ด๊ฐ ๋งํ๋ ๊ฒฝ์ฐ์ ๊ทนํ ์ผ๋ถ์๋ง ์ ์ฉํ ์ ์์ต๋๋ค. ์ฌ์ง์ด ์์์ ๊ดํ ๊ฒฝ์ฐ์๋ ๋ง์ฐฌ๊ฐ์ง์
๋๋ค. ๋ํ JIT ์ปดํ์ผ๋ฌ๋ ์ ์์ ๊ธํ๊ธฐ ๋๋ฌธ์ ์คํ๋ผ์ธ ๋๊ตฌ์์ ์ํํ๋ ์ ์ฒด ํ๋ก๊ทธ๋จ ์ต์ ํ์ ์์ฐ์ค๋ฝ๊ฒ ๊ฒฝ์ํ ์ ์์ต๋๋ค. ๋ชจ๋ JS ์์ง์ ์ฝ๋์ ๊ตฌ์กฐ๋ฅผ ์กด์คํด์ผ ํ๋ฉฐ ์๋ฅผ ๋ค์ด ์ฝ์์ ์ด๊ณ ๊ฑฐ๊ธฐ์ ๋ฃ์ ํ๋ก๊ทธ๋จ์ ์ฐพ๊ณ ํน์ ๊ธฐ๋ฅ์ ๋์ฒดํ ์ ์์ ๊ฒ์ผ๋ก ๊ธฐ๋ํ๋ฏ๋ก ์์๋ก ๋ฆฌํฉํ ๋งํ ์ ์์ต๋๋ค.
ํด๋ก์ ์ปดํ์ผ๋ฌ ์ง์์ผ๋ก ๋์๊ฐ๊ธฐ: ๋๋ ์ฝ๊ฐ์ ์ฝ๊ธฐ์ ์คํ์ ํ์ต๋๋ค. ๋ด๊ฐ ์์๋ธ ๊ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ธ ๊ฐ์ง ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๋ค.
์ธ ๋ฒ์งธ ๊ฒ์ ๋ชจ๋ Three.js์ ๋ํ externs ํ์ผ์ด ํ์ํ๋ฉฐ IMO์ ์ด์ ์ด ๋๋ฌด ์ ๊ธฐ ๋๋ฌธ์ ๋ง์ ์์ ์ด ํ์ํฉ๋๋ค. ๊ทธ๋์ ๋๋ ์ฒ์ ๋ ๊ฐ์ง์ ๋ํด์๋ง ๋ ผ์ํ ๊ฒ์ ๋๋ค. ์ด์จ๋ ์ด๊ฒ์ด ์ ํธ๋๋ ๊ฒ์ ๋๋ค:
์ปดํ์ผ๋ฌ๊ฐ ๋ณผ ๋
anObject['aProperty']
์์ฑ ์ด๋ฆ์ ๊ฑด๋๋ฆฌ์ง ์์ต๋๋ค(๋ฌธ์์ด์ ๋ณ๊ฒฝ๋์ง ์์).
anObject.aProperty
๋ฐ๋ฉด์ anObject
๊ฐ ์ปดํ์ผ๋๋ ์์ฉ ํ๋ก๊ทธ๋จ์ ์ธ๋ถ์ ์๋ค๋ ๊ฒ์ ์์ง ๋ชปํ๋ ํ ์ปดํ์ผ๋ฌ๋ ์์ฑ ์ด๋ฆ์ ์ผ๊ด๋๊ฒ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ์ปดํ์ผ๋ฌ๋ ๋ด์ฅ ๋๋ ๋ช
์์ ์ผ๋ก ์ ๊ณต๋ _externs_๋ฅผ ํตํด ์ด๋ฅผ ์๊ณ ์์ต๋๋ค.
์ฌ๊ธฐ์ ์กฐ๋ฆฌ๋ฒ์ด ์์ต๋๋ค:
{
"camera": {
"object": {
// ...
๋จ์ํ ๋ ๊ฒ์ ๋๋ค
{
camera: {
object: {
// ...
์์ฃผ ๊ฐ๋จํ์ง ์์ต๋๊น?
์ฌ์ฉ ์ฌ๋ก 1์ JSON ํ์์ด ์ธ๋ถ ๋ฐ์ด๋๋ฆฌ ๋ฐ์ดํฐ(์์ ๋๋ webgl-loader ๋๋ o3dgc๋ฅผ ํตํด ์์ถ)๋ฅผ ํ์ฉํ ๋ ํจ์ฌ ๋ ๋งค๋ ฅ์ ์ ๋๋ค. ๋ฌผ๋ก ๊ธฐ์ ์ ์ผ๋ก ํด๋ก์ ์ง์๊ณผ ์์ ํ ์ง๊ตํ๋ ๋ ๋ค๋ฅธ ๊ธฐ๋ฅ์ ๋๋ค.
externs ํ์ผ์ ํ์ผ ํ์์ ๋ฌธ์ํํ๋ ์ค๋๋ Wiki ํ์ด์ง๋ฅผ ๋์ฒดํ ์๋ ์์ต๋๋ค :-).
๋๋ ์ด ๋ฌธ์ ๊ฐ ๊ฝค ์ค๋ซ๋์ ๋ซํ ์์๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ต๊ทผ์ ํด๋ก์ ์ปดํ์ผ๋ฌ ํ๋ก์ ํธ ๋ด์์ three.js๋ฅผ ์ฌ์ฉํ์ฌ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ์ด ํ์ด์ง๋ฅผ ๋ฐฉ๋ฌธํ์ต๋๋ค. .d.ts(typescript ์ ์ธ ํ์ผ)๋ฅผ ํด๋ก์ ์ปดํ์ผ๋ฌ ํ์ผ๋ก ๋ณํํ๋ ๋๊ตฌ๋ฅผ ์์ฑํ์ต๋๋ค. ์ด ๋๊ตฌ์ ์ค๋ช
๋ ConfirmedTyped/threejs ์ค๋ช
์ ํ์ผ์ ์ฌ์ฉํ๋ฉด ์๋ฒฝํ๊ฒ ์๋ํฉ๋๋ค.
๋๊ตฌ: https://github.com/eredo/tsd2cce ๋๋ npm install -g tsd2cce๋ฅผ ํตํด ์ค์น
๋์์ด ๋์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค...
์ ๋ฅผ ์์ ํ ๋์ด
@eredo @Corkle ๋๋ ๋ค๋ฅธ ์ฌ๋์ด tsd2cce
๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค ์ ์์ต๋๊น? ์ฒซ ๋ฒ์งธ ์ธ์๋ ๋ถ๋ช
ํ .d.ts ์ ์ ํ์ผ์ด์ง๋ง ๋ ๋ฒ์งธ ์ธ์๋ ๋ฌด์์
๋๊น? ์ด ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. https://github.com/eredo/tsd2cce/issues/6
์ค์ ๋ก 2์์ r73 d.ts๋ฅผ ์ฌ์ฉํ๋ฉด tsd2cce์์ ์ ์๋ํ์ง๋ง r73์ ๋์๊ฒ ๋๋ฌด ์ค๋๋์๋ค๋ ๊ฒ์ ์์์ต๋๋ค.
์ด์ ์ด๋ฅผ ์ํํ๋ ์ ์ ํ ๋ฐฉ๋ฒ์ tsickle์ ์ฌ์ฉํ์ฌ d.ts ํ์ผ์์ ์์ฑํ๋ ๊ฒ์ ๋๋ค.
๋ชจ๋ ์๋ ,
ํ์๊ณผ ๋ชจ๋ ์ฌ๋์ ์ด์ต์ ์ํด Google Closure Compiler์ ADVANCED_OPTIMIZATIONS ๋ฐ ๊ธฐํ ์กฐ์ ์ ์ฌ์ฉํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ ์ถ์ํ๋ ค๋ ๋ด ์์ ์ ์๋์ ๋ํด ์ฌ๊ธฐ์ ๋ณด๊ณ ํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๊ณ ๊ธ ์ต์ ํ๊ฐ ์ผ์ง Three.min.js๋ฅผ ํ์ฉํ๋ extern.js๋ฅผ ๋ง๋ค์์ต๋๋ค. ์๋ฒฝํจ๊ณผ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ๋๋ค.
์ด๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ด ์ค๋ ๋์ ์ด์ ์์ ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก extern.js๋ก ์์ํ์ต๋๋ค. ์ด ๋ฐฉ๋ฒ์ผ๋ก ์ปดํ์ผํ๋ฉด ํด๋น extern ํ์ผ์ ํฌํจ๋์ง ์์ ๋งน๊ธ๋ง๋ ์์ฑ์ผ๋ก ์ธํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์์๋์์ต๋๋ค. ํด๋ก์ ์ปดํ์ผ๋ฌ์์ --property_renaming_report
์ต์
์ ์ฌ์ฉํ์ฌ ๋งน๊ธ๋ง๋ ์์ฑ์ ์ ์ฒด ๋ชฉ๋ก์ ์ป์์ต๋๋ค. ์ด๋ฌํ ๋ชจ๋ ์์ฑ์ extern.js์ ์ถ๊ฐํ ํ ์์ฑ์ ๋ ์ด์ ๋งน๊ธ๋ง๋์ง ์์๊ณ ์ถ๋ ฅ์ SIMPLE_OPTIMIZATIONS์ ๋์ผํ์ต๋๋ค. ๊ฑฐ๊ธฐ์์ ๋๋ extern.js์ ์น์
์ ์ ํ์ ์ผ๋ก/์๋์ผ๋ก ์ฃผ์ ์ฒ๋ฆฌํ๊ธฐ ์์ํ๊ณ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฌ์ ํ ์ถ์๋ ํํ๋ก ์๋ํ๋์ง ํ์ธํ์ต๋๋ค.
์ด ์ถ์ธก ๋ฐ ํ์ธ์ ์๋ํํ๊ณ ๊ฐ๋ฅํ ํ ๋ง์ ์์ฑ ์ด๋ฆ์ ์์ ํ๊ฒ ์กฐ์ํ๋ ์๋ฒฝํ extern.js๋ฅผ ์ป๊ณ ์ถ์ต๋๋ค. THREE.JS์ ๋ํ ๋จ์ ํ ์คํธ๋ฅผ ์ฌ์ฉํ๊ณ ํ ์คํธ ์คํจ๋ฅผ ์ด๋ํ ๋งน๊ธ๋ง๋ propname์ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ๊ฒฐ์ ํ๋ ์์ด๋์ด๊ฐ ์์์ง๋ง ํ์ฌ ๋ช ๋ น์ค์์ ๋จ์ ํ ์คํธ๋ฅผ ์คํํ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ ๊ฒ ๊ฐ์ต๋๋ค(์: phantomjs ์ฌ์ฉ). (์๋ง WebGL ๋๋ฌธ์ผ ๊ฒ์ ๋๋ค) ?
์ด๋ ์ชฝ์ด๋ ์ด๊ฒ์ ๋ ์์ ์ถ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฅํ "์งํ"์ด๋ฏ๋ก ์ ์ฒด SPA ์๋ฐ ์คํฌ๋ฆฝํธ ํฌ๊ธฐ๋ฅผ ์ค์ด๋ ๋ฐ ๋์์ด ๋ฉ๋๋ค.
์ ๋ฐ์ดํธ๋ package.json ๋น๋ ํด๋ก์ ๋ช ๋ น
๋ํ build-closure ๋ช ๋ น์์ ๋ณผ ์ ์๋ฏ์ด ๋ฌธ์์ด ๋ฐ๊พธ๊ธฐ ๋ช ๋ น์ ์ฌ์ฉํ์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ๋ชจ๋ console.warn ๋ฐ console.error ๋ฉ์์ง๋ฅผ ์ ๊ฑฐํ์ต๋๋ค. ์ด๋ฅผ ํตํด ์ฝ๋์ ํน์ ์น์ ์ ์ฃผ์ ์ฒ๋ฆฌํ์ฌ ์ง๊ธ๊น์ง ์ถ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฝ 20% ์ถ์ํ์ผ๋ฉฐ ๊ฐ์ ์ ์ฌ์ง๊ฐ ์์ต๋๋ค.
@mrdoob ์ฌ๊ธฐ์์ ๋ด ๋ฐฉ๋ฒ๊ณผ ๊ฐ์
@medmr1 ๊ต์ฅํฉ๋๋ค! three.js ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ๋๋ก ํตํฉํ์ฌ ์ฑ์ ์ปดํ์ผํด ๋ณด์ จ์ต๋๊น? ์ด๋ ๊ฒ ํ๋ฉด externs ํ์ผ์ด ์ด์์ ์ผ๋ก ํ์ํ์ง ์์ต๋๋ค.
๋๋ ํด๋ก์ ๋ด์์ ์ ์ฒด๋ฅผ ๊ตฌ์ถํ๋ ค๊ณ ์๋ํ์ง ์์์ต๋๋ค. ๊ทธ๊ฒ์ ์ ์๋ํ ์ ์์ง๋ง ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์ฐธ์กฐ๋๋ ์ผ๋ถ ์์ฑ์ ๋งน๊ธ๋งํ๋ ๊ฒ๊ณผ ๊ด๋ จํ์ฌ ์ฌ์ ํ ๋ฌธ์ ๊ฐ ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๊น? var thing = ShaderLib[ shaderType + "BumpMapFrag"]
์ ๊ฐ์ IE ํญ๋ชฉ ๊ทธ๋ฌ๋ ์๋ง๋ ๋ง์ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์๊น์?
์, var thing = ShaderLib[ shaderType + "BumpMapFrag"]
์ ๊ฐ์ ํญ๋ชฉ์ ๊ณ ๊ธ ์ต์ ํ๋ก ์ธํด ์ค๋จ๋ฉ๋๋ค. ์์ฑ ์ฐธ์กฐ๋ ์ ์ ์ผ๋ก ๋ถ์ํ ์ ์์ด์ผ ํฉ๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
function(shaderType) {
if (shaderType == "a") {
return ShaderLib.aBumpMapFrag;
}
if (shaderType == "b") {
return ShaderLib.bBumpMapFrag;
}
...
๋๋ถ๋ถ์ ์ฌ๋๋ค์ด Closure Compiler๋ก ์ฑ์ ์ปดํ์ผํ์ง ์๊ณ ๊ฒ์๋ ์ถ์ ๋ฒ์ ๋ง ์ฌ์ฉํ๋ฏ๋ก ์ฌ๋ฐ๋ฅธ externs ํ์ผ์ ๋น๋ํ๋ ๊ฒ์ ํ๋ก์ ํธ ์ ์ฒด์ ํ์คํ ๋ ์ ๋ฆฌํฉ๋๋ค.
extern ๋์
https://github.com/google/closure-compiler/wiki/Annotating-JavaScript-for-the-Closure-Compiler#export -export-sometype
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํ , ๋๋ ์ฌ์ ํ ์ฝ๋์ ์๋ง์ ์ฃผ์์ด ์๋ ๊ฒ์ ๋ง์กฑํ์ง ์์ต๋๋ค. ๋๋๋ก ๋๋ ๋ชจ๋ ๊ฒ์ TypeScript ์ ๊ฐ์ ๊ฒ์ผ๋ก ํฌํ ํ๋ ๊ฒ์ด ๋ ์ข์ง ์์์ง ๊ถ๊ธํฉ๋๋ค.