undefined

'๐ŸŒฟ ์Šคํ„ฐ๋””'์— ํ•ด๋‹น๋˜๋Š” ๊ธ€ 21๊ฑด

  1. [ํด๋ฆฐ์ฝ”๋“œ] 9์žฅ ๋‹จ์œ„ํ…Œ์ŠคํŠธ

    TDD ๋ฒ•์น™ ์„ธ ๊ฐ€์ง€ TDD: ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์งœ๊ธฐ ์ „์— ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ถ€ํ„ฐ ์งœ๋Š” ๊ฐœ๋ฐœ ๋ฐฉ์‹ ์‹คํŒจํ•˜๋Š” ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ๊นŒ์ง€ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์ง€ ์•Š๋Š”๋‹ค. ์ปดํŒŒ์ผ์€ ์‹คํŒจํ•˜์ง€ ์•Š์œผ๋ฉด์„œ ์‹คํ–‰์ด ์‹คํŒจํ•˜๋Š” ์ •๋„๋กœ๋งŒ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ํ˜„์žฌ ์‹คํŒจํ•˜๋Š” ํ…Œ์ŠคํŠธ๋ฅผ ํ†ต๊ณผํ•  ์ •๋„๋กœ๋งŒ ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•œ๋‹ค. ์œ„ ๊ทœ์น™์„ ๋”ฐ๋ฉด ๊ฐœ๋ฐœ๊ณผ ํ…Œ์ŠคํŠธ๊ฐ€ ์•ฝ 30์ดˆ ์ฃผ๊ธฐ๋กœ ํ•จ๊ป˜ ๋‚˜์˜จ๋‹ค. ํ•˜์ง€๋งŒ ๋ฐฉ๋Œ€ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋Š” ์‹ฌ๊ฐํ•œ ๊ด€๋ฆฌ ๋ฌธ์ œ๋ฅผ ์œ ๋ฐœํ•˜๊ธฐ๋„ ํ•œ๋‹ค. ๊นจ๋—ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์œ ์ง€ํ•˜๊ธฐ ์ง€์ €๋ถ„ํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ๊ฒƒ์€ ํ…Œ์ŠคํŠธ๋ฅผ ์•ˆ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ๋ชปํ•˜๋‹ค. ์‹ค์ œ ์ฝ”๋“œ๊ฐ€ ์ง„ํ™”ํ•˜๋ฉด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋„ ๋ณ€ํ•ด์•ผ ํ•œ๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ์ง€์ €๋ถ„ํ•˜๋ฉด ๋ณ€๊ฒฝํ•˜๊ธฐ ์–ด๋ ค์›Œ์ง„๋‹ค. ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•  ์ˆ˜๋ก ์‹ค์ œ ์ฝ”๋“œ๋ฅผ ์งœ๋Š” ์‹œ๊ฐ„๋ณด๋‹ค ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค๋ฅผ ์ถ”๊ฐ€ํ•˜๋Š” ์‹œ๊ฐ„์ด ๋” ๊ธธ์–ด์ง„..

  2. [ํด๋ฆฐ์ฝ”๋“œ] 8์žฅ ๊ฒฝ๊ณ„ with Typescript

    ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํŒจํ‚ค์ง€, ์˜คํ”ˆ ์†Œ์Šค ๋“ฑ์˜ ์™ธ๋ถ€ ์ฝ”๋“œ๋ฅผ ์šฐ๋ฆฌ ์ฝ”๋“œ์— ํ†ตํ•ฉ์‹œํ‚ค๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ด๋Ÿฐ ์†Œํ”„ํŠธ์›จ์–ด ๊ฒฝ๊ณ„๋ฅผ ๊น”๋”ํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค. ์†Œํ”„ํŠธ์›จ์–ด ๊ฒฝ๊ณ„๋ž€, ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต์ž์™€ ์‚ฌ์šฉ์ž ์‚ฌ์ด์˜ ์ž…์žฅ ์ฐจ์ด๋กœ ๋ฐœ์ƒํ•˜๋Š” ๊ฒฝ๊ณ„ ์ธํ„ฐํŽ˜์ด์Šค ์ œ๊ณต์ž๋Š” ์ตœ๋Œ€ํ•œ ์ ์šฉ์„ฑ์„ ๋„“ํžˆ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์„ค๊ณ„ํ•œ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค ์‚ฌ์šฉ์ž๋Š” ์ž์‹ ์˜ ์š”๊ตฌ์— ์ง‘์ค‘ํ•˜๋Š” ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์›ํ•œ๋‹ค. ์™ธ๋ถ€ ์ฝ”๋“œ ์‚ฌ์šฉํ•˜๊ธฐ ์˜ˆ๋ฅผ ๋“ค์–ด Map ๊ฐ์ฒด๋Š” ๊ต‰์žฅํžˆ ๋‹ค์–‘ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ˆ˜๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š”๋ฐ, ์ด๋Ÿฐ ์œ ์—ฐ์„ฑ์€ ์œ ์šฉํ•˜์ง€๋งŒ ๊ทธ๋งŒํผ ์œ„ํ—˜์ด ํฌ๋‹ค. ๊ฐ์ฒด ์œ ํ˜•์„ ์ œํ•œํ•˜์ง€ ์•Š๋Š”๋‹ค. ์–ด๋–ค ํƒ€์ž…์˜ ๊ฐ์ฒด๋„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์šฉ์ž์—๊ฒŒ ํ•„์š”ํ•˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ๊นŒ์ง€ ์ œ๊ณตํ•œ๋‹ค. ๋ˆ„๊ตฌ๋‚˜ ๋‚ด์žฅ๋œ clear() ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜์—ฌ ๋‚ด์šฉ์„ ์ง€์›Œ๋ฒ„๋ฆด ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค. ์ œ๋„ˆ๋ฆญ ์‚ฌ์šฉํ•˜๊ธฐ const..

  3. [three.js] ๊ทธ๋ฆผ์ž๋ฅผ ๋ Œ๋”๋งํ•˜๋Š” ๋ฐฉ๋ฒ•

    9๊ฐ• ๊ทธ๋ฆผ์ž three.js๋Š” ๋™์ ์œผ๋กœ ๊ทธ๋ฆผ์ž๋ฅผ ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋‚ด๋ถ€์ ์œผ๋กœ ํ…์Šค์ณ ๋งตํ•‘์„ ํ†ตํ•ด ๊ทธ๋ฆผ์ž๋ฅผ ์œ„ํ•œ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๊ณ , ์ด ์ด๋ฏธ์ง€๋ฅผ ์ด์šฉํ•ด ๊ทธ๋ฆผ์ž๋ฅผ ์‹œ๊ฐํ™” ํ•ด๋ณด์ž. ๊ทธ๋ฆผ์ž๋ฅผ ๋ Œ๋”๋งํ•˜๊ธฐ ์œ„ํ•œ ์„ธ ๊ฐ€์ง€ ๊ฐ์ฒด ์„ค์ • 1. Renderer ๊ฐ์ฒด renderer.shadowMap.enabled = true 2. ๊ด‘์› ๊ทธ๋ฆผ์ž๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ด‘์› DirectionalLight PointLight SpotLight ์ด ๊ด‘์›๋“ค์€ ๋ชจ๋‘ shadow.camera ์†์„ฑ์„ ๊ฐ–๋Š”๋‹ค. ์ด ์†์„ฑ์ด ๊ทธ๋ฆผ์ž์— ๋Œ€ํ•œ ํ…์Šค์ณ ์ด๋ฏธ์ง€๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ๊ทธ๋ฆผ์ž๋ฅผ ์ค„ ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€๋ฅผ ๋‹ค์Œ์ฒ˜๋Ÿผ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. light.castShadow = true; // ํ™œ์„ฑํ™” 3. ๋ชจ๋ธ ๊ทธ๋ฆผ์ž๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ชจ๋ธ์— ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค...

  4. [ํด๋ฆฐ์ฝ”๋“œ] 6์žฅ ๊ฐ์ฒด์™€ ์ž๋ฃŒ๊ตฌ์กฐ

    ์ž๋ฃŒ ์ถ”์ƒํ™” ๊ตฌํ˜„์„ ๊ฐ์ถ”๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ถ”์ƒํ™”๊ฐ€ ํ•„์š”ํ•˜๋‹ค Getter์™€ Setter๊ฐ€ ์•„๋‹Œ, ์ถ”์ƒ ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์ œ๊ณตํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ๊ตฌํ˜„์„ ๋ชจ๋ฅธ ์ฑ„ ์ž๋ฃŒ์™€ ํ•ต์‹ฌ์„ ์กฐ์ž‘ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ž๋ฃŒ๋ฅผ ์„ธ์„ธํ•˜๊ฒŒ ๊ณต๊ฐœํ•˜๊ธฐ๋ณด๋‹ค๋Š” ์ถ”์ƒ์ ์ธ ๊ฐœ๋…์œผ๋กœ ํ‘œํ˜„ํ•˜๋Š” ํŽธ์ด ์ข‹๋‹ค ์ž๋ฃŒ/๊ฐ์ฒด ๋น„๋Œ€์นญ ๊ฐ์ฒด์™€ ์ž๋ฃŒ ๊ตฌ์กฐ์˜ ์ •์˜๋Š” ๋ณธ์งˆ์ ์œผ๋กœ ์ƒ๋ฐ˜๋œ๋‹ค. ๊ฐ์ฒด: ์ถ”์ƒํ™” ๋’ค๋กœ ์ž๋ฃŒ๋ฅผ ์ˆจ๊ธด ์ฑ„ ์ž๋ฃŒ๋ฅผ ๋‹ค๋ฃจ๋Š” ํ•จ์ˆ˜๋งŒ ๊ณต๊ฐœํ•œ๋‹ค. ์ž๋ฃŒ ๊ตฌ์กฐ: ์ž๋ฃŒ๋ฅผ ๊ทธ๋Œ€๋กœ ๊ณต๊ฐœํ•˜๋ฉฐ ๋ณ„๋‹ค๋ฅธ ํ•จ์ˆ˜๋Š” ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค. ์‚ฌ์†Œํ•ด ๋ณด์ด์ง€๋งŒ ์ด ์ฐจ์ด๊ฐ€ ๋ฏธ์น˜๋Š” ์˜ํ–ฅ์€ ๋งค์šฐ ํฌ๋‹ค. ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด ๋‘˜์˜ ์ฐจ์ด์ ์„ ์ž์„ธํžˆ ์•Œ์•„๋ณด์ž ๋„ํ˜• ํด๋ž˜์Šค๋ฅผ ์ž๋ฃŒ ๊ตฌ์กฐ๋กœ ๊ตฌํ˜„ - ์ ˆ์ฐจ์ ์ธ ๋„ํ˜• class Square { topLeft: Point; side: number; } class Rectangle { ..

  5. [three.js] ์นด๋ฉ”๋ผ - PerspectiveCamera vs OrthographicCamera

    8๊ฐ• ์นด๋ฉ”๋ผ ์นด๋ฉ”๋ผ๋Š” Camera ํด๋ž˜์Šค๋ฅผ ์ƒ์†๋ฐ›๋Š”๋‹ค. ๋‘ ๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค. PerspectiveCamera: ์›๊ทผ๊ฐ(๊ฑฐ๋ฆฌ๊ฐ)์„ ํ‘œํ˜„ํ•œ๋‹ค. ๊ฐ€๊นŒ์ด ์žˆ๋Š” ๋ฌผ์ฒด๊ฐ€ ๋ฉ€๋ฆฌ ์žˆ๋Š” ๋ฌผ์ฒด๋ณด๋‹ค ์ƒ๋Œ€์ ์œผ๋กœ ํฌ๊ฒŒ ๋ณด์ด๋„๋ก ๋ Œ๋”๋ง OrthographicCamera: ์›๊ทผ๊ฐ(๊ฑฐ๋ฆฌ๊ฐ) ์—†์ด ํ‘œํ˜„ํ•œ๋‹ค. ๋ฌผ์ฒด์˜ ์›๋ž˜ ํฌ๊ธฐ๋Œ€๋กœ ๋ Œ๋”๋ง๋œ๋‹ค. ์ด ๋‘๊ฐ€์ง€ ์นด๋ฉ”๋ผ์˜ ์ฐจ์ด์ ์„ ์•Œ์•„๋ณด์ž PerspectiveCamera ์นด๋ฉ”๋ผ๋ฅผ ์ •์˜ํ•˜๊ธฐ ์œ„ํ•ด์„œ 4๊ฐœ์˜ ์ธ์ž๊ฐ’์ด ํ•„์š” **์ ˆ๋‘์ฒด: 4๊ฐœ์˜ ๊ฐ’์„ ํ†ตํ•ด ๊ตฌ์„ฑ๋œ (์•„๋ž˜ ๊ทธ๋ฆผ์˜ ์—ฐ๋‘์ƒ‰) ์œก๋ฉด์ฒด ์ด ์ ˆ๋‘์ฒด ์•ˆ์— ์กด์žฌํ•˜๋Š” ๋ฌผ์ฒด๊ฐ€ ์นด๋ฉ”๋ผ๋ฅผ ํ†ตํ•ด ๋ณด์—ฌ์ง€๊ณ  ํ™”๋ฉด์— ๋ Œ๋”๋ง๋œ๋‹ค. fovy: ์ ˆ๋‘์ฒด ๋†’์ด ๋ฐฉํ–ฅ์˜ ๊ฐ๋„ (๋‹จ์œ„: degree) aspect: ์ ˆ๋‘์ฒด ๊ฐ€๋กœ ๊ธธ์ด๋ฅผ ์„ธ๋กœ ๊ธธ์ด๋กœ ๋‚˜๋ˆˆ ๋น„์œจ zNear, zFar:..

  6. [three.js] ์—ฌ๋Ÿฌ๊ฐ€์ง€ ๊ด‘์›์„ ๋‹ค๋ค„๋ณด์ž

    7๊ฐ• ๊ด‘์› AmbientLight, HemisphereLight: ํ™˜๊ฒฝ๊ด‘, ์ฃผ๋ณ€๊ด‘ DirectionalLight, PointLight, SpotLight, RectAreaLight: ๋‹จ์ˆœํ•œ ์ฃผ๋ณ€๊ด‘์ด ์•„๋‹Œ ๋น›์˜ ๋ฐฉํ–ฅ์„ฑ์„ ๊ฐ€์ง€๋Š” ๊ด‘์› ์ƒ์„ฑ์ž์—์„œ ๊ด‘์›์˜ ์ƒ‰์ƒ๊ณผ ์„ธ๊ธฐ๋ฅผ ๋ฐ›์Œ ์ค€๋น„ํ•˜๊ธฐ ๊ด‘์›์„ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•œ ์—ฐ์Šต์— ์‚ฌ์šฉํ•  Scene์„ ๋‹ค์Œ ์”ฌ๊ทธ๋ž˜ํ”„๋กœ ๊ตฌ์„ฑํ•œ๋‹ค. AmbientLight scene์— ์กด์žฌํ•˜๋Š” ๋ชจ๋“  ๋ฌผ์ฒด์— ๋Œ€ํ•ด์„œ ๋‹จ์ผ ์ƒ‰์ƒ์œผ๋กœ ๋ Œ๋”๋ง ๋˜๋„๋ก ํ•œ๋‹ค. Usage: ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ ์„ธ๊ธฐ๊ฐ’์„ ๋งค์šฐ ์•ฝํ•˜๊ฒŒ ์ง€์ •ํ•ด์„œ ์žฅ๋ฉด์— ์ถ”๊ฐ€ํ•˜์—ฌ ๊ด‘์›์˜ ์˜ํ–ฅ์„ ๋ฐ›์ง€ ๋ชปํ•˜๋Š” ๋ฌผ์ฒด๋„ ์‚ด์ง ๋ณด์ด๋„๋ก ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. HemiphereLight AmibientLight์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ๋น›์— ๋Œ€ํ•œ ์ƒ‰์ƒ๊ฐ’์ด ํ•˜๋‚˜๊ฐ€ ์•„๋‹ˆ๋ผ ๋‘ ๊ฐœ์ด๋‹ค. ํ•˜๋‚˜๋Š” ์œ„..

  7. [ํด๋ฆฐ์ฝ”๋“œ] 5์žฅ ํ˜•์‹ ๋งž์ถ”๊ธฐ

    5์žฅ ํ˜•์‹ ๋งž์ถ”๊ธฐ ํ”„๋กœ๊ทธ๋ž˜๋จธ๋Š” ๊น”๋”ํ•œ ํ˜•์‹์— ๋งž์ถฐ ์ฝ”๋“œ๋ฅผ ์งœ์•ผํ•œ๋‹ค. ์ฝ”๋“œ ํ˜•์‹์„ ๋งž์ถ”๊ธฐ ์œ„ํ•œ ๊ทœ์น™์„ ์ •ํ•˜๊ณ  ์ด๋ฅผ ์ฐฉ์‹คํžˆ ๋”ฐ๋ผ์•ผ ํ•œ๋‹ค. ํ•„์š”ํ•˜๋‹ค๋ฉด ๊ทœ์น™์„ ์ž๋™์œผ๋กœ ์ ์šฉํ•˜๋Š” ๋„๊ตฌ๋ฅผ ํ™œ์šฉํ•œ๋‹ค. ์ด ์žฅ์—์„œ๋Š” ์ฝ”๋“œ๋ฅผ ๊น”๋”ํ•˜๊ณ , ์ผ๊ด€์ ์ด๋ฉฐ, ์งˆ์„œ ์ •์—ฐํ•˜๊ฒŒ ํ˜•์‹์„ ๋งž์ถ”๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค. ํ˜•์‹์„ ๋งž์ถ”๋Š” ๋ชฉ์  ์ฝ”๋“œ๋Š” ์‚ฌ๋ผ์งˆ์ง€๋ผ๋„ ๊ฐœ๋ฐœ์ž์˜ ์Šคํƒ€์ผ๊ณผ ๊ทœ์œจ์€ ์‚ฌ๋ผ์ง€์ง€ ์•Š๋Š”๋‹ค. ์ฝ”๋“œ ํ˜•์‹์€ ์˜์‚ฌ์†Œํ†ต์˜ ์ผํ™˜์ด๋ฉฐ, ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์€ ์•ž์œผ๋กœ ๋ฐ”๋€” ์ฝ”๋“œ ํ’ˆ์งˆ์— ํฐ ์˜ํ–ฅ์„ ๋ฏธ์นœ๋‹ค. ์ ์ ˆํ•œ ํ–‰ ๊ธธ์ด๋ฅผ ์œ ์ง€ํ•˜๋ผ ๋Œ€๋ถ€๋ถ„ 200์ค„ ์ •๋„์ธ ํŒŒ์ผ๋กœ๋„ ์ปค๋‹ค๋ž€ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ํฐ ํŒŒ์ผ๋ณด๋‹ค ์ž‘์€ ํŒŒ์ผ์ด ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค. ์‹ ๋ฌธ ๊ธฐ์‚ฌ์ฒ˜๋Ÿผ ์ž‘์„ฑํ•˜๋ผ ์‹ ๋ฌธ ๊ธฐ์‚ฌ์˜ ํ๋ฆ„์„ ๋ณด๋ฉด ์ฒซ ๋ฌธ๋‹จ์— ์ „์ฒด ๊ธฐ์‚ฌ ๋‚ด์šฉ์„ ์š”์•ฝํ•œ๋‹ค. ๊ธ€์„ ์ฝ์–ด ๋‚ด๋ ค๊ฐˆ์ˆ˜๋ก..