Part3 [Three.js]์ Chapter03 3D ํ ์คํธ ๊ฐ์ ํ๊ธฐ(08~09๊ฐ)
์ค๋์ spolight ์กฐ๋ช ์ ์ถ๊ฐํด์ ํ ์คํธ ๋ค์ชฝ์ ์กฐ๋ช ์ด ํฅํ๋ ๋ชจ์ต์ ๊ตฌํํด๋ณด์์ต๋๋ค. spolight ์กฐ๋ช ์ ์ดฌ์์ฅ์์ ๋ฐฐ์ฐ๋ค์ ๋น์ถ ๋ ์ฌ์ฉํ๋ ๊ทธ ์กฐ๋ช ์ ์๊ฐํ์๋ฉด ๋๋๋ฐ์, target๊ฐ์ ๊ฐ์ง๊ณ ์์ด์ ์ด๋๊ณณ์ ํฅํด ์กฐ๋ช ์ ๋น์ถ์ง ๋ฐ๋ก ์กฐ์ ํ ์ ์์ต๋๋ค.
spolight ์ธ์คํด์ค ์์ฑํ๋ ๊ฑด ๋ค๋ฅธ ambient, point light์ฒ๋ผ new THREE.Spolight๋ก ์์ฑํ ์ ์๋๋ฐ์, props๊ฐ ๋ค๋ฅธ ์กฐ๋ช ๋ค๊ณผ ๋ค๋ฅด๊ฒ ์ข ๋ง์ ๋ณด์ ๋๋ค. ์ฐจ๋ก๋๋ก ๋น์ ์์, ๊ฐ๋, ๊ฑฐ๋ฆฌ, ํผ์ง๋ ๊ฐ๋, ๋ฐ๊ทธ๋ฆผ์..?, ๊ฑฐ๋ฆฌ์๋ฐ๋ผ ๋น์ด ํฌ๋ฏธํด์ง๋ ์ ๋ ๋ฅผ ๋ํ๋ ๋๋ค.
Three.js ๊ณต๋ถํ ๋๋ง๋ค ๋ชจ๋ฅด๋ ๋จ์ด๋ค์ด ์ข
์ข
๋์์ ๋จ์ด์ฅ์ ๋ง์ด ์ฐพ์๋ณด๊ฒ๋๋ค์ ใ
ใ
; ((( Penumbra๋ ์ง์ง ์ฒ์ ๋ค์ด๋ด
๋๋ค; )))
const spotlight = new THREE.SpotLight(0xffffff, 2.5, 30, Math.PI *0.15, 0.2,0.5);
https://threejs.org/docs/?q=spotlight#api/en/lights/SpotLight
three.js docs
threejs.org
spotlight position๊น์ง ์ค์ ํ scene์ ์กฐ๋ช ์ ์ถ๊ฐํ ๋ชจ์ต์ ๋๋ค. ์ฌ์ค ์ด์ ๊ณผ ํฌ๊ฒ ์ฐจ์ด๊ฐ ์๋ฉ๋๋ค...ใ -ใ ... ์กฐ๋ช ์ ๋ฐ์ ์ค ๋ฐฐ๊ฒฝ์ ์ถ๊ฐํด๋ด ์๋ค
Three.js ๊ณต๋ถํ ๋๋ง๋ค ๋ ํ๋ ๋๋ผ๋ ๊ฒ์... ์ด๊ฒ ๊ฐ์๊ณ , ๊ฐ์ฌ๋์ด ํ์ํ ๊ฒ์ ๊ธ๋ฐฉ๊ธ๋ฐฉ ์ฐพ์์ฃผ๋๊น ๋น ๋ฅด๊ฒ ๋ง๋๋ ๊ฑฐ์ง ํผ์ ๋ง๋ค์๋ค๋ฉด ์ฝ์ง์ ์ ๋ง ์ด๋ง๋ฌด์ํ๊ฒ ํ์ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ญ๋๋ค. ๋ญ ํ๋ ๋น ๋จ๋ฆฌ๊ฑฐ๋(์: update ๋ฌธ, position.set ๋ฑ๋ฑ) ๋น ๋จ๋ฆฌ์ง ์์๋ ๋ฐ๋ก ๋ญ๊ฐ๋ฅผ ์ถ๊ฐํ์ง ์์ผ๋ฉด(Light, ๋ฐฐ๊ฒฝ ๋ฑ) ์ค๋ฅ๋ ์์ด ์ ๋๋ก ๋ณด์ด์ง ์๋ ์ํฉ๋ค์ด ๋ง์์ ๋ณต์ฅ์ด ํฐ์ง์ง ์์์๊น ์ถ์ด์..๐ฅฒ
const plainGeometry = new THREE.PlaneGeometry(2000, 2000);
const plainMaterial = new THREE.MeshPhongMaterial({ color: 0x000000 });
const plain = new THREE.Mesh(plainGeometry, plainMaterial);
plain.position.z = -10;
scene.add(plain);
spotLight Helper๋ฅผ ์ถ๊ฐํ๋ฉด ๊ฐ๋์ ๋ฐ๋ผ ๋น์ด ํผ์ง๋ ์ ๋๋ฅผ ํ์ธํ ์ ์์ต๋๋ค. ์์์์๋ renderํจ์์ Update ๋ฌธ์ ์ถ๊ฐํ์ง์์ spotLight Helper์ ๊ฐ๋๊ฐ ๋ณํ์ง ์๋ ๊ฒ๊ฐ๊ตฐ์..๐ซ
์๋ ์ฝ๋๋ฅผ ์ถ๊ฐํด์๋ฉด gui์์ angle๊ฐ์ ๋ณ๊ฒฝํ ๋๋ง๋ค spotlight helper์ ๊ฐ๋๋ ๋ณํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค..
spolightHelper.update();
angle ์ธ์ position.z, distance, decay, penumbra ๋ฑ์ ๊ฐ์ ์ค์ ํด์ ์กฐ๋ช ์ ์ข๋ ์์ฐ์ค๋ฝ๊ฒ ๋ณด์ด๊ฒ ํ ์ ์์ต๋๋ค.
position.z๋ spotLight์ target์ด ํฅํ ์ง์ ์ z๊ฐ์, distance๋ ๋ง๊ทธ๋๋ก ์กฐ๋ช ์์ ์์ ๋น์ถฐ์ง ๊ฑฐ๋ฆฌ, decay๋ ๊ฑฐ๋ฆฌ์๋ฐ๋ผ ๋น์ด ํฌ๋ฏธํด์ง๋ ์ ๋๋ก ๊ฐ์ด ์ปค์ง์๋ก ๋น์ด ํฌ๋ฏธ~ํด์ง๋๋ค. penumbra๋ 0์ ๊ฐ๊น์์ง์๋ก ์กฐ๋ช ์ด ๋๋ ทํด์ง๋ ์์ฑ์ ๋๋ค.
โจ์ค๋์ ํ์ต ์ธ์ฆ ์ท
๋ณธ ํฌ์คํ ์ ํจ์คํธ์บ ํผ์ค ํ๊ธ ์ฑ๋ฆฐ์ง ์ฐธ์ฌ๋ฅผ ์ํด ์์ฑํ์์ต๋๋ค.
https://fastcampus.co.kr/event_online_challenge_2401_mission
์ปค๋ฆฌ์ด ์ฑ์ฅ์ ์ํ ์ต๊ณ ์ ์ค๋ฌด๊ต์ก ์์นด๋ฐ๋ฏธ | ํจ์คํธ์บ ํผ์ค
์ฑ์ธ ๊ต์ก ์๋น์ค ๊ธฐ์ , ํจ์คํธ์บ ํผ์ค๋ ๊ฐ์ธ๊ณผ ์กฐ์ง์ ์ค์ง์ ์ธ '์ (ๆฅญ)'์ ์ฑ์ฅ์ ๋๊ณ ์ ๋ชจ๋ ์ข ๋ฅ์ ๊ต์ก ์ฝํ ์ธ ์๋น์ค๋ฅผ ์ ๊ณตํ๋ ๋ํ๋ฏผ๊ตญ No. 1 ๊ต์ก ์๋น์ค ํ์ฌ์ ๋๋ค.
fastcampus.co.kr