์ฌ์ฉ์ ์ ์ ํด๋ฆฌํ ํ๋ฉด์ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค.
openGL์์๋ ๋ค์์ ์ฌ์ฉํฉ๋๋ค.
glClipPlane(GL_CLIP_PLANE0, planeEq);
glEnable(GL_CLIP_PLANE0);
webGL๋ก ์ด๋ป๊ฒ ๋๊ฐ์ด ํ ์ ์์ต๋๊น?
renderer.context
WebGL ์ปจํ
์คํธ๋ฅผ ์ป์ ์ ์์ด์ผํฉ๋๋ค.
๊ฑฐ๊ธฐ์์ ๊ทธ๊ฒ์ ๋น์ ๊ณผ WebGL ์ฌ์์ ๋ฌ๋ ค ์์ต๋๋ค :)
์ต๊ทผ์ three.js์ ๋ฐ์ฌ ํ๋ฉด (์ผ๋ช
'๊ฑฐ์ธ': smile :)์ ๊ตฌํํ๋ ๋์ ๋์ผํ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋ด๊ฐ ์๋ ํ, ์ ์ด๋ ๋น์ ์ด ์ค๋ช
ํ '๊ฐ๋จํ'openGL ๋ฐฉ์์ผ๋ก๋ WebGL๋ก ์ฌ์ฉ์ ์ ์ ํด๋ฆฌํ ํ๋ฉด์ ๊ฐ์ง ์ ์์ต๋๋ค.
ํธ๋ฆญ์ "Oblique View Frustum"๋ฐฉ๋ฒ์ ์ฌ์ฉํ๋ ๊ฒ์
๋๋ค.์ด ๋ฐฉ๋ฒ์์ด ๋ฌธ์์์ ์ค๋ช
ํฉ๋๋ค. http://www.terathon.com/lengyel/Lengyel-Oblique.pdf
์ด ๋ฐฉ๋ฒ์ ๋ชฉ์ ์ ๋ฏธ๋ฌ ๋ ์นด๋ฉ๋ผ ์ ๋์ฒด์ ๊ฐ๊น์ด ํด๋ฆฝ ํ๋ฉด์ ๋ฐ์ฌ ํ๋ฉด์ ์ํด ์ ์ ๋ ํ๋ฉด์ผ๋ก ๋์ฒดํ๋ ๊ฒ์
๋๋ค.
์ ๊ณต๋ ์์ค ์ฝ๋๋ ์์ต๋๋ค (C ++๋ก ์ ๊ณต) : http://www.terathon.com/code/oblique.html
๋๋ ๊ทธ ๋ฐฉ๋ฒ์ three.js์์ ์ฑ๊ณต์ ์ผ๋ก ํฌํ ํ์ผ๋ฉฐ ์ฌ๊ธฐ์ ์ด๊ฒ์ ๋ผ์ด๋ธ๋ก ๋ณด์ฌ์ฃผ๋ ์ํ ์ฅ๋ฉด์ด ์์ต๋๋ค : http://jsfiddle.net/slayvin/PT32b/
๋จ์ ์ ์ผํ ๋ฌธ์ ๋ renderTarget์ด ํ๋ ์ ๋ค์ ๋ ๋๋ง๋๋ค๋ ๊ฒ์ ๋๋ค. ์ด์ ๋ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค! ์ด๋ก ์ธํด ์นด๋ฉ๋ผ๊ฐ ๋๋ฌด ๋น ๋ฅด๊ฒ ์์ง์ผ ๋์ ๊ฑฐ์ธ์ด ๋ค๋ฅธ ๋ฌผ์ฒด๋ฅผ ํต๊ณผ ํ ๋ ์ฝ๊ฐ์ ๊น๋ฐ ๊ฑฐ๋ฆผ์ด ๋ฐ์ํฉ๋๋ค.
์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์์ด๋์ด๊ฐ ์์ต๋๊น? ์ผ์ข ์ ๋ค์ค ๋ฒํผ๋ง ๋ฐฉ๋ฒ์ ๊ตฌํํด์ผํฉ๋๊น, ์๋๋ฉด ๋จ์ํ ์ ๋์ฒด๋ฅผ ์์ ํ ํ ์นด๋ฉ๋ผ ๋งคํธ๋ฆญ์ค๋ฅผ ์ ๋ฐ์ดํธํ์ง ์๊ธฐ ๋๋ฌธ์ ๋๊น? ๊ทธ๋ ๋ค๋ฉด ์ด๋ป๊ฒํด์ผํฉ๋๊น?
์ ... scene.autoUpdate
๋ฅผ false
ํ๊ณ scene.updateMatrixWorld()
๋ฅผ ์ง์ ํธ์ถํ์ฌ ๋ชจ๋ ๋ ๋๋ฌ๊ฐ ๋์ผํ ํญ๋ชฉ์ ๊ฐ์ง๊ณ ์์ง๋ง ์๋ฌด๊ฒ๋ ํด๊ฒฐํ์ง ๋ชปํ๋์ง ํ์ธํ์ต๋๋ค. ... ๊ฑฐ๊ธฐ์์ ํ์ ์ ์ถ์ถํ๊ธฐ ์ ์ mirror.updateMatrix()
๋ฅผ ํธ์ถํ์ง ์์ต๋๋ค ...
๊ทธ๋๋ ๊ฝค ๋ฉ์ง๋ค! ์๋ง๋ ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ์์ ์ ๊ฐ์ฒด๋ก ์ถ์ํ ํ ์ ์์ต๋๋ค.
๋จ.
๋ํ ๊ด๋ จ ํ๋ ฌ์ด ์ต์ ์ธ์ง ํ์ธํ์ต๋๋ค. ์ง์ฐ์ด ๊ฑฑ์ ๋๋ฉด ์ฌ์ฉํ๊ธฐ ์ ์ ์ ๋ฐ์ดํธํด์ผํฉ๋๋ค. ์ํ๊น๊ฒ๋ ๋น ๋ฅด๊ฒ ํ๋ / ์ถ์ ํ ๋ ์ค์ํ์ง ์์ ๊ฒ ๊ฐ์ต๋๋ค ...
mirror.updateMatrixWorld();
camera.updateMatrixWorld();
camera.matrixWorldInverse.getInverse( camera.matrixWorld );
๋ง์ ๊ฐ์ฌํฉ๋๋ค !!
๊ทํ์ ์ ์์ผ๋ก ๋ฌธ์ ๋ฅผ ์ฌ๊ณ ํ๊ฒ๋์๊ณ '์ผ๋ฐ์ ์ธ'์ง์ฐ์ด ์์์ง๋ง ๋์ด ํด๋ฆฝ ํ๋ฉด์ด ๋ณ๊ฒฝ ๋ ๋๋ง ๊น๋ฐ ๊ฑฐ๋ฆผ (๋ฏธ๋ฌ๋ง ๋ ์นด๋ฉ๋ผ ์์น์ ๋น๊ต ํ ๋ฏธ๋ฌ ์์น)์ ๋ฐ๊ฒฌํ์ต๋๋ค.
@WestLangley : ์ ๋ฐ์ดํธํด์ผ ํ ๋ฏธ๋ฌ ์นด๋ฉ๋ผ์ ํ๋ ฌ์ด์ง ์นด๋ฉ๋ผ ์์ฒด๊ฐ ์๋๋๋ค.
๊ฒฐ๊ณผ : ๋ ์ด์ '์ง์ฐ'์์ : http://jsfiddle.net/slayvin/PT32b/2/ : smiley :
์๋ง๋ ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ์์ ์ ๊ฐ์ฒด๋ก ์ถ์ํ ํ ์ ์์ต๋๋ค.
๋ค, ์๊ฐ ํด๋ดค์ต๋๋ค. ๋ชจ๋ ๊ฒ์ ์ฒ๋ฆฌํ๋ new THREE.mirror()
๊ฐ ์์ผ๋ฉด ์ข์ ๊ฒ์
๋๋ค. ์ฝ๋๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค ...
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
๋ง์ ๊ฐ์ฌํฉ๋๋ค !!
๊ทํ์ ์ ์์ผ๋ก ๋ฌธ์ ๋ฅผ ์ฌ๊ณ ํ๊ฒ๋์๊ณ '์ผ๋ฐ์ ์ธ'์ง์ฐ์ด ์์์ง๋ง ๋์ด ํด๋ฆฝ ํ๋ฉด์ด ๋ณ๊ฒฝ ๋ ๋๋ง ๊น๋ฐ ๊ฑฐ๋ฆผ (๋ฏธ๋ฌ๋ง ๋ ์นด๋ฉ๋ผ ์์น์ ๋น๊ต ํ ๋ฏธ๋ฌ ์์น)์ ๋ฐ๊ฒฌํ์ต๋๋ค.
@WestLangley : ์ ๋ฐ์ดํธํด์ผ ํ ๋ฏธ๋ฌ ์นด๋ฉ๋ผ์ ํ๋ ฌ์ด์ง ์นด๋ฉ๋ผ ์์ฒด๊ฐ ์๋๋๋ค.
๊ฒฐ๊ณผ : ๋ ์ด์ '์ง์ฐ'์์ : http://jsfiddle.net/slayvin/PT32b/2/ : smiley :
๋ค, ์๊ฐ ํด๋ดค์ต๋๋ค. ๋ชจ๋ ๊ฒ์ ์ฒ๋ฆฌํ๋
new THREE.mirror()
๊ฐ ์์ผ๋ฉด ์ข์ ๊ฒ์ ๋๋ค. ์ฝ๋๋ฅผ ์์ฑํด ๋ณด๊ฒ ์ต๋๋ค ...