์ด ์ค๋ฅ ๋ฉ์์ง์ ํจ๊ป ์๋ํ๋ ๋ด ์์ ์ ์ ฐ์ด๋ ์ฝ๋๋ก ์ฌ์ฉ์ ์ ์ ํํฐ๋ฅผ ์ป๊ธฐ ์ํด ๊ณ ๊ตฐ๋ถํฌํ๊ณ ์์ต๋๋ค.
VertexArrayObject.js:171 Uncaught TypeError: Cannot read property 'location' of undefined
at VertexArrayObject.addAttribute (VM1006 pixi.js:2348)
at Quad.initVao (VM1006 pixi.js:19874)
at FilterManager.applyFilter (VM1006 pixi.js:18947)
at Filter.apply (VM1006 pixi.js:18420)
at FilterManager.popFilter (VM1006 pixi.js:18877)
at Container.renderAdvancedWebGL (VM1006 pixi.js:9423)
at Container.renderWebGL (VM1006 pixi.js:9360)
at Container.renderWebGL (VM1006 pixi.js:9366)
at WebGLRenderer.render (VM1006 pixi.js:17563)
at Application.render (VM1006 pixi.js:8043)
๊ณต์ ์์ ๋ ์ด ๋ฒ๊ทธ๋ก ์คํจํฉ๋๋ค.
http://pixijs.io/examples/#/filters/filter -mouse.js
์ด ์ค๋ฅ ๋ฉ์์ง๋ glslify๊ฐ pixi๊ฐ ์ฌ์ ํ ์ก์ธ์ค๋ฅผ ์๋ํ๋ ์ผ๋ถ ์ฌ์ฉ๋์ง ์๋ ์ ๋ํผ์ ์ ๊ฑฐํ ์ผ๋ถ ์ปดํ์ผ๋ฌ ์ต์ ํ์ ๊ด๋ จ์ด ์์ต๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ ๋ํผ ์์ด ์์ ํ ์ ์ ์ธ fragShader์์๋ ๋ฐ์ํฉ๋๋ค. gl_FragColor = vec4(1.0, 1.0, 0.0, 1.0)
์์ ๋ ์ ์๊ฒ ํจ๊ณผ์ ์ ๋๋ค. ์ด๋ค ๋ธ๋ผ์ฐ์ ์์ ํ ์คํธํ๊ณ ์์ต๋๊น?
Google ํฌ๋กฌ ๋ฒ์ 62.0.3202.94(๊ณต์ ๋น๋)(64๋นํธ)
Firefox Quantum 57.0(64๋นํธ)
OS: ์ฐ๋ถํฌ 17.10 ๊ต๋ฌํ
@dobi ์ข์ ์บ์น! ๋ค, ์ต์ ํ๊ฐ ๋ญ๊ฐ๋ฅผ ์ ๊ฑฐํ๋๋ฐ(์ํ๋ฌ์ ๊ฑธ๋ฆผ๋) ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ํ์ธํ๋ ๊ฒ์ ์์์ต๋๋ค.
์ง๊ธ์ ์ํ๋ฌ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ํํฐ๊ฐ ํ์ํ๋ค๊ณ ํ์ ํ์ญ๋๊น? ์ด๋ค ๊ฒฝ์ฐ์๋ https://github.com/pixijs/pixi-plugin-example ๊ณผ ๊ฐ์ ๋ ๋๋ฌ ํ๋ฌ๊ทธ์ธ์ ๋ง๋๋ ๊ฒ์ด ๋ ๋ซ์ต๋๊น?
์ค๋ ๋ ๋ฒ์งธ๋ก v4์ ์ ฐ์ด๋์ ํํฐ๊ฐ ์๋ง์ด ๋ ์ ์ฃ์กํฉ๋๋ค. v5์์ ์์ ํ๊ฒ ์ต๋๋ค.
์์งํ ๋งํด์, ๋๋ ์์ง ์ด ์ฃผ์ ์ ๋ํด ๊น์ด ํ๊ณ ๋ค์ง ์์์ต๋๋ค. ์์ ์ ๊ทธ ๊ธฐ๋ฅ์ ์คํํด๋ณด๊ณ ์ถ์์ต๋๋ค. ๋ ๋๋ฌ ํ๋ฌ๊ทธ์ธ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ๋ช ๊ฐ์ง ํ ์คํธ๋ฅผ ์ํํฉ๋๋ค. ํํธ๋ฅผ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
v5์ ๋ํ ETA๊ฐ ์ด๋ฏธ ์์ต๋๊น?
2๊ฐ์ ์ ๋ :)
ํํฐ์ ๋ํ ๋ง์ ํธ๋ฆญ์ด ์์ต๋๋ค. ๊ทธ๋์ ์ ๊ฐ ๊ทธ ๊ธฐ์ฌ๋ฅผ ๋ง๋ค์์ต๋๋ค: https://github.com/pixijs/pixi.js/wiki/v4-Creating-Filters
@ivanpopelyshev ํํ ๋ฆฌ์ผ์ ๋ฐ๋ผ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
์ ๋ pixi.js์ ์ ๋ง ํดํค ํจ์น๋ฅผ ์ ์ฉํ์ฌ ์ ์๊ฒ ์ ํฉํ๊ฒ ๋ง๋ค์์ต๋๋ค.
diff --git a/js/pixi.js b/js/pixi.js
index 363f09c..d0a321b 100644
--- a/js/pixi.js
+++ b/js/pixi.js
@@ -2344,6 +2344,9 @@ VertexArrayObject.prototype.activate = function()
*/
VertexArrayObject.prototype.addAttribute = function(buffer, attribute, type, normalized, stride, start)
{
+ if (!attribute) {
+ return this;
+ }
this.attributes.push({
buffer: buffer,
attribute: attribute,
์ด๊ฒ์ด ํด๊ฒฐ์ฑ ์ด ์๋๋ผ๋ ๊ฒ์ ์๊ณ ์์ง๋ง v5๊ฐ ๋์ฌ ๋๊น์ง v4์ ์ ฐ์ด๋ ์ฝ๋๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. (์๋ง๋ ๋ ๋์ ์์ ์ผ๋ก) :)
์ข์ ํดํน์ด์ผ!
๋ณ๋์ js ํ์ผ๋ก ์ด๋ํ ์ ์์ต๋๋ค.
PIXI.glCore.VertexArrayObject.prototype.addAttribute = ...
๋๋ ๊ฐ์ ๋ฌธ์ ๊ฐ์๋ค. ๋ํ Ubuntu 17.10 artful. ์ ฐ์ด๋๋ Pixi.js์์ ์ ํ ์์ ์ ์ ๋๊น? ํ๋ก๋์ ์ ์ฌ์ฉํ ์ ์์ต๋๊น? ํฝ์ ์ ฐ์ด๋๋ฅผ ๊ฐ์ ธ์ค๋ ค๋ฉด ์ด๋ป๊ฒ ํฉ๋๊น?
ํํฐ๋ก ๋๋ ๋ ๋๋ฌ ํ๋ฌ๊ทธ์ธ์ผ๋ก. ๊ทธ๋ค์ ์์ ์ ์ด์ง๋ง webgl๊ณผ pixi ์ํคํ ์ฒ์ ๋ํ ์ง์งํ ์ง์์ด ํ์ํฉ๋๋ค.
https://github.com/pixijs/pixi.js/wiki/v4-Creating-Filters
https://github.com/pixijs/pixi-plugin-example/
N ๋ฒ์งธ๋ก ๋๋ ์ฌ๋๋ค์๊ฒ v5์์ ๋ ์ฌ์ธ ๊ฒ์ด๋ผ๊ณ ํ์ ํฉ๋๋ค.
const filterCode = `void main(){
gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}`;
const filter = new PIXI.Filter(null, filterCode);
someSprite.filters = [filter];
์ด ๋ง์ ์ฝ๋๋ก ์ธํด ์ด ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค. ํํฐ์ ๋ค๋ฅธ ์์ฑ์๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น์? ์๋๋ฉด null์ ๋ฌด์ธ๊ฐ๋ก ๋์ฒดํด์ผํฉ๋๊น?
ํํฐ์ ๊ฒฝ์ฐ ํ ์ค์ฒ ์ขํ์ ์ํ๋ฌ๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด FilterManager๊ฐ ์์ฑ์ ์์น๋ฅผ โโ๊ฐ์ ธ์ค์ง ๋ชปํฉ๋๋ค.
๋ ๋๋ฌ ํ๋ฌ๊ทธ์ธ์๋ ํด๋น ์๊ตฌ ์ฌํญ์ด ์์ต๋๋ค. ์๋ํด ๋ณด์ญ์์ค. ์, ํฐ ์์ฉ๊ตฌ์ ๋๋ค.
์๋ํด๋ณด์ญ์์ค: https://github.com/TazOen/createShaderPlugin . ๊ทธ๋ฌ๋ ํ
์ค์ฒ๋ฅผ ๋ฌด์ํ๊ณ bindTexture
๊ฐ ์์ต๋๋ค. ํ
์ค์ฒ๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ ์ฒด pixi-plugin-example์ ์ฌ์ฉํ์ญ์์ค.
ํ
์ค์ฒ ์ขํ์ "์ํ๋ฌ"๊ฐ ํ์ํ๋ค๊ณ ํฉ๋๋ค. ์ํ์ธ๊ฐ ์ํ๋ฌ์ธ๊ฐ? ์คํ?
๋๋ ์์ ์ ๋์์ผ๋ก ์๋ํ๋๋ก ๊ด๋ฆฌํ์ต๋๋ค. ๊ฐ์ฌํ์ง๋ง. ์ด ํ์ด์ง์์ ์ด๋ฌํ ์ธ๋ถ ์ ๋ณด๋ฅผ ์ธ๊ธํ์ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น?
http://pixijs.io/examples/#/basics/custom -filter.js
์ํ๋ฌ. ๊ทธ๋ฌ๋ ๊ทธ ์ ๋ํผ๊ณผ ๋๋ ๋๊ตฐ๊ฐ๊ฐ ๊ทธ๊ฒ์ ๊ทธ๋ฆฌ์ํ์ง ์์ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฐ๋ฆฌ์ ๋ฌธ์ ๋ ์์ฑ์ ๊ดํ ๊ฒ์ ๋๋ค.
๋๋ถ์ ๊ฐ๋ฅํฉ๋๋ค :) https://github.com/pixijs/pixi.js/wiki/v4-Creating-Filters#cannot -read-property-location-of-undefined
์, ๊ทธ๋ฌ๊ตฌ๋. ์ํค๋ฅผ ๋์ณค์ต๋๋ค.
๋๋ถ์ ๋๋ค์
๋ฐฉ๊ธ ์ถ๊ฐํ์ต๋๋ค.
๋ํ ํํฐ ๋ง์ฐ์ค ๋ฐ๋ชจ์ ์๋ฆผ์ด ์ถ๊ฐ๋์์ต๋๋ค. v4์์๋ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ v5์์ ๊ทธ๊ฒ์ ๋ํด ๋ญ๊ฐ๋ฅผ ํ ๊ฒ์ ๋๋ค.
FilterManager์ ํ์ํ ์์ฑ ์ค ์ผ๋ถ๊ฐ ์ ฐ์ด๋์์ ์ฌ์ฉ๋์ง ์์ ๋ ๋ํ๋ฉ๋๋ค.
๊ฑฐ๊ธฐ์ ์ด๋ฌํ ์์ฑ์ ๋์ดํ๋ ๊ฒ์ ์ด๋ป์ต๋๊น?
aTextureCoord -> vTextureCoord ์์ฑ๋ง
์ด๊ฒ์ ๋งค์ฐ ์ด์ํด์ง๊ณ ์์ต๋๋ค.
์ด ์ฝ๋๋ ์ ์๋ํฉ๋๋ค.
varying vec2 vTextureCoord;
varying vec4 vColor;
uniform sampler2D uSampler;
uniform vec4 uTextureClamp;
uniform vec4 uColor;
void main(void)
{
gl_FragColor = texture2D(uSampler, vTextureCoord);
gl_FragColor.r = 0.0;
gl_FragColor.g = 0.0;
gl_FragColor.b = 0.0;
}
ํ์ง๋ง gl_FragColor.a = 0.0;
๋ฅผ ๋์ ์ถ๊ฐํ๋ฉด Cannot read property 'location' of undefined
๋ฉ๋๋ค. ์ต๋ 4๊ฐ ์ค 3๊ฐ๋ง ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๊ฒ ๋ญ๊ฐ์? ๋ญ๊ฐ ์๋ชป ๋์ ๋?
@germansokolov13 ์ด ํ๋์ ์์ ํ ์ดํด๊ฐ ๋ฉ๋๋ค. ์๊ฐ ํด๋ณด์ธ์:
์๋ ๊ฒ์๋ฌผ์์ ์ธ๊ธํ๋ฏ์ด ์ด ์ค๋ฅ๋ glsify๊ฐ ์
ฐ์ด๋ ์ฝ๋๋ฅผ ์ต์ ํํ๊ธฐ ๋๋ฌธ์ ๋ฐ์ํฉ๋๋ค.
๋น์ ์ด ์ถ๊ฐํ๋ฉด gl_FragColor.a = 0.0;
๊ฐ์ ์ ํ๋ฅผ ์ต์ ํ ํ ์ ์์ต๋๋ค texture2D
๊ฐ ์์ ํ ๋ฎ์ด ์ฐ๊ธฐ๋ฉ๋๋ค ์์ธ,ํ์ง๋ง ๋๊น์ง์์ ์ํ ์ฑ๋์ ์์ texture2D
glsify๊ฐ texture2D์ ๋ํ ํธ์ถ์ ์ต์ ํํ๋ฉด webgl์ uSampler
๋ํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํ์ง ์์ผ๋ฏ๋ก pixi๊ฐ ํด๋น ์ ๋ํผ์ ๋ฐ์ดํฐ๋ฅผ ์
๋ก๋ํ๋ ค๊ณ ํ ๋ ์คํจํฉ๋๋ค. ํ ๋น๋ ๊ณต๊ฐ์ด ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๋ช ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค.
์ด๊ฒ์ด ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ ์ก์์ต๋๋ค, @doebi!
๋๋ ๋ ๋๋ฌ ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ์ญ์์ค.
์ค, ์ด์ ์์๋ค! Pixi.js์ ๋ค์ ๋ง์ด๋ ๋ฆด๋ฆฌ์ค์ Doebi์ ํจ์น๋ฅผ ์ถ๊ฐํด์ผ ํ ๊น์? PR์ ์์ฑํด์ผ ํ๋์?
์, ํ๋ณดํ์ง๋ง ๋ค๋ฅธ ์ฅ์์ ๋๋ค.
https://github.com/pixijs/pixi.js/blob/dev/src/core/renderers/webgl/utils/Quad.js#L93
https://github.com/pixijs/pixi.js/blob/dev/src/core/renderers/webgl/managers/FilterManager.js#L242
๋ฉ์๋๋ฅผ ์ฌ์ ์ํ๊ณ FilterManager์์ ์ฌ์ฉ๋๋ ์ถ๊ฐ ํด๋์ค๋ฅผ ์ ์ํฉ๋๋ค.
์๋
ํ์ธ์,
๋ด ์
ฐ์ด๋ ์ฝ๋์ ๋น์ทํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ ํฐ ์ปค๋๊ณผ ์ฝ๊ฐ์ ๊ฐ์ฐ์ค ๋ณ์ ๋ณํ์ด ์๋ ๊ธฐ๋ณธ BlurYFilter ์
ฐ์ด๋ ์ฝ๋์ ๋ณํ์ด๋ฏ๋ก ์๋ํ์ง ์๋ ์ด์ ๋ฅผ ์์ ํ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
ํ
์คํธํ ํ Windows, MacOS ๋ฐ Android์์๋ ์ ์๋ํ๋ฉฐ iOS์์๋ง ๋ฌธ์ ๊ฐ ์์ต๋๋ค.
๋ค์์ ์
ฐ์ด๋ ์ฝ๋์
๋๋ค.
๊ผญ์ง์ :
attribute vec2 aVertexPosition;
attribute vec2 aTextureCoord;
uniform float strength;
uniform mat3 projectionMatrix;
varying vec2 vBlurTexCoords[15];
void main(void){
gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);
vBlurTexCoords[0] = aTextureCoord + vec2(0.0, -7.0 * strength);
vBlurTexCoords[1] = aTextureCoord + vec2(0.0, -6.0 * strength);
vBlurTexCoords[2] = aTextureCoord + vec2(0.0, -5.0 * strength);
vBlurTexCoords[3] = aTextureCoord + vec2(0.0, -4.0 * strength);
vBlurTexCoords[4] = aTextureCoord + vec2(0.0, -3.0 * strength);
vBlurTexCoords[5] = aTextureCoord + vec2(0.0, -2.0 * strength);
vBlurTexCoords[6] = aTextureCoord + vec2(0.0, -1.0 * strength);
vBlurTexCoords[7] = aTextureCoord + vec2(0.0, 0.0 * strength);
vBlurTexCoords[8] = aTextureCoord + vec2(0.0, 1.0 * strength);
vBlurTexCoords[9] = aTextureCoord + vec2(0.0, 2.0 * strength);
vBlurTexCoords[10] = aTextureCoord + vec2(0.0, 3.0 * strength);
vBlurTexCoords[11] = aTextureCoord + vec2(0.0, 4.0 * strength);
vBlurTexCoords[12] = aTextureCoord + vec2(0.0, 5.0 * strength);
vBlurTexCoords[13] = aTextureCoord + vec2(0.0, 6.0 * strength);
vBlurTexCoords[14] = aTextureCoord + vec2(0.0, 7.0 * strength);
}
ํํธ:
varying vec2 vBlurTexCoords[15];
uniform sampler2D uSampler;
void main(void){
gl_FragColor = vec4(0.0);
gl_FragColor += texture2D(uSampler, vBlurTexCoords[0]) * 0.013068780984604511;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[1]) * 0.013907007172070673;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[2]) * 0.017439264394216315;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[3]) * 0.028762309061254498;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[4]) * 0.05603114255667656;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[5]) * 0.10421702583793174;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[6]) * 0.163461199220823;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[7]) * 0.2062265415448454;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[8]) * 0.163461199220823;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[9]) * 0.10421702583793174;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[10]) * 0.05603114255667656;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[11]) * 0.028762309061254498;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[12]) * 0.017439264394216315;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[13]) * 0.013907007172070673;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[14]) * 0.013068780984604511;
}
๋น๊ต๋ฅผ ์ํด ์ฌ๊ธฐ์ ๊ธฐ๋ณธ BlurYFilter์ ์
ฐ์ด๋๊ฐ ์์ต๋๋ค.
์ด๋ก:
attribute vec2 aVertexPosition;
attribute vec2 aTextureCoord;
uniform float strength;
uniform mat3 projectionMatrix;
varying vec2 vBlurTexCoords[5];
void main(void)
{
gl_Position = vec4((projectionMatrix * vec3((aVertexPosition), 1.0)).xy, 0.0, 1.0);
vBlurTexCoords[0] = aTextureCoord + vec2(0.0, -2.0 * strength);
vBlurTexCoords[1] = aTextureCoord + vec2(0.0, -1.0 * strength);
vBlurTexCoords[2] = aTextureCoord + vec2(0.0, 0.0 * strength);
vBlurTexCoords[3] = aTextureCoord + vec2(0.0, 1.0 * strength);
vBlurTexCoords[4] = aTextureCoord + vec2(0.0, 2.0 * strength);
}
ํํธ:
varying vec2 vBlurTexCoords[5];
uniform sampler2D uSampler;
void main(void)
{
gl_FragColor = vec4(0.0);
gl_FragColor += texture2D(uSampler, vBlurTexCoords[0]) * 0.153388;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[1]) * 0.221461;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[2]) * 0.250301;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[3]) * 0.221461;
gl_FragColor += texture2D(uSampler, vBlurTexCoords[4]) * 0.153388;
}
์ ์ด๊ฒ์ด ์๋ชป๋ ์ ์๋์ง ์๋ ์ฌ๋์ด ์์ต๋๊น?
@tyleet ๊ฐ์ ๋ฌธ์ ๊ฐ ํ์คํฉ๋๊น? ์ฝ์์ ๋ฌด์์ด ๋ณด์ด๋์?
ํธ์งํ๋ค:
์ ๊ฒฝ ์ฐ์ง ๋ง์ธ์. ๋ฌธ์ ๋ฅผ ์ฐพ์์ต๋๋ค. ์ปค๋ ํฌ๊ธฐ 15๋ iOS์ ๋๋ฌด ๋ง์ ๊ฒ ๊ฐ์ต๋๋ค. ์ปค๋ ํฌ๊ธฐ๋ฅผ 7๋ก ์ค์ด๋ฉด ์ ๋๋ก ์๋ํฉ๋๋ค.
<-----์๋ณธ--------->
์๋
ํ์ธ์,
๋ต๋ณ์ด ๋ฆ์ด ์ฃ์กํฉ๋๋ค. ์ฃผ๋ง์ ์คํฌ๋ฆฐ์ท์ ์ฐ์ง ๋ชปํ์ต๋๋ค. ๊ฐ์ ์ค์์ ์คํจํ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. "์์ฑ"์ด ์ ์๋์ง ์์์ต๋๋ค. ๋ค์์ ์๊ฒฉ ์ฝ์์ ์คํฌ๋ฆฐ์ท์
๋๋ค.
@ivanpopelyshev ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ ์ฌํ ๋ฌธ์ ๋ก ์๋ฐ์
ํ์ง ๋ชปํ๋๋ก ์ด ๋ฌธ์ ๋ฅผ ๋ซ์์ผ ํฉ๋๊น?
v5์์ ์์ ๋ ๊ฒ์ด๋ผ๋ ์ฝ์์ ๋ฐ์๊ธฐ ๋๋ฌธ์ ๋ ์ด์ ๋ฌธ์ ๋ก ์๊ฐํ์ง ์์ต๋๋ค.
@doebi ๋ซ์ต๋๋ค.
@tyleet ํ ์ค์ฒ์์ ๊ฐ์ ธ์จ ์ํ ์๋ ์์คํ ๋ง๋ค ์ ํ๋ ์ ์์ต๋๋ค.
์ด ์ค๋ ๋๋ ๋ซํ ํ ์ต๊ทผ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ ๊ฒผ์ต๋๋ค. ๊ด๋ จ ๋ฒ๊ทธ์ ๋ํ ์ ๋ฌธ์ ๋ฅผ ์ฌ์ญ์์ค.