์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ,
์ ๋ ๋ชจ๋ ์ฌ๋์ด ES6 ํด๋์ค๋ก์ ์ด์ ๊ณผ ๊ด๋ จ๋ ๋ฌธ์ ์ ์งํ ์ํฉ์ ์ถ์ ํ๊ณ ์ต์ ์ ๋ณด๋ก ์ ๋ฐ์ดํธํ๋ ๋ฐ ๋์์ด ๋๋๋ก ์๋ก์ด ๋ฌธ์ ๋ฅผ ๋ง๋๋ ๊ฒ์ด ์ ์ ํ๋ค๊ณ ๋๊ผ์ต๋๋ค. ์ด๊ฒ์ ๋ฆด๋ฆฌ์ค ๋ฌธ์์๋ ์ ์ฉํด์ผ ํฉ๋๋ค.
๋์์ด ํ์ํ์ ๋ถ๋ค์ ์๋ ๋ชฉ๋ก์ ์ดํด๋ณด๊ณ ์ด๋ค ์์ ์ ํ๊ณ ์ถ์์ง ์๋ ค์ฃผ์ญ์์ค. ํด๋์ค๋ณ PR์ ์ ํธํ์ง๋ง ์ผ๋ถ ํด๋๋ ํ ๋ฒ์ ๋ชจ๋ ์ํํ ์ ์์ต๋๋ค . ํน์ ํ์ผ์ ๋ณํํ ์ ์๋ ๊ฒฝ์ฐ ํ์ผ ์๋จ์ ๋ฉ๋ชจ๋ฅผ ์์ฑ ํ๊ฑฐ๋ PR์์ ์ ์๊ฒ ping์ ๋ณด๋ด์ฃผ์๋ฉด ์๋์ ๋ฉ๋ชจํ๊ฒ ์ต๋๋ค.
๋ ธํธ:
Class.prototype.is**
์ ๊ฒฝ์ฐ Object.defineProperty( this, 'is**', { value: true } );
์ฌ์ฉnew this.contructor()
!= new Foo()
... ๊ด๋ จ ํ ๋ก .examples/objects/MarchingCubes.js
์์ ์ฌ์ฉ๋๋ฉฐ ๊ธฐ๋ค๋ ค์ผ ํฉ๋๋ค. ์ฐธ์กฐ #20030examples/js
๋ฅผ ๋ค๋ฃฐ ๋๊น์ง ๊ธฐ๋ค๋ฆด ๊ฒ์
๋๋ค.์์ง 2๋ถ ์ค๋น๊ฐ ๋์ง ์์์ต๋๋ค. ํ ๋ก ์ด ํ์ํฉ๋๋ค.
์ค๋์ค ํด๋์ ๋๋จธ์ง ๋ถ๋ถ์์ dibs๋ฅผ ํธ์ถํ๊ฒ ์ต๋๋ค ๐
@mrdoob๋ , examples ํด๋ ๋ด์์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ช ํํ ์๋ ค์ฃผ์๊ฒ ์ต๋๊น?
๋๋ #19989๊ฐ ๋ณํ์ ์ํด ๋ฐ๋ก ๊ฐ๋ ๊ฒ์ ์ข์ํ์ง๋ง ๊ทธ๋ ๊ฒ ํจ์ผ๋ก์จ utils/modularize.js
๋ ๊ทธ ์์
์ ๋ฎ์ด์ฐ์ง ์๊ณ ๋ examples/js
ํด๋์์ ๋ ์ด์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ์ด๊ฒ์ examples/js
์ ์ง ๊ด๋ฆฌ์ ๋๊ณผ examples/jsm
์์์ ํ์ํฉ๋๊น?
ํธ์ง: ๋๊ธ ์ฐธ์กฐ
์ํ ํด๋์ ๋๋จธ์ง ๋ถ๋ถ์์ ์์ ํ ์ ์์ต๋๊น?
์ํ ํด๋์ ๋๋จธ์ง ๋ถ๋ถ์์ ์์ ํ ์ ์์ต๋๊น?
๋๋ ๋น์ ์ ์ํด ์ต์ ์ ๋คํ๊ณ ์์ต๋๋ค. ์ผ๋ง ์ ์ ์๋ํ ๊ฒ์ด ๊ธฐ์ต๋์ง๋ง @Mugen87 ์ด ๊ฒฐ๊ตญ ๋์๊ฒ ๋ง์ ๊ฑธ์์ต๋๋ค. ์ ์ฒด ํด๋๋ฅผ ํ ๋ฒ์ ๋ณํํ๋ ๊ฒ์ ๊ฑฐ์น ๋ผ์ด๋ฉ์ ์ค๋นํ ์ ์๊ธฐ ๋๋ฌธ์ ์ด์ ๋ํ ๊ฐ๋ตํ ์์ฝ์ ํ ์คํธ๋ฅผ ์งํํ๋ฉด์ ์งํ๋์์ต๋๋ค. ๋ถ๋ถ์ ๋๋ ํ์ผ๋ณ ํ์ผ๋ ํ์ํฉ๋๋ค.
@DefinitelyMaybe src/animation/
์์ ๋ง์ด๊ทธ๋ ์ด์
ํ ์ ์๋ ๋ค๋ฅธ ํญ๋ชฉ์ ๋ณผ ์ ์์ต๋๋ค.
src/core
์ ์ผ๋ถ: https://github.com/mrdoob/three.js/pull/20008
๋ฉ์ง. ํด๋๊ฐ ๊ฑฐ์ ์์ฑ๋ ๊ฒ ๊ฐ์์. src/core/Object3D.js
๋ฐ src/core/BufferGeometry.js
๋จ์๊น์?
src/core/Object3D.js
๋ฐsrc/core/BufferGeometry.js
๋จ์๊น์?
์, Object3D
๋ฐ BufferGeometry
์ ์์กดํ๋ ES5 ํด๋์ค๊ฐ ๋ง์ด ์์ต๋๋ค.
์, ์ด๊ฒ์ ๋ํด ๋๋ผ์ด ์ง์ ์ด ์์์ต๋๋ค ๐
src/lights
์ ์ ํ๋ฅผ ๊ฒ๋๋ค. ์์ ๋ชฉ๋ก์์ src/extras
๋ฐ src/renderers
๋ฅผ ์ด๋ฉด ๊ฐ๊ฐ์ ์์
ํ ํด๋๊ฐ ๋ ๊ฐ ์์ต๋๋ค.
๋ชจ๋ ์๋ ,
์ด ํจํด๊ณผ ๊ด๋ จํ์ฌ ์ฐ๋ฆฌ๋ ๋ฌด์์ ํ๊ณ ์์์ต๋๊น?
foo.prototype = Object.assign( Object.create( bar.prototype ), {
...
isDirectionalLight: true,
...
} );
์ง๊ธ์ด์ผ:
class foo extends bar {
static isDirectionalLight = true;
constructor( ) {
...
}
}
๋๋
class foo extends bar {
constructor( ) {
this.isDirectionalLight = true;
}
}
ํ์ฌ๋ 2์ฐจ๋ฅผ ํ๊ณ ์๋๋ฐ, ๊ทธ๋ฌ๊ณ ๋ณด๋ 1์ฐจ์ ๊ฐ๊น์ ๋ ์๋๊ฐ ์๋๊น ์ถ๋ค.
์ฒ์์ ์ด๋ฌํ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๋ฌด์์ธ์ง ์๋ ์ฌ๋์ด ์์ต๋๊น?
class foo extends bar { constructor( ) { this.isDirectionalLight = true; } }
โ๏ธ ๋ง์ต๋๋ค. isDirectionalLight
๋ ์ข์ ์์ด๋ฉฐ ๋ค์๊ณผ ๊ฐ์ด ์ฌ์ฉ๋ฉ๋๋ค.
$ git grep 'isDirectionalLight\b' src/ examples/js ':!*.ts'
examples/js/exporters/GLTFExporter.js: if ( light.isDirectionalLight ) {
examples/js/exporters/GLTFExporter.js: } else if ( object.isDirectionalLight || object.isPointLight || object.isSpotLight ) {
examples/js/renderers/SVGRenderer.js: } else if ( light.isDirectionalLight ) {
examples/js/renderers/SVGRenderer.js: if ( light.isDirectionalLight ) {
src/lights/DirectionalLight.js: isDirectionalLight: true,
src/renderers/webgl/WebGLLights.js: } else if ( light.isDirectionalLight ) {
์ฆ, ์ผ๋ถ ํ๋กํ ํ์ ์์ฑ์ ์ ์งํ๋ฉด ์ฑ๋ฅ์ด ํฅ์๋ ์ ์์ต๋๋ค.
class foo extends bar {
}
foo.prototype.baz = heavyThing;
์ฌ๋ก๋ณ๋ก PR์ ๋ด์ฉ์ ๊ฒํ ํ ์ ์์ต๋๋ค.
src/renderers/webgl
์ ์๊ฒ ์ต๋๋ค ๐ ๐
ํ์ด์ ๋น๋๋ค. ๊ทธ ์์๋ ๊ฝค ๋ง์ ์ผ์ด ์ผ์ด๋๊ณ ์์ต๋๋ค.
์๋
ํ์ธ์, ์ ๋ src/renderers/webgl
์ ๋ณํํ์ต๋๋ค. ๊ทธ๊ฒ์ ๋ฏธ์ณค๋ค. ๋๋ ๋ชจ๋ ๊ฒ์ ๊ณ์ ๊ฒํ ํ๊ณ PR์ ์์ํ๊ธฐ ์ ์ #20039๋ฅผ ๊ธฐ๋ค๋ฆด ๊ฒ์
๋๋ค.
๐
๊ธฐ๋๋๋ค
@yomotsu ๊ฐ ์ํ PR์์ is*
์์ฑ์ ๋ํด ์ฝ๊ธฐ ์ ์ฉ ๊ฒํฐ๋ฅผ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์์์ฐจ๋ ธ์ต๋๋ค... ์๋ง๋ ๊ทธ๊ฒ ์ต์ ์ผ ๊ฒ์
๋๋ค!
class foo extends bar {
get isDirectionalLight() {
return true;
}
}
ํ ๊ทธ๋ด ์๋ ์์ต๋๋ค. ๋๋ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๋ณ์๋ฅผ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ์ฌ๋ฌ ๊ณณ์์ ์๋ํ๋ค๋ ๊ฒ์ ์๊ณ ์์ต๋๋ค. ์ด๊ฒ์ ๋์๊ฒ ๊ฝค ๊ด์ฐฎ์ ํจํด์ฒ๋ผ ๋ณด์ธ๋ค.
์ด ๋ฐฉ๋ฒ์ธ ๊ฒ ๊ฐ์ต๋๋ค .
foo.prototype.isDirectionalLight = true;
src/objects
์(๋ฅผ) ์กฐ์ฌํ ๊ฒ์
๋๋ค. ๋ด๊ฐ ๋ฌผ๊ฑด์ ๋ถ์์ง ์๊ณ ์ผ๋ง๋ ๋ฉ๋ฆฌ ๊ฐ ์ ์๋์ง ๋ณผ ๊ฒ์
๋๋ค.
์ํ ํด๋๊ฐ ๋ง ์์ฑ๋์์ต๋๋ค.
( ๋ณด๊ฐ ํด๋์ค๋ ์ ์ธ๋ฉ๋๋ค. )
๋ชจ๋ ์๋
,
src/objects
์ ํตํด ์์
์ ๋ค์ ์์ํ๊ฒ ์ต๋๋ค. ๊ทธ ๋์ ๋ค๋ฅธ ์ฌ๋์ด ๊ฐ์ ธ๊ฐ ์ ์์ต๋๋ค.
์ผ, ์ํ์ด! ๐ช
ํ ๊ฐ์ง ๋ฌธ์ , foo.prototype.isDirectionalLight = true;
๋ ํด๋์ค๊ฐ ์ ์๋ฆฌ์์ ์์ ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ํธ๋ฆฌ ํ๋ค๊ธฐ๋ฅผ ํ์ฉํ์ง ์์ต๋๋ค.
๋ํ ์ด ์์ ์์ ์ ๋ ์ฐ๋ฆฌ๊ฐ ์ง๊ธ ํด๋์ค๋ฅผ ์ฌ์ฉํ๊ณ ์๊ณ ํ๋กํ ํ์
์ ์ถ์ํํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ ์ด์ ํ๋กํ ํ์
์ ๋ง์ง์ง ๋ง ๊ฒ์ ๊ฐ๋ ฅํ ์ ์ํฉ๋๋ค.
์ด ํจํด์ ์ด๋ป์ต๋๊น? ๊ทธ๊ฒ์ ๋์๊ฒ ๊ฐ์ฅ ๋ช ๋ฐฑํด ๋ณด์ธ๋ค.
constructor( x = 0, y = 0, z = 0 ) {
Object.defineProperty( this, 'isVector3', {
value: true,
enumerable: false,
writable: false,
configurable: false,
} );
๋์ผํ ์์ ์ ์ํํ์ง๋ง ์ฝ๊ฐ ๋ ์์์ ์ธ ์งง์ ๋ฒ์ ๋ ์์ต๋๋ค.
constructor( x = 0, y = 0, z = 0 ) {
Object.defineProperty( this, 'isVector3', { value: true } );
@marcofugaro ์๋ฒ์ ์ด ์์ด์ธ๋ฆฌ๋ค์๐
์ข์, PR์ ํ๋ค.
๋ํ ์ด PR ์ ์ํด ์ฐจ๋จ๋์๊ธฐ ๋๋ฌธ์ ํด๋์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๋ฐฉ๊ธ ์์์ต๋๋ค.
๋ ์ธ๊ธฐ ์๋ @rollup/plugin-babel ์ ์ฌ์ฉํ๋๋ก ๋น๋ ํ์ดํ๋ผ์ธ์ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
๋ ์ธ๊ธฐ ์๋ @rollup/plugin-babel์ ์ฌ์ฉํ๋๋ก ๋น๋ ํ์ดํ๋ผ์ธ์ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
์ํ๋ ๊ฒฝ์ฐ ํด๋น ๋ฌธ์ ๋ฅผ ์์ ํ์ญ์์ค.
๋ค, PR์ ํด์ฃผ์๋ฉด ์ข์ ๊ฒ ๊ฐ์์ ๐
@marcofugaro , @mrdoob ์ผ! ์, ๋ถํํฉ๋๋ค
์๋
ํ์ธ์ ์ฌ๋ฌ๋ถ, #20014๋ฅผ Object.defineProperty
๋ก ์
๋ฐ์ดํธํ๊ณ AnimationClip
์ ํ์ ๋ถ๋ฅ๋ ์์ ํ์ต๋๋ค. ๊ฒํ ํ ์๊ฐ์ด ์๋ ์ฌ๋์ด ์์ผ๋ฉด ์ถ๊ฐ๋ก ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ๐ ๐ ๐
๊ด์ฐฎ์. ์ด์ r120
์ด(๊ฐ) ์ถ์๋์์ต๋๋ค... ๋๊ตฐ๊ฐ ์ ๋๋ก ํธ๋ฆฌ ์์ดํฌ๋๊ณ ์๋์ง ํ์ธํ ์ ์์ต๋๊น?
๊ทธ๊ฒ์ ๋๋ฅผ ์ํด ์๋ํ๋ ๊ฒ ๊ฐ์ง๋ง ์ฝ๊ฐ.
webpack์ด ํฌํจ๋ ๋ฒ๋ค ํ์ผ์ ๋ ์ด์ ArrowHelper
๊ฐ ํ์๋์ง ์์ต๋๋ค. ํ์ง๋ง ์ฌ์ ํ ๋ถํ์ํ ์ฝ๋๊ฐ ๋ง์ด ์กด์ฌํฉ๋๋ค๐ข
๋ฒ๋ค ํฌ๊ธฐ๋ ์ด๋ป์ต๋๊น? ์ด์ ๊ณผ ์ดํ
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ, ์ ๋ ์์ด๋์ด๊ฐ ์์ด Shakediff ๋ผ๋ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ต๋๋ค. ๋ค์๊ณผ ๊ฐ์ด ์คํํ ์ ์์ต๋๋ค.
$ shakediff builds/three.module.js Color
๊ทธ๋ฌ๋ฉด Color
๋ฅผ ๊ฐ์ ธ์ค๋ ์์ ๋ชจ๋์ด ์์ฑ๋๊ณ 3์ผ๋ก ๋ฌถ์ธ ๋ค์ ๋กค์
์ ๋ฉํ๋ฐ์ดํฐ์์ 3์ diff๊ฐ ์์ฑ๋ฉ๋๋ค. ์์ธํ diff๋ก ์์
ํ๊ฑฐ๋ diffstat
์ ํ์ดํํ์ฌ ๋์ ์์ค์ ์ป์ ์ ์์ต๋๋ค.
$ shakediff build/three.module.js Color | diffstat
three.module.js | 2878 --------------------------------------------------------
1 file changed, 1 insertion(+), 2877 deletions(-)
์ง๊ธ์ ํจํค์ง๊ฐ ์์ง๋ง ์ฌ์ฉํด ๋ณด๊ณ ์ถ๋ค๋ฉด ๋ด ์ ์ฅ์์์ ์ค์นํ ์ ์์ต๋๋ค. ํผ๋๋ฐฑ ๊ฐ์ฌํฉ๋๋ค! โ๏ธ
npm -g i ianpurvis/shakediff.git
@mrdoob๋ , examples ํด๋ ๋ด์์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ช ํํ ์๋ ค์ฃผ์๊ฒ ์ต๋๊น?
์ ๋ #19989๊ฐ ๋ณํ์ ์ํด ๋ฐ๋ก ๊ฐ๋ ๊ฒ์ ์ข์ํ์ง๋ง ๊ทธ๋ ๊ฒ ํจ์ผ๋ก์จ utils/modularize.js๋ ๊ทธ ์์ ์ ๋ฎ์ด์ฐ์ง ์๊ณ examples/js ํด๋์์ ๋ ์ด์ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ์ด๊ฒ์ด ์ฐ๋ฆฌ๊ฐ examples/js๋ฅผ ์ ์งํ๋ ๊ฒ์ ๋๋ด๊ณ examples/jsm๋ง ์์ํ๋ ๊ฒ์ ์๋ฏธํฉ๋๊น?
@mrdoob์ ๋ํ ํ๊ฒฐ์ ๋ฌด์์ ๋๊น? ์์ ๋ฅผ ES6 ํด๋์ค๋ก ๋ณํํ ์ ์๋๋ก jsm์ ์ง์ค์ ์์ค๋ก ๋ง๋๋ ๊ฒ์ด ์๋ฏธ๊ฐ ์์ต๋๊น? ์๋ง๋ ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ๋ฐฉํฅ์ผ๋ก์ ๋ณํ์ ์ง์ํ๋๋ก utils/demodularize.js๋ฅผ ๋ง๋ค ์ ์์๊น์?
examples/js
examples/jsm
๋ 2020๋
12์์ ์ ๊ฑฐ๋ฉ๋๋ค. ๊ทธ๋๊น์ง๋ ํด๋์ ๋ด์ฉ์ ES6 ํด๋์ค๋ก ์
๊ทธ๋ ์ด๋ํ์ง ์๊ณ ํด๋๋ฅผ ๊ทธ๋๋ก ๋์ด์ผ ํฉ๋๋ค. ๊ทธ ๋ ์ง ์ดํ์๋ examples/jsm
ํ์ผ์ด ์ ๋ณด์ ์ถ์ฒ๊ฐ ๋๋ฉฐ ES6 ํด๋์ค๋ก ์
๋ฐ์ดํธ๋ ์ ์์ต๋๋ค.
ํ๋ค๋ฆฌ๋ ๋์ ๋ชจ๋ ๋ฒ์ ๋ณ์๊ฐ ์ ๊ฑฐ๋์ง ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. build/three.module.js:43059
๋ค ๊ฐ์ ๋ณ์๋ก ๋์์ ๋ณผ ์ ์์ต๋๋ค.
const _position$3 = new Vector3();
const _quaternion$4 = new Quaternion();
const _scale$2 = new Vector3();
const _orientation$1 = new Vector3();
์ฐ๋ฆฌ๋ ์ด๊ฒ์ ํน๋ณํ ์ฃผ์์ผ๋ก ์์ํ๊ฒ ํ์ํด์ผ ํ ๊ฒ ๊ฐ์ต๋๋ค-
const _position = /*@__PURE__*/ new Vector3();
๋ชจ๋ ์ฌ๋์๊ฒ ํจ๊ณผ๊ฐ ์์ต๋๊น?
๋์๊ฒ ์ข์ ์๋ฆฌ ๐
์ข์์, Color
๋ก ๋๋ฌด๊ฐ ํ๋ค๋ฆด ๋ ๋ ๋ค๋ฅธ 144์ค์ ์ญ์ ํฉ๋๋ค ๐ฅณ
์๊ฐ์ด ์์ ๋ ๋ชจ๋ ๊ณต๊ฐ PR์ /*@__PURE__*/
์ฒ๋ฆฌํ์ญ์์ค!
@ianpurvis ๋๋จํด! ๋กค์ ์ ์ฌ์ฉํ๊ณ ์์ต๋๊น? ๊ตฌ์ฑ์ ๊ณต์ ํ ์ ์์ต๋๊น?
@mrdoob ๋ง์นจ๋ด ๋ช ๊ฐ์ง ํ ์คํธ๋ฅผ ํ๊ฒ ๋์์ต๋๋ค. ๋๋ ๊ฐ์ธ์ ์ผ๋ก webpack์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ช ๊ฐ์ง ํ ์คํธ๋ฅผ ํ์ต๋๋ค. ๊ด์ฌ ์๋ ์ฌ๋์ด ์์ผ๋ฉด ๋ด ๊ตฌ์ฑ์ด ์ด๋ ์ต๋๋ค.
์ด ์ฝ๋๋ฅผ ํ ์คํธํ์ต๋๋ค
import * as THREE from 'three'
console.log(THREE.WebGLRenderer)
๋ญ๊ฐ ๋๋ฌด๊ฐ ํ๋ค๋ฆฌ๊ณ ์์ต๋๋ค. ํ๋ฅญํฉ๋๋ค!
์์ธํ ์ดํด๋ณด๋ฉด AudioListener
ํด๋์ค๊ฐ ๋ฒ๋ค์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ข์ ์์์
๋๋ค!
Webpack์ ๋ํ @ianpurvis๊ฐ ์ง์ ํ ์ฌ์ฉํ์ง ์๋ ๋ณ์๋ฅผ ์๋์ผ๋ก ์ ๊ฑฐํฉ๋๋ค.
๊ทธ ํ ํด๋์ค ์ธ๋ถ์ ์ ์๋ ์ ์ ๋ฉ์๋๋ฅผ ํ ์คํธํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๋ถํํ๋ ์ด๊ฒ์ ํด๋์ค๋ฅผ ํธ๋ฆฌ๋ฅผ ํ๋ค ์ ์๊ฒ ๋ง๋ญ๋๋ค.
์ข ๋ ํํค์น ํ DodecahedronGeometry
์ ๊ฐ์ ๊ธฐํํ ํด๋์ค๋ ์ด๋์๋ ์ฌ์ฉ๋์ง ์์์ง๋ง ์ฌ์ ํ ๋ฒ๋ค์ ์์์ ๋ฐ๊ฒฌํ์ต๋๋ค.
๋์ค์ ๋๋ ์ด๊ฒ์ด $ three.module.js
Geometries
๊ฐ์ฒด ๋๋ฌธ์ด๋ผ๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.
ObjectLoader์์ ์ด์ ๊ฐ์ ํจํด ์ ์ฌ์ฉํ ๋ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. ์ด๊ฒ์ ObjectLoader
๋ฅผ ํด๋์ค๋ก ๋ง๋ค๋ฉด ์ฌ๋ผ์ง ๊ฒ์ด๊ณ src/geometries
๋ tree-shakeable์ด ๋ ๊ฒ์
๋๋ค.
@marcofugaro https://github.com/mrdoob/three.js/pull/20239
@marcofugaro ๋ฌธ์ ์์ต๋๋ค. ๋กค์ ๊ตฌ์ฑ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
@marcofugaro ์๋
ํ์ธ์, ์ ๋ shakediff์ ์นํฉ ์ง์์ ์ถ๊ฐํ์ต๋๋ค... ์ด ์นํฉ ๊ตฌ์ฑ ์ด ๊ด์ฐฎ์ ๋ณด์ด๋์? terser๋ webpack์ tree-shaking์์ ์ฃฝ์ ์ฝ๋ ์ ๊ฑฐ๋ฅผ ๋ด๋นํ๊ธฐ ๋๋ฌธ์ ์ด๋ฌํ ์ถ๋ ฅ์์ โโ์ผ๋ถ ๋ณํ ์ํฐํฉํธ๋ฅผ ๋ฐฉ์งํ๊ธฐ ์ด๋ ต์ต๋๋ค. ๊ทธ๋ฌ๋ ๊ณต๋ฐฑ์ด ๋นํ์ฑํ๋ ํ์คํ ๊ทธ๋จ ์๊ณ ๋ฆฌ์ฆ์ ์ฌ์ฉํ์ฌ diff๋ฅผ ์ํํ๋ฉด ๊ด๋ฆฌํ ์ ์์ต๋๋ค. ์ค๋ ๋ฐค์ ๋น ๋ฅธ ํ
์คํธ์์ webpack์ /*@__PURE__*/
๋ฐ /*#__PURE__*/
๋ชจ๋๋ฅผ ์๋ฝํ๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค. ๋๋ ์ฐ๋ฆฌ๊ฐ ํ๋ ๋๋ ๋ค๋ฅธ ๊ฒ์ ๋ํด ํ์คํํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ด์ผ ๋...
@ianpurvis ๋ด ์ปดํจํฐ์ shakediff
๋ฅผ ์ค์นํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค...
์ด์จ๋ ๊ฐ๋จํ ํ ์คํธ๋ฅผ ํ์ต๋๋ค.
import { WebGLRenderer } from './src/renderers/WebGLRenderer.js';
console.log( new WebGLRenderer() );
๊ทธ๋ฆฌ๊ณ Geometry
๊ฐ ๋๋ฌด๋ฅผ ํ๋๋ ๊ฒ์ด ์๋์ ์์์ฐจ๋ ธ์ต๋๋ค. https://github.com/mrdoob/three.js/pull/20394 ์์ ํฉ๋๋ค.
๋๋ ๋ค์์ ์๋ํ๋ค.
import { Vector3 } from './src/math/Vector3.js';
console.log( new Vector3() );
๊ทธ๋ฆฌ๊ณ ๋กค์ ์ด ์ฌ์ฉํ์ง ์๋ ๋ฉ์๋๋ฅผ ํธ๋ฆฌ ์์ดํฌํ์ง ์๋๋ค๋ ๊ฒ์ ์์์ฐจ๋ ธ์ต๋๋ค... ๐
@mrdoob ๋ถํํ๋ ๊ฐ๊น์ด ์ฅ๋์ ํด๋์ค ๋ฉ์๋๋ ์ด๋ค ๋๊ตฌ๋ก๋ ํธ๋ฆฌ๋ฅผ ํ๋ค ์ ์์ต๋๋ค. ์ ์ฅ, ์ถ์์กฐ์ฐจ ํ ์ ์์ด!
์ด๋ ์๋ฐ์คํฌ๋ฆฝํธ์์ ๋์ ์ผ๋ก ๊ฐ์ฒด ์์ฑ์ ์ก์ธ์คํ ์ ์๋ ๊ฒ์ฒ๋ผ this['I am a string']
์ ๊ฐ์ ๋ฉ์๋์ ์ก์ธ์คํ ์ ์๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๋ฌํ ์ด์ ๋ก ๋๊ตฌ๋ ๋ฉ์๋๋ฅผ ํธ์ถํ ์ง ์ฌ๋ถ์ ๋ฐฉ๋ฒ์ ๋ฏธ๋ฆฌ ์์ง ๋ชปํฉ๋๋ค( this[variable]
์ ์์).
์ด๊ฒ์ ES6 ํด๋์ค์ ํจ์ ํด๋์ค ๋ชจ๋์ ๋ํด ๋์ผํฉ๋๋ค. ์๋ฅผ ๋ค์ด three.min.js
์์ ๋ฉ์๋๋ ๊ฐ์ฒด ์์ฑ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ทธ๋๋ก ์ ์ง๋ฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์๋ฌด๋ this['I am a string']
์ ๊ฐ์ ๋ฉ์๋๋ฅผ ํธ์ถํ์ง ์์ ๊ฒ์ผ๋ก ์์๋๋ ๋น๋ "์๊ฒฉํ" ๋ชจ๋๋ฅผ ์ ์ํ์ง ์์์ต๋๋ค.
๐คทโโ๏ธ
๋ค์์ ๋กค์ ์ ๊ดํ ์ด ์ฃผ์ ์ ๋ํ ํ ๋ก ์ ๋๋ค. https://github.com/rollup/rollup/issues/349
ํด๋์ค ๋ฉ์๋๋ ์ด๋ค ๋๊ตฌ๋ก๋ ํธ๋ฆฌ๋ฅผ ํ๋ค ์ ์์ต๋๋ค. ์ ์ฅ, ์ถ์์กฐ์ฐจ ํ ์ ์์ด!
์ฃผ์ ๋ฅผ ๋ฒ์ด๋์ ์ฃ์กํฉ๋๋ค. ์ปดํ์ผ๋ฌ์๊ฒ "๊ณต๊ฐ"์ "๋น๊ณต๊ฐ"๊ฐ ๋ฌด์์ธ์ง์ ๋ํ ํํธ๋ฅผ ์ ๊ณตํ๋ฉด ์ถ์๊ฐ ์๋ํ๋๋ก ํ ์ ์์ต๋๋ค. ๊ณผ๊ฑฐ์๋ ์ด๋ฅผ ์ํด ๋ฉ์๋์ "_" ์ ๋์ฌ๋ฅผ ์ฌ์ฉํ์ต๋๋ค. https://github.com/developit/microbundle/wiki/mangle.json์ ์ฐธ์กฐํ์ธ์. ๊ทธ๋ฌ๋ ๋ถํํ๋ ๋๋ฌด๋ฅผ ํ๋๋ ๋ฐ ์ด์ ์ ์ฌํ ๊ฒ์ด ๊ฐ๋ฅํ์ง ์ฌ๋ถ๋ ์ ์ ์์ต๋๋ค. ๐
์ฐ! #20395 ๋ณํฉ๋์์ต๋๋ค! ์ข์ ๋ฌผ๊ฑด @marcofugaro
๋ฐ๋ฒจ๊ณผ ๊ธฐํํ์ ๋ํ ๋ฉ์ง ์์์ ๋๋ค!
@ianpurvis ๋ด ์ปดํจํฐ์ shakediff๋ฅผ ์ค์นํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค...
@mrdoob ํ , Parcel์ด ํด๋น ๋ฒ์ ์ fsevent์ ์ข ์๋ ๊ฒ ๊ฐ์ต๋๋ค... ์๋ง๋ ๋ ๋์ ๊ฒ์ผ๋ก ๊ณ ์ ํ ์ ์์ต๋๋ค.
์ฐธ๊ณ ๋ก ์ฌ๊ธฐ์ Webpack 5์ ํธ๋ฆฌ ๋จ๋ฆผ ๊ฐ์ ์ฌํญ ์ ๋ํ ์ข์ ์ ๋ณด๊ฐ ์์ต๋๋ค...
์ฐธ๊ณ ๋ก ์ฌ๊ธฐ์ Webpack 5์ ํธ๋ฆฌ ๋จ๋ฆผ ๊ฐ์ ์ฌํญ ์ ๋ํ ์ข์ ์ ๋ณด๊ฐ ์์ต๋๋ค...
Progress... Rollup๋ ์ด๊ฒ์ ๊ตฌํํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค...
์๋ ํ์ธ์ ์ฌ๋ฌ๋ถ,
.is**Classname**
์์ฑ๊ณผ this.type = **Classname**
์ ๋ชฉํ๋ ์ ํํ ๋ฌด์์
๋๊น?
๋๋จธ์ง๋ ์ค๋๋ ์์ฌ ํด๋์ค ํจํด์ด ์๋๊ฐ์?
๊ทธ๊ฒ์ ์์ ํ ์์ ๊ณ ์ด ์ฌ์ฉ๋ฒ์ ์ผ๋ฐ์ ์ธ ์ ํ ๊ฒ์ฌ ๋ฐฉ์์ผ๋ก ๋์ฒดํ์ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
obj instanceof Vector3 // prefer this one for inheritance
// or
obj.constructor === Vector3 // prefer this for no inheritance
๋ด ๋ง์, ES ํด๋์ค๋ก ์ด๋ํ๋ ๊ณผ์ ์ ์ผ๋ถ๋ก ๊ฐ์ฒด์ ์ด๋ฏธ ์ฒดํฌ ๊ฐ๋ฅํ ์ฌ๋ฐ๋ฅธ ์ ํ์ด ์์ ๊ฒ์ ๋๋ค...
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด์ ์ obj instanceof Vector3
๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
๊ทธ๋ฌ๋ Rich Harris๋ ๋ชจ๋ ๊ฒ์ฌ๋ฅผ is*
๋ก ๊ตฌํํ๊ณ ๋ณ๊ฒฝํ์ฌ ํธ๋ฆฌ ํ๋ค๊ธฐ๋ฅผ ํ์ฉํฉ๋๋ค. #9310
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ด์ ์
obj instanceof Vector3
๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
๊ทธ๋ฌ๋ Rich Harris๋ ๋ชจ๋ ๊ฒ์ฌ๋ฅผis*
๋ก ๊ตฌํํ๊ณ ๋ณ๊ฒฝํ์ฌ ํธ๋ฆฌ ํ๋ค๊ธฐ๋ฅผ ํ์ฉํฉ๋๋ค. #9310
๋ต๋ณ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค. ์ค๋ ๋๋ฅผ ์ฝ์์ต๋๋ค. btw ๋ค๋ฅธ ํด๋์ค์์ ์ ํ ๊ฒ์ฌ๊ฐ ํ์ํ ๊ฒฝ์ฐ ํด๋์ค๊ฐ ์ถ๋ ฅ์ ํฌํจ๋์ง ์๋๋ก ํด์ผ ํ๋ ์ด์ ๋ฅผ ์ดํดํ์ง ๋ชปํฉ๋๋ค. ๋ฒ๋ค๋ ํด๋์ค X๊ฐ ํ์ํ ๊ฒฝ์ฐ ๊ฐ์ฒด๊ฐ ํด๋์ค B๋ผ๋ ๊ฒ์ ์ธ์ํ๋ ค๋ฉด ํด๋์ค B๊ฐ ์ฌ์ฉ๋๋ฉฐ(์ ์ด๋ ํด๋น ๊ฐ์ฒด๋ฅผ ์ด๋ป๊ฒ๋ ์์ฑํ๊ธฐ ์ํด) ๋ฒ๋ค๋ง๋์ด์ผ ํ์ง ์์ต๋๊น?
์๋ฅผ ๋ค์ด WebGLRenderer๋ ๋ ๋๋งํ๋ ์ง์ค๋ฉํธ๋ฆฌ๊ฐ BufferGeometry์ธ์ง Geometry์ธ์ง ํ์ธํด์ผ ํ์ง๋ง Geometry ์ธ์คํด์ค๋ฅผ ์์ฑํ์ง ์์ต๋๋ค. ๋๋ถ๋ถ์ three.js ์ ํ๋ฆฌ์ผ์ด์ ์ BufferGeometry๋ง ์ฌ์ฉํด์ผ ํ๋ฏ๋ก ๊ฐ๋ฅํ ๊ฒฝ์ฐ ๋ฒ๋ค์์ Geometry(๋ฐ ํด๋น ํ์ ํด๋์ค)๋ฅผ ์ ๊ฑฐํ๊ธฐ ์ํด ํธ๋ฆฌ ํ๋ค๊ธฐ๋ฅผ ์ํฉ๋๋ค.
์๊ฐ์ ์ผ๋ก...
์ด ํจํด์ ๋ฒ๋ค๋งํ ๋ WebGLRenderer
๊ฐ ํญ์ Geometry
๋ฅผ ํฌํจํ๋๋ก ํฉ๋๋ค.
import { Geometry } from '../core/Geometry.js';
import { BufferGeometry } from '../core/BufferGeometry.js';
if ( geometry instanceof Geometry ) {
} else if ( geometry instanceof BufferGeometry ) {
}
์ด ํจํด์ ๋ค์์ ์ํํ์ง ์์ต๋๋ค.
if ( geometry.isGeometry === true ) {
} else if ( geometry.isBufferGeometry === true ) {
}
๋ชจ๋ ์๋ ,
์ฌ๊ธฐ ์์ ์์ผ๋ก ๋์๊ฐ๋ ๊ฒ์ ๋ํ ์ฐ๋ฆฌ์ ์๊ฐ์ ๋ฌด์์ ๋๊น?
์์ง์ ๋ณํ๊ฐ ์๋ ๊ฒ ๊ฐ์์. (1) examples/js
์ ์๊ณ (2) examples/js
์ ์๋ ๊ฒ์ผ๋ก ํ์ฅ๋์ง ์์ ๋ชจ๋ ๊ฒ์ ES6 ํด๋์ค๋ก ๋ณํ๋ ์ ์์ต๋๋ค. ํด๋น ํ๋ก์ธ์ค๊ฐ ๋ง๋ฌด๋ฆฌ๋๋ฉด examples/js
๋ฅผ ํด๋์ค๋ก ์ ํํ ์์ ์ ๊ฒฐ์ ํด์ผ ํฉ๋๋ค.
๊ธฐ์ต์์, ๊ทธ๋ฆฌ๊ณ ์ฐ๋ฆฌ๋ ์ฝ๊ฐ์ ์์ ์ ์๋ฃํ์ผ๋ฉฐ ์์ง ๋๊ธฐ ์ค์ธ ์ผ๋ถ PR์ด ์์ต๋๋ค.
๋ด ์ข ์์ฑ/extended-in-examples ๋ชฉ๋ก์ ๋ค์ ์ปดํ์ผํด ๋ณผ ์ ์์ต๋๋ค.
@DefinitelyMaybe ํค์ด! ๋น์ ์ ๋ชฉ๋ก์ ํฐ ๋์์ด ๋์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ @donmccurdy ์ ์ ๋ต์ ๋์๊ฒ ์๋ฏธ๊ฐ ์์ต๋๋ค. ๐ ์ฐ๋ฆฌ๊ฐ ์ด๋ฏธ ํ ์ผ์ ๋ง๋ฌด๋ฆฌ ์ง๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ๊ฒ ๊ฐ์์. #20070์ private/hidden vars๋ฅผ ES6์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ์ ๋ต์ ์ ๊ณตํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ณต๊ฒฉํ๊ธฐ์ ์ข์ PR์ด ๋ ๊ฒ์
๋๋ค( renderers/webgl
๋ฅผ ES6์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๋ฐ ํ์ํฉ๋๋ค). ๋ชจ๋๊ฐ ๋ฒค์น๋งํฌ๋ฅผ ์คํํ๊ฑฐ๋ ํ ๋ก ์ ์ฐธ์ฌํ ์ ์๋ค๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ์ฑ๋ฅ์ด ์ข์์ง ํ์ธํ๊ธฐ๋ง ํ๋ฉด ์ ์ ํ ์ต์
์ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
๊ด์ฐฎ์,
์๋ฅผ ๋ค์ด ES ํด๋์ค์ ๋ค์ ์์ฑํ๊ธฐ ์ํด ์ผ๋ถ PR์ ์์ํ ์ ์์ต๋๋ค.
@mrdoob jsm to js ์คํฌ๋ฆฝํธ๋ฅผ ์ํํ๋ ๊ฒ์ด ๋ฌธ์ ์
๋๊น? (๋๋ ๊ทธ๋ ์ง ์๋ค๊ณ ์๊ฐํ์ง๋ง ์ฐ๋ฆฌ๊ฐ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ์ ํธํ๋ค๋ฉด ๋งํด์ฃผ์ธ์)
์์ ์ฝ๋๋ฅผ ํด๋์ค๋ก ๋ณํํ๊ธฐ ์ ์ #20527, #20529 ๋๋ ๋ค๋ฅธ ์๋ฃจ์ ์ ๋จผ์ ๋ณํฉํด์ผ ํฉ๋๋ค. https://github.com/mrdoob/three.js/issues/19986#issuecomment -718308451์ ์ธ๊ธ๋ ์กฐ๊ฑด์ ์ถฉ์กฑํ๋ ์ฝ๋๋ฅผ ์ ์ธํ๊ณ .
@DefinitelyMaybe ์ฒซ ๋ฒ์งธ ๋๊ธ ์์ ๋ค์๊ณผ ๊ฐ์ด ๋งํ์ต๋๋ค.
- ํด๋์ค ํ๋ ์ฌ์ฉ
1) ๊ทธ๊ฒ์ ์ฐ๋ฆฌ๊ฐ ๋ชจ๋ ๊ฒ์ ๋ํด ํด๋์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๊น?
๊ทธ๋ ๊ฒ :
class Light extends Object3D {
type = 'Light';
isLight = true;
color = new Color;
intensity = 1;
constructor(color, intensity = 1) {
super();
this.color = new Color(color);
this.intensity = intensity;
}
copy() {
...
}
}
... ์๋๋ฉด .is*
์์ฑ ์ ์ฉ์ธ๊ฐ์?
๊ทธ๋ ๋ค๋ฉด 2) ๋น ์์ฑ์๋ ์ด๋ป๊ฒ ๋ ๊น์? ES2015 ์ฌ์์ ๋ฐ๋ฅด๋ฉด super()
ํธ์ถ๋ง ์๋ ์์ฑ์๋ ์ ๊ณต๋์ง ์์ผ๋ฉด ์์์ ์ด๋ฏ๋ก ์ผ๋ถ ์์ ํด๋์ค๋ฅผ ์ค์ ๋ก ๋ ์ฝ๊ฒ ์ ์ํ ์ ์์ต๋๋ค.
class MapControls extends OrbitControls {
screenSpacePanning = false; // pan orthogonal to world-space direction camera.up
mouseButtons = { LEFT: MOUSE.PAN, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.ROTATE };
touches = { ONE: TOUCH.PAN, TWO: TOUCH.DOLLY_ROTATE };
}
๊ทธ๋ฆฌ๊ณ 3) private class ํ๋๋ ์ด๋ป์ต๋๊น?
class OrbitControls extends EventDispatcher {
...
#offset = new Vector3();
// so camera.up is the orbit axis
#quat = new Quaternion().setFromUnitVectors( object.up, new Vector3( 0, 1, 0 ) ); <= this will go in constructor because of object.up
#quatInverse = this.#quat.clone().inverse();
#lastPosition = new Vector3();
#lastQuaternion = new Quaternion();
#twoPI = 2 * Math.PI;
update() {
... ( no more closure and return function here )
}
}
์ต์ Chrome์ ์ด์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณต๊ฐ ๋ฐ ๋น๊ณต๊ฐ ํด๋์ค ํ๋๋ฅผ ๋ชจ๋ ์ง์ํฉ๋๋ค...
์ฒซ ๋ฒ์งธ ์ด์ ๋ ๋ชจ๋ ํ ์คํธ๋ฅผ ํต๊ณผํ๋ ๊ฒ์ ๋๋ค.
๋ณ๊ฒฝ์ ์ค์ด๋ฉด ์ฒ์์๋ ๋ฌธ์ ๊ฐ ๋ ๋ฐ์ํฉ๋๋ค.
@marcofugaro ์์ง ํด๋์ค ํ๋๋ก ๋ณ๊ฒฝํ ์ ์๋ ๋ณ์๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ง๋์?
๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ ๋ณด๊ณ ์๋ค:
class EdgesGeometry extends BufferGeometry {
constructor( geometry, thresholdAngle ) {
super();
this.type = 'EdgesGeometry';
๋ฐ๋์๋ค:
class EdgesGeometry extends BufferGeometry {
type = 'EdgesGeometry';
constructor( geometry, thresholdAngle ) {
super();
๋ด๊ฐ " new this.contructor() != new Foo()
"๋ฅผ ๋ง๋ ๊ฒ๊ณผ ๊ฐ์ ๋ค๋ฅธ ์ฃผ์ ์ฌํญ์ด ์์ ์ ์์ต๋๋ค.
๊ฐ์ธ ํด๋์ค ํ๋
์ด๊ฒ์ ์งํ ์ค์ธ ํ ๋ก ์ ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ์ฌ์ฉํ๋ค๋ฉด ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ์ฌ์ฉํ๊ธฐ๊น์ง ์๊ฐ์ด ๊ฑธ๋ฆด ๊ฒ์ ๋๋ค. ๋ด๊ฐ ์ง์ ํ ์ ์๋ ๋ฌธ์ ๋ PR์ด ํ์คํ์ง ์์ต๋๋ค.
@marcofugaro ์์ง ํด๋์ค ํ๋๋ก ๋ณ๊ฒฝํ ์ ์๋ ๋ณ์๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ง๋์?
๋๋ ๋ค์๊ณผ ๊ฐ์ ๊ฒ๋ค์ ๋ณด๊ณ ์๋ค:
์, ์ด์ ํ ์ ์์ต๋๋ค. ๊ทธ๋ฌ๋ .is*
์์ฑ์ ๋ํด์๋ ์ด๊ฑฐํ ์ ์๊ณ ์ธ ์ ์์ด์ผ ํ๋ฏ๋ก Object.defineProperty(this, ...
๋ฅผ ์ฌ์ฉํด์ผ ํ๋ ์์ฑ์ ๋ํด์๋ ๊ทธ๋ ๊ฒ ํ ์ ์์ต๋๋ค.
์ด๋ป๊ฒ ๋ค์ ํ์ธ๋ฉ๋๊น? Object.defineProperty(this, ...
๋์ static
ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น?
์ด๋ป๊ฒ ๋ค์ ํ์ธ๋ฉ๋๊น?
Object.defineProperty(this, ...
๋์static
ํค์๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๊น?
obj.is*
๋ ํด๋์ค ์์ฒด๊ฐ ์๋๋ผ ์ธ์คํด์ค์ ์์ด์ผ ํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๊ฒ ์๊ฐํ์ง ์์ต๋๋ค...
babel์ด ํ์ฌ ์ค์ ์์ ์ ํํ ๋ฌด์์ ๋ณํํ๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ง๋ง, ์ฐ๋ฆฌ๋ ํด๋์ค ํ๋๋ฅผ ์ด๊ฑฐ ๋ถ๊ฐ๋ฅ/์ฐ๊ธฐ ๋ถ๊ฐ๋ฅ์ผ๋ก ์ค์ ํ๊ธฐ ์ํด ๋ฐ์ฝ๋ ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค:
import { unwrittable, unenumerable } from 'some/decorator/helpers.js'
class Foo {
@unwrittable<strong i="12">@unenumerable</strong>
isFoo = true;
}
@DefinitelyMaybe static
์์ฑ์ ๋ค๋ฅด๋ฉฐ ํด๋์ค ์์ฒด๊ฐ ์๋๋ผ ์ธ์คํด์ค์์ ์ก์ธ์คํ ์ ์์ต๋๋ค.
class Test {
static staticProp = true
constructor() {
Object.defineProperty(this, 'definedProp', { value: true })
}
}
const test = new Test()
console.log(test.staticProp, test.definedProp)
๊ฒฐ๊ณผ:
undefined true
ํธ์ง : ๋ด๊ฐ ๋งํ ๊ฒ์ ์ ๊ฒฝ ์ฐ์ง ๋ง์ญ์์ค ...
๋ค, ๋ค.
์ ์์ ์ ์ด ์์ฑ์ ํ์ธํ๋ ์ฝ๋๋ฅผ ์กฐ์ ํ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ์ด๋ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค.
class Test {
constructor() {
Object.defineProperty(this, 'definedProp', { value: true })
}
}
์๊ฒ
class Test {
static definedProp = true
constructor() {
}
}
๊ทธ๋์ ์ด ๊ฒ์ฌ๊ฐ ์ด๋์, ์ ์ผ์ด๋๋์ง, ๋ฐ๊ฟ ์ ์๋์ง ์๋์ง ๊ถ๊ธํ์ต๋๋ค.
@DefinitelyMaybe ๋ฌธ์ ๋ ์ธ์คํด์ค ์ ํ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ค๋ ๊ฒ์ ๋๋ค. ๋ฐ๋ผ์ ์ธ์คํด์ค์ ํด๋์ค์ ์ก์ธ์คํ์ฌ ์ ์ ์ํ์ ์ป์ ์ ์๋ค๋ฉด ์ ์ ์ ์ํ์ด ์์ต๋๊น? ๋น์ ์ ์ด๋ฏธ ํด๋์ค ์ด๋ฆ์ ๊ฐ์ง๊ณ ์์ต๋๋ค ...
obj.constructor.isFoo == true
obj.constructor.name == 'Foo'
ํธ์ง: ์ด ๊ธ์ ์์ฑํ๋ ๋์ ์ฌ๋ฌ .is*๋ฅผ ๊ฐ๋ ๊ฒ์ด ์ต์ข ํด๋์ค ์ด๋ฆ ํ๋์ ๋น๊ตํ์ฌ ์ต์ข ์ ์ผ๋ก ๊ฐ ์์ ์ฒด์ธ์ ํ ์คํธํ๋ ๋ฐ ์ ์ฉํ ์ ์๋ค๋ ๊ฒ์ ์ ์ ์์์ต๋๋ค...
obj.constructor.isFoo || obj.constructor.isBar || obj.constructor.isBaz
Edit2: ๋ค, ๋ง์ง๋ง์ผ๋ก ํด๋์ค ์ด๋ฆ์ผ๋ก๋ ๋์ผํ๊ฒ ๋ฌ์ฑํ ์ ์์ง๋ง ํ ์คํธํ๊ธฐ๊ฐ ๋ ๋ณต์กํฉ๋๋ค...
let types = getInheritanceNames(obj) // looping each .constructor.prototype.constructor.name
types.contains( 'Foo' ) || types.contains( 'Bar' ) || types.contains( 'Baz' )
์ธ์คํด์ค์์
์ด๋ฐ. ๊ทธ๊ฒ์ ๋ค์ ์ฝ์ผ์ญ์์ค. ๊ทธ๋, ๋ด๊ฐ ๋ฌด์จ ๋ง์ ํ๋์ง ์ ๊ฒฝ ์ฐ์ง ๋ง.
if ( scope.object.isPerspectiveCamera ) {
...
}
if ( geometry.isBufferGeometry ) {
...
}
if ( material.isShaderMaterial ) {
...
}
์ค๋ฅธ์ชฝ. ๋๊ฐ์ง.
examples/js
๋ฅผ ์ธ์ ํด๋์ค๋ก ์ ํํ ์ง ๊ฒฐ์ ํด์ผ ํฉ๋๋ค.
#20527 ๋๋ #20529๋ฅผ ๊ธฐ๋ค๋ ค์ผ ํ๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ์๋ํ๋ฉด ๋ ๋ค examples/js
๋ฅผ ํ์ฌ ํ์์ผ๋ก ๋ค์ ๋ง๋ค๋ ค๊ณ ํ ๊ฒ์ด๊ธฐ ๋๋ฌธ์
๋๋ค. ์ด๋ ์ฐ๋ฆฌ๊ฐ ๋ชฉํ๋ก ํ๋ ๊ณณ์ด ์๋๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ด ์ด๊ธฐ ์ ์์ examples/js
๋ฅผ ์๋ ๊ทธ๋๋ก ๋ณํํ๋ ๊ฒ์
๋๋ค. ๋ฌธ์ ๋ ์ฐ๋ฆฌ๊ฐ ์ด๋ค ์ด๋ ค์์ ์ฒํด ์๋๋๋ ๊ฒ์
๋๋ค.
๋๋ ๋ํ @mrdoob ์ด ์ต๊ทผ์ ๋งํ ๊ฒ์ ๋ค์ ๋ฐ๋ณตํ๊ณ ์ถ์์ต๋๋ค.
๋๋ ์ด๋ณด์๊ฐ ์ฒซ ๋ฒ์งธ ํ๋ธ๋ฅผ ๋ ๋๋งํ๊ธฐ ์ํด ํด๋ฆฌํ์ด๋ ๋ฒ๋ค๋ฌ์ ๋ํด ๋ฐฐ์ฐ๋๋ก ๊ฐ์ํ๋ ๊ฒ์ ์ซ์ดํฉ๋๋ค.
์ง๋ ๋ช ์ฃผ ๋์ ๋ชจ๋ ์์ ์ ํด์จ ์ฌ๋์ผ๋ก์ ์ํฌํ๋ก๊ฐ ๋ช ํํ๊ณ ์์ ์ ์ํํ๋ ๋ฐ ํ์ํ ๋ค์ํ ๊ฐ๋ ์ ์ดํดํฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ฒ๋ค๋ฌ์ ํด๋ฆฌํ์ด ํ์ํ์ง ์์ง๋ง Three.js๊ฐ ์ฒ์์ ์ค๋ช ๋๋ ๋ฐฉ์์ ์กฐ์ ํด์ผ ํฉ๋๋ค.
๋ํ REPL
๋ฅผ ์ถ๊ฐํ์ง๋ง Three.js์ ๋ง๊ฒ ์กฐ์ ํ๋ฉด ์ด ์์ญ์์ ๋์์ด ๋ ์ ์์ต๋๊น? ๋ ์ฌํ ์
๋ํ ๋ค์๊ณผ ๊ฐ์ ์ผ๋ถ ๋นํด๋์ค ํจํด์ ๋์ฒดํ๋ ๋ฐฉ๋ฒ์ ๋ช ํํ ํด์ผ ํฉ๋๋ค.
function Foo() {
this.update = function () {
var priv = 'foo'
return function update() {
...
};
}();
}
IMHO ์ฐ๋ฆฌ๋ ๊ฐ์ธ ํด๋์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๊ณ , ์ด๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌํํ์ง ์๋ ํน์ ์ด์ ๋ธ๋ผ์ฐ์ ์ ๋ํด ์ด์ ํจํด์ผ๋ก ๋กค์ /๋ฐ๋ฒจ์ ๋ณํํ ์ ์์ต๋๋ค...
IMHO ์ฐ๋ฆฌ๋ ๊ฐ์ธ ํด๋์ค ํ๋๋ฅผ ์ฌ์ฉํ ์ ์๊ณ , ์ด๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๊ตฌํํ์ง ์๋ ํน์ ์ด์ ๋ธ๋ผ์ฐ์ ์ ๋ํด ์ด์ ํจํด์ผ๋ก ๋กค์ /๋ฐ๋ฒจ์ ๋ณํํ ์ ์์ต๋๋ค...
๋๋ ์ด ์ ๋ต์ ๋์ํ์ง๋ง, ๋ฌผ๋ก ๊ฒฐ์ ์ ํด๋น ์ฝ๋๋ฅผ ์ ์ง ๊ด๋ฆฌํด์ผ ํ๋ ํต์ฌ ์ ์ง ๊ด๋ฆฌ์์ ๋ฐ๋ผ ๋ค๋ฆ ๋๋ค.
์์ํ. ๋จผ์ src
๋ด์์ ์ด๊ฒ์ ๊ณผ์ํ๋ ๊ฒ์ด ์์ด๋์ด์ผ ์ ์์ต๋๋ค. ์ฆ, @devingfx ๊ฐ src
๋ด์์ ์ค๋ช
ํ ๊ฒ๊ณผ ์ ์ฌํ๊ฒ ์ด์ํ ํจํด์ ์ฐพ๊ณ ๋์ ๊ฐ์ธ ๋ณ์๋ฅผ ์ฌ์ฉํ๋ PR์ ๋ง๋ค๊ณ babel์ด ํ๋ ์ผ์ ๋ณด์ฌ์ค๋๋ค. ๊ทธ๊ฒ์ผ๋ก.
์ด๋ค ์คํฌ๋ฆฝํธ์ ๋ํ ์ ์์ด ์์ต๋๊น?
๊ฒ์: internal
, private
, readonly
๐
์ ๊น๋ง, ๋ชจ๋ _*
๋ณ์๊ฐ ๋น๊ณต๊ฐ๋ก ์ค์ ๋์๋์?
...
์ด ๋ฐฉ์ ์ฝ๋ผ๋ฆฌ๋ src/renderers/WebGLRenderer.js
์ ์์ต๋๋ค.
WebGLAnimation์ ์ด๋ป์ต๋๊น, ์ข์ ์๊ท๋ชจ ์์ ์ ๋๋ค... https://github.com/mrdoob/three.js/pull/20070
์ด๋ค ์คํฌ๋ฆฝํธ์ ๋ํ ์ ์์ด ์์ต๋๊น?
์ ๋ exemples/js
์ ์ง์คํ๊ณ ์์ผ๋ฉฐ OrbitControls์์ ์ด๊ฒ์ ์ฐพ์์ต๋๋ค...
babel์ด ๊ทธ๊ฒ์ผ๋ก ๋ฌด์์ ํ๋์ง ๋ณด์ฌ์ฃผ์ธ์.
๋๋ ๊ทธ๊ฒ์ด mrDoob์ ๊ตฌ๋ฌธ ์๊ฐ๊ณผ ์ผ์นํ๋ ๊ฒ์ ์ถ๋ ฅํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค ๐
์ค๋ฅธ์ชฝ์ผ๋ก.
๊ทธ๋ฆฌ๊ณ ์ฃ์กํฉ๋๋ค. ๋ด ๋๋๋ ์ด๋์... examples
ํด๋ ๋ณํ์ ์์ํ๋ ค๋ฉด ๋ณํฉํ #20527 ๋๋ #20529(๋๋ ๊ธฐํ) ์ค ํ๋๊ฐ ํ์ํฉ๋๋ค. examples/js
๋ ์์ธก ๊ฐ๋ฅํ ๋ฏธ๋์ ๊ณ์ ๋ถ์ด ์์ต๋๋ค. ์ฆ, examples/js
ํด๋์ ํด๋์ค๋ฅผ ๋ง์ง๋ ๊ฒ์ ์ ๋ ์๋์ค์
๋๋ค. ๊ทธ๊ฒ์ IE์์ ํธํ์ฑ์ ๊นจ๋จ๋ฆด ๊ฒ์
๋๋ค ... ํ์จ.
๋กค์ /๋ฐ๋ฒจ์ ์ด์ ํจํด์ผ๋ก ๋ณํ
JS PR์ ๋ํ JSM์ ํตํด ์๊ฐํ๊ณ ์ง์ํฉ๋๋ค. ์ผ๋จ ๊ฒฐ์ ์ด ๋ด๋ ค์ง๋ฉด examples/jsm
๋ฅผ ๋ชฉํ๋ก ์ผ์ ์ ์์ต๋๋ค.
src
์ ๊ฐ์ธ ๋ณ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ "์ด ๋ณ์๋ฅผ ๊ฐ์ง๊ณ ๋์ง ๋ง์ธ์. ํน์ ๋ชฉ์ ์ด ์์ต๋๋ค"๋ผ๋ ์ค๋ ๋ฌธ์ ์ ๋ํ ์ข์ ํด๊ฒฐ์ฑ
์ด ๋๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ์ข์ ์๊ฐ์
๋๋ค.
ํด๋์ค๊ฐ ์๋
examples/js
ํด๋๋ฅผ ๋ง์ง๋ ๊ฒ์ ์ ๋ ๊ธ์ง์ ๋๋ค.
์ฃ์กํฉ๋๋ค. ๋ฌผ๋ก exemples/jsm
์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์์ต๋๋ค. exemples/js
๋ ๊ฐ๊น์ด ์ฅ๋์ "๋น๋" ๋ฒ์ ์ด ๋ ๊ฒ์
๋๋ค...
๊ทธ๊ฒ์ IE์์ ํธํ์ฑ์ ๊นจ๋จ๋ฆด ๊ฒ์ ๋๋ค ... ํ์จ.
๋ญ??? 2020๋
์๋ Internet Explorer์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๊น? ์ด 7๋
๋ ๊ณต๋ฃก์ ๋ํ WebGL ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํธํ์ฑ์ ๋ํด ์ด์ผ๊ธฐํ๊ณ ์์ต๋๊น? ์ง์งํ๊ฒ !! 1.4% ...
_(์ธ ๋ช
์ ์ฌ์ฉ์๊ฐ IE์์ ์ฌ์ฉํ ๊ณํ์ธ ๊ฒฝ์ฐ ์์งํ ํต๊ณ ์์ง๊ธฐ๋ฅผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ถ๊ฐํด์ผ ํจ)_
๐ ํญํญํญํญํญํญํญํญํญํญํญ...
three.js
๋ฐ three.min.js
๋น๋ ํ์ผ๊ณผ $#$ examples/js
#$์ ๋ชจ๋ ํ์ผ์ ์ฌ์ ํ โโIE 11๊ณผ ๊ฐ์ ์ด์ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ง์ํด์ผ ํฉ๋๋ค.
์๋ ์ IE 11(#18091)์ ๋ํ ์ง์์ ์ค๋จํด์ผ ํ๋ PR์ด ์์์ง๋ง ์ฌ์ ํ ์ด ๋ธ๋ผ์ฐ์ ์ ์์กดํ๋ ์ฌ์ฉ์๊ฐ ์๋ ๊ฒ์ผ๋ก ๋ํ๋ฌ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก์ ํธ์ ํ์ฌ ์ ์ฑ ์ ์ฌ์ฉ์๊ฐ ES6์์ ES5๋ก์ ๋ณํ์ ์ค์ค๋ก ์ํํ์ง ์๋๋ก ๊ฐ ํ์ผ์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ์ด๊ฒ์ #20455์์๋ ๋ ผ์๋์์ต๋๋ค.
ํ๋ก์ ํธ์ ํ์ฌ ์ ์ฑ ์ ์ฌ์ฉ์๊ฐ ES6์์ ES5๋ก์ ๋ณํ์ ์ค์ค๋ก ์ํํ์ง ์๋๋ก ํด๋น ํ์ผ์ ์ฌ์ฉ์์๊ฒ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค.
์ข์, ์์ค๊ฐ ํ๋์ ์ธ ๋ฐฉ์์ผ๋ก ๊ฐ๋ฐ๋ ์ ์๊ณ ๊ฒฐ๊ณผ ๋น๋๊ฐ ์ฝ์ ์ ์๋ ๊ฒ์ด ์๋๋ผ ์๋ํ๋ ๊ฒ์ผ๋ก ๊ฐ์ ํ๋ฉด ํด๋น ์ ์ฑ
์๋ ๋ฌธ์ ๊ฐ ์์ต๋๋ค...
ํธ๋์คํ์ผ๋ฌ๊ฐ ๊ทธ๋ฐ ์ถ์
ํ ์ฝ๋๋ฅผ ์ถ๋ ฅํ๊ธฐ ๋๋ฌธ์
๋๋ค!
๋ฐ๋ผ์ src
๊ฐ ESnext์ ์์ฑ๋๋ ๋ฐ ๋ฌธ์ ๊ฐ ์๊ณ ๋น๋๊ฐ ๋ณด๊ธฐ ํํ์ง๋ง ์ด ํ์ผ์ ์ฝ์ ์ ์๊ณ ์ฃผ์ ์ฒ๋ฆฌํ๊ณ ํ์์ด ์ ์ง์ ๋์ด์ผ ํ๋ค๋ฉด exemples/js
์ ์ ์ฌ์ ์ธ ๋ฌธ์ ๊ฐ ๋ ์ ์์ต๋๋ค...
BTW ์ ์ผ๋ถ ์๋ ์์ด๊ณ ์ฃผ์ ํต์ฌ ์์ค๊ฐ ์๋์ง ์ค์ค๋ก์๊ฒ ์ฌ๋ฌ ๋ฒ ๋ฌป๊ณ ์์ต๋๋ค!?
์: ์ปจํธ๋กค์ ์ผ๋ฐ์ ์ผ๋ก ์๋ ๊ทธ๋๋ก ์ฌ์ฉ๋๋ฉฐ ์ ํ์ ์ ๋์จ์ฒ๋ผ ๋ณต์ฌ๋๋ฉฐ ์๋ฅผ ๋ค์ด ํ์ ํ๋ ํ๋ธ ์์ ์ ๊ฐ์ด ํ๋ก์ ํธ๋ฅผ ์์ฑํ๊ธฐ ์ํด ์ฝ๊ณ ์๊ฐ์ ์ป๋ ์ค์ ์์ ๋ก ์ฌ์ฉ๋์ง ์์ต๋๋ค...
_(์ ๋ "webgl ํ์ ํ๋ธ"๋ฅผ ๊ฒ์ํ์ฌ THREE์ ํจ๊ป ์ฌํ์ ์์ํ์ผ๋ฉฐ ํ๋ซํผ์์ ํ๋ธ๊ฐ ์์ง์ด๋ ์์ ๊ฒ์ ์ ๊ฐ๋ฐํ๋ 1๋ฐ ์ฝ๋ ๋ง๋ผํค์ผ๋ก ์ด์ด์ง๋ ๊ทธ ์ ^^)_
์ ์ ํ ๋น๋๋ฅผ ์ฌ์ฉํ ๋ ์ฝ์ด์ ์๋ ํ์ผ๊ณผ ์์ ๋๋ ํ ๋ฆฌ์ ์๋ ํ์ผ์ ์ค์ํ์ง ์์ต๋๋ค. ํธ๋ฆฌ ์์ดํน์ด ์ ๋๋ก ์๋ํ๋ ํ ์ค์ ๋ก ํ์ํ ์์ค ํ์ผ๋ง ๋น๋์ ์์ต๋๋ค.
๋์๊ฒ ํต์ฌ๊ณผ ์์ ์ ๊ตฌ๋ถ์ ์ด๋ฌํ ์ข ๋ฅ์ ์ํฌํ๋ก๊ฐ ์์ง ์ ๊ณต๋์ง ์์๋ ์๋์์ ๋น๋กฏ๋ฉ๋๋ค. ์ฝ์ด๋ฅผ ๋จ์ผ ๊ตฌ์ฑ ์์๋ก ์์ ํ ๊ฐ์ ธ์์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฝ์ด๋ ์๊ณ ์ปดํฉํธํด์ผ ํฉ๋๋ค. ๊ฐ์ฅ _์ค์ํ_ ํ์ผ๋ง ํฌํจํด์ผ ํฉ๋๋ค. ์ด๋ค ํ์ผ์ด ์ฝ์ด์ ํฌํจ๋๋์ง๋ ์ด๋ค ๋ฉด์์ ์ผ์ด์ค ๋ฐ์ด ์ผ์ด์ค ๊ฒฐ์ ์ด์์ต๋๋ค.
์ ์ ํ ๋น๋๋ฅผ ์ฌ์ฉํ ๋ ์ฝ์ด์ ์๋ ํ์ผ๊ณผ ์์ ๋๋ ํ ๋ฆฌ์ ์๋ ํ์ผ์ ์ค์ํ์ง ์์ต๋๋ค. ํธ๋ฆฌ ์์ดํน์ด ์ ๋๋ก ์๋ํ๋ ํ ์ค์ ๋ก ํ์ํ ์์ค ํ์ผ๋ง ๋น๋์ ์์ต๋๋ค.
์ด๊ฒ์ ES ๋ชจ๋ ์ฌ์ฉ์์๊ฒ๋ง ํด๋น๋ฉ๋๋ค ;)
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@ianpurvis ๋๋จํด! ๋กค์ ์ ์ฌ์ฉํ๊ณ ์์ต๋๊น? ๊ตฌ์ฑ์ ๊ณต์ ํ ์ ์์ต๋๊น?
@mrdoob ๋ง์นจ๋ด ๋ช ๊ฐ์ง ํ ์คํธ๋ฅผ ํ๊ฒ ๋์์ต๋๋ค. ๋๋ ๊ฐ์ธ์ ์ผ๋ก webpack์ ์ฌ์ฉํ๊ธฐ ๋๋ฌธ์ ๋ช ๊ฐ์ง ํ ์คํธ๋ฅผ ํ์ต๋๋ค. ๊ด์ฌ ์๋ ์ฌ๋์ด ์์ผ๋ฉด ๋ด ๊ตฌ์ฑ์ด ์ด๋ ์ต๋๋ค.
์ด ์ฝ๋๋ฅผ ํ ์คํธํ์ต๋๋ค
0.119.1
0.120.1
๋ญ๊ฐ ๋๋ฌด๊ฐ ํ๋ค๋ฆฌ๊ณ ์์ต๋๋ค. ํ๋ฅญํฉ๋๋ค!
์์ธํ ์ดํด๋ณด๋ฉด
AudioListener
ํด๋์ค๊ฐ ๋ฒ๋ค์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ข์ ์์์ ๋๋ค!Webpack์ ๋ํ @ianpurvis๊ฐ ์ง์ ํ ์ฌ์ฉํ์ง ์๋ ๋ณ์๋ฅผ ์๋์ผ๋ก ์ ๊ฑฐํฉ๋๋ค.
๊ทธ ํ ํด๋์ค ์ธ๋ถ์ ์ ์๋ ์ ์ ๋ฉ์๋๋ฅผ ํ ์คํธํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
๋ถํํ๋ ์ด๊ฒ์ ํด๋์ค๋ฅผ ํธ๋ฆฌ๋ฅผ ํ๋ค ์ ์๊ฒ ๋ง๋ญ๋๋ค.
์ข ๋ ํํค์น ํ
DodecahedronGeometry
์ ๊ฐ์ ๊ธฐํํ ํด๋์ค๋ ์ด๋์๋ ์ฌ์ฉ๋์ง ์์์ง๋ง ์ฌ์ ํ ๋ฒ๋ค์ ์์์ ๋ฐ๊ฒฌํ์ต๋๋ค.๋์ค์ ๋๋ ์ด๊ฒ์ด $
three.module.js
Geometries
๊ฐ์ฒด ๋๋ฌธ์ด๋ผ๋ ๊ฒ์ ๋ฐ๊ฒฌํ์ต๋๋ค.ObjectLoader์์ ์ด์ ๊ฐ์ ํจํด ์ ์ฌ์ฉํ ๋ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. ์ด๊ฒ์
ObjectLoader
๋ฅผ ํด๋์ค๋ก ๋ง๋ค๋ฉด ์ฌ๋ผ์ง ๊ฒ์ด๊ณsrc/geometries
๋ tree-shakeable์ด ๋ ๊ฒ์ ๋๋ค.