1 Getting started 7 Transformations - JJhuk/LearnOpenGL GitHub Wiki

LearnOpenGL - Transformations

์ƒ์„ฑ์ผ: 2021๋…„ 1์›” 24์ผ ์˜ค์ „ 4:36 ์†์„ฑ 1: https://learnopengl.com/Getting-started/Transformations

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

ํ–‰๋ ฌ์€ ์ฒ˜์Œ์—๋Š” ๋ฌด์„ญ๊ฒŒ ๋Š๊ปด์ง€๋Š” ๋งค์šฐ ๊ฐ•๋ ฅํ•œ ์ˆ˜ํ•™์  ๊ตฌ์กฐ์ด์ง€๋งŒ ์ต์ˆ™ํ•ด์ง€๋ฉด ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ–‰๋ ฌ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•  ๋•Œ ๋ช‡ ๊ฐ€์ง€ ์ˆ˜ํ•™์— ๋Œ€ํ•ด ์ž ์‹œ ์‚ดํŽด๋ณด์•„์•ผ ํ•  ๊ฒƒ์ด๋ฉฐ ๋” ์ˆณ

๊ทธ๋Ÿฌ๋‚˜ ๋ณ€ํ™˜์„ ์™„์ „ํžˆ ์ดํ•ดํ•˜๋ ค๋ฉด ๋จผ์ € ํ–‰๋ ฌ์— ๋Œ€ํ•ด ๋…ผ์˜ํ•˜๊ธฐ ์ „์— ๋ฒกํ„ฐ์— ๋Œ€ํ•ด ์ข€ ๋” ๊นŠ์ด ์•Œ์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์žฅ์˜ ์ดˆ์ ์€ ๋‚˜์ค‘์— ํ•„์š”ํ•œ ์ฃผ์ œ์— ๋Œ€ํ•œ ๊ธฐ๋ณธ์ ์ธ ์ˆ˜ํ•™์  ๋ฐฐ๊ฒฝ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ฃผ์ œ๊ฐ€ ์–ด๋ ค์šด ๊ฒฝ์šฐ ์ตœ๋Œ€ํ•œ ์ดํ•ดํ•˜๋ ค๊ณ  ํ•˜๊ณ , ๋‚˜์ค‘์— ์ด ์žฅ์œผ๋กœ ๋Œ์•„์™€์„œ ํ•„์š”ํ•  ๋•Œ๋งˆ๋‹ค ๋‹ค์‹œ ๋ณด์‹ญ์‹œ์˜ค.

๋ฒกํ„ฐ

๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ์ •์˜์—์„œ ๋ฒกํ„ฐ๋Š” ๋ฐฉํ–ฅ์ด๋ฉฐ ๊ทธ ์ด์ƒ์€ ์—†์Šต๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์—๋Š” ๋ฐฉํ–ฅ๊ณผ ํฌ๊ธฐ (ํž˜ ๋˜๋Š” ๊ธธ์ด๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค). ๋‹น์‹ ์€ ๋ณด๋ฌผ์ง€๋„์˜ ๊ธธ ์ฐพ๊ธฐ์™€ ๊ฐ™์€ ๋ฒกํ„ฐ๋ฅผ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. : '์™ผ์ชฝ์œผ๋กœ 10 ๊ฑธ์Œ, ์ด์ œ ๋ถ์ชฝ์œผ๋กœ 3๊ฑธ์Œ, ์˜ค๋ฅธ์ชฝ์œผ๋กœ 5๊ฑธ์Œ' ์—ฌ๊ธฐ์„œ '์™ผ์ชฝ'์€ ๋ฐฉํ–ฅ์ด๊ณ  '10'์€ ๋ฒกํ„ฐ์˜ ํฌ๊ธฐ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ณด๋ฌผ์ง€๋„์˜ ๋ฐฉํ–ฅ์—๋Š” 3๊ฐœ์˜ ๋ฒกํ„ฐ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ๋Š” ๋ชจ๋“  ์ฐจ์›์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ์ผ๋ฐ˜์ ์œผ๋กœ 2-4์ฐจ์›์œผ๋กœ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์˜ 2์ฐจ์›์ด ์žˆ์œผ๋ฉด ํ‰๋ฉด์ƒ์˜ ๋ฐฉํ–ฅ์„ ๋‚˜ํƒ€๋‚ด๊ณ  (2D ๊ทธ๋ž˜ํ”ฝ์„ ์ƒ๊ฐํ•ด๋ณด์„ธ์š”) 3์ฐจ์›์ด ์žˆ์œผ๋ฉด 3D์„ธ๊ณ„์˜ ๋ชจ๋“  ๋ฐฉํ–ฅ์„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•„๋ž˜์—๋Š” ๊ฐ ๋ฒกํ„ฐ๊ฐ€ 2D๊ทธ๋ž˜ํ”„์—์„œ ํ™”์‚ดํ‘œ๋กœ (x, y) ๋กœ ํ‘œํ˜„๋˜๋Š” 3๊ฐœ์˜ ๋ฒกํ„ฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒกํ„ฐ๋ฅผ 3D๊ฐ€ ์•„๋‹Œ 2D๋กœ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ์ด ๋” ์ง๊ด€์ ์ด๊ธฐ ๋•Œ๋ฌธ์— 2D ๋ฒกํ„ฐ๋ฅผ z ์ขŒํ‘œ๊ฐ€ 0 ์ธ 3D๋ฒกํ„ฐ๋กœ ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒกํ„ฐ๋Š” ๋ฐฉํ–ฅ์„ ๋‚˜ํƒ€๋‚ด๋ฏ€๋กœ ๋ฒกํ„ฐ์˜ ์‹œ์ž‘์ ์€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ทธ๋ž˜ํ”„์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋Š” ๋ฒกํ„ฐ $\bar v$ ์™€ ๋ฒกํ„ฐ $\bar w$์˜ ์‹œ์ž‘์ ์ด ๋‹ค๋ฅด๋”๋ผ๋„ ๋™์ผํ•œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

vectors

๋ฒกํ„ฐ๋ฅผ ์„ค๋ช…ํ•  ๋•Œ ์ˆ˜ํ•™์ž๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฒกํ„ฐ๋ฅผ ๋จธ๋ฆฌ ์œ„์— ์ž‘์€ ๋ง‰๋Œ€๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž ๊ธฐํ˜ธ๋กœ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์„ ์„ ํ˜ธํ•ฉ๋‹ˆ๋‹ค. $\bar v$ ๋˜ํ•œ ๊ณต์‹์— ๋ฒกํ„ฐ๋ฅผ ํ‘œ์‹œํ•  ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

0

๋ฒกํ„ฐ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์ง€์ •ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์œ„์น˜๋กœ ์‹œ๊ฐํ™”ํ•˜๊ธฐ ์–ด๋ ค์šด ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒกํ„ฐ๋ฅผ ์œ„์น˜๋กœ ์‹œ๊ฐํ™”ํ•˜๋ ค๋ฉด ๋ฐฉํ–ฅ ๋ฒกํ„ฐ์˜ ์‹œ์ž‘์ ์ด (0, 0, 0) ์ด ๋˜๋Š” ๊ฒƒ์„ ์ƒ์ƒ ํ•œ ๋‹ค์Œ ์ ์„ ์ง€์ •ํ•˜๋Š” ํŠน์ • ๋ฐฉํ–ฅ์„ ๊ฐ€๋ฆฌ์ผœ ์œ„์น˜ ๋ฒกํ„ฐ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ์‹œ์ž‘์ ์„ ์ž…๋ ฅ ํ•œ ๋‹ค์Œ '์ด ๋ฒกํ„ฐ๋Š” ์ด ์‹œ์ž‘์ ์—์„œ ๊ณต๊ฐ„์˜ ํ•ด๋‹น ์ง€์ ์„ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค๋ผ๊ณ  ๋งํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด ์œ„์น˜ ๋ฒกํ„ฐ(3, 5)๋Š” ์›์ ์ด(0, 0)์ธ ๊ทธ๋ž˜ํ”„์—์„œ(3, 5)` ๋ฅผ ์นด๋ฆฌํ‚ต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 2D ๋ฐ 3D ๊ณต๊ฐ„์—์„œ ๋ฐฉํ–ฅ ๋ฐ ์œ„์น˜๋ฅผ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ผ๋ฐ˜ ์ˆซ์ž์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฒกํ„ฐ์— ๋Œ€ํ•ด ์—ฌ๋Ÿฌ ์—ฐ์‚ฐ์„ ์ •์˜ ํ• ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. (์ผ๋ถ€๋Š” ์ด๋ฏธ ๋ณด์‹ ๊ฒ๋‹ˆ๋‹ค.)

์Šค์นผ๋ผ ๋ฒกํ„ฐ ์—ฐ์‚ฐ

์Šค์นผ๋ผ๋Š” ํ•œ ์ž๋ฆฌ ์ˆซ์ž์ž…๋‹ˆ๋‹ค. ์Šค์นผ๋ผ๋กœ ๋ฒกํ„ฐ๋ฅผ ๋”ํ•˜๊ธฐ / ๋นผ๊ธฐ / ๊ณฑํ•˜๊ธฐ ๋˜๋Š” ๋‚˜๋ˆŒ ๋•Œ ์šฐ๋ฆฌ๋Š” ๋‹จ์ˆœํžˆ ๋ฒกํ„ฐ์˜ ๊ฐ ์š”์†Œ๋ฅผ ์Šค์นผ๋ผ๋กœ ๋”ํ•˜๊ฑฐ๋‚˜ / ๋นผ๊ฑฐ๋‚˜ / ๊ณฑํ•˜๊ฑฐ๋‚˜ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

1

์—ฌ๊ธฐ์„œ +๋Š” +, โˆ’, โ‹… ๋˜๋Š” รท ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ โ‹…๋Š” ๊ณฑ์…ˆ ์—ฐ์‚ฐ์ž์ž…๋‹ˆ๋‹ค.

๋ฒกํ„ฐ negation

๋ฒกํ„ฐ๋ฅผ ๋ถ€์ •(negate)ํ•˜๋ฉด ๋ฐ˜๋Œ€ ๋ฐฉํ–ฅ์˜ ๋ฒกํ„ฐ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ถ๋™์ชฝ์„ ๊ฐ€๋ฆฌํ‚ค๋Š” ๋ฒกํ„ฐ๋ฅผ ๋ถ€์ •ํ•œ ํ›„ ๋‚จ์„œ์ชฝ์œผ๋กœ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค. ๋ฒกํ„ฐ๋ฅผ ๋ถ€์ •ํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ์— ๋งˆ์ด๋„ˆ์Šค ๋ถ€ํ˜ธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. (์Šค์นผ๋ผ ๊ฐ’์ด -1 ์ธ ์Šค์นผ๋ผ ๋ฒกํ„ฐ ๊ณฑ์…ˆ์œผ๋กœ๋„ ๋‚˜ํƒ€๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.)

2

๋ง์…ˆ๊ณผ ๋บ„์…ˆ

๋‘ ๋ฒกํ„ฐ์˜ ๋ง์…ˆ์€ ๊ตฌ์„ฑ ์š”์†Œ๋ณ„๋กœ์˜ ๋ง์…ˆ์œผ๋กœ ์ •์˜๋ฉ๋‹ˆ๋‹ค. ์ฆ‰, ํ•œ ๋ฒกํ„ฐ์˜ ๊ฐ ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋‹ค๋ฅธ ๋ฒกํ„ฐ์˜ ๋™์ผํ•œ ๊ตฌ์„ฑ ์š”์†Œ์— ์ถ”๊ฐ€๋ฉ๋‹ˆ๋‹ค.

3

์‹œ๊ฐ์ ์œผ๋กœ ๋ฒกํ„ฐ v = (4,2) ์™€ k = (1,2) ์—์„œ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณด์ž…๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋ฒกํ„ฐ๋Š” ์ฒซ ๋ฒˆ์งธ ๋ฐฑํ„ฐ์˜ ๋์— ์ถ”๊ฐ€๋˜์–ด ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ฒกํ„ฐ๋ฅผ ๋์ ์„ ์ฐพ์Šต๋‹ˆ๋‹ค. (ํ—ค๋“œ-ํˆฌ-ํ…Œ์ผ ๋ฐฉ๋ฒ•)

vectors_addition

์ผ๋ฐ˜ ๋ง์…ˆ ๋ฐ ๋บ„์…ˆ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ฒกํ„ฐ ๋บ„์…ˆ์€ ๋ถ€์ • ๋œ ๋‘ ๋ฒˆ์งธ ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•œ ๋ง์…ˆ๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒกํ„ฐ๋ฅผ ์„œ๋กœ ๋นผ๋ฉด ๋‘ ๋ฒกํ„ฐ๊ฐ€ ๊ฐ€๋ฆฌํ‚ค๋Š” ์œ„์น˜์˜ ์ฐจ ์ธ ๋ฒกํ„ฐ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋‘ ์ ๊ฐ„์˜ ๋ฒกํ„ฐ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒฝ์šฐ์— ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

vectors_subtraction

๊ธธ์ด

๋ฒกํ„ฐ์˜ ๊ธธ์ด / ํฌ๊ธฐ๋ฅผ ์•Œ๊ธฐ์œ„ํ•ด ์ˆ˜ํ•™ ์ˆ˜์—…์—์„œ ๋ฐฐ์› ๋˜ ํ”ผํƒ€๊ณ ๋ผ์Šค ์ •๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋ฒกํ„ฐ๋Š” ๊ฐœ๋ณ„ x ๋ฐ y ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ผ๊ฐํ˜•์˜ ๋‘ ๋ณ€์œผ๋กœ ์‹œ๊ฐํ™” ํ•˜๋ฉด ์‚ผ๊ฐํ˜•์„ ํ˜•์„ฑํ•ฉ๋‹ˆ๋‹ค.

vectors_triangle

๋‘ ๋ณ€์˜ ๊ธธ์ด (x, y) ๋ฅผ ์•Œ๊ณ  ์žˆ๊ณ  ๊ธฐ์šธ์–ด ์ง„ ๋ณ€์˜ ๊ธธ์ด๋ฅผ ์•Œ๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ํ”ผํƒ€๊ณ ๋ผ์Šค ์ •๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

4

$\lVert\bar{v}\rVert$ ์ด๊ฒƒ์€ ๋ฒกํ„ฐ $\bar{v}$์˜ ๊ธธ์ด๋กœ ํ‘œ์‹œํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์„ ๋ฐฉ์ •์‹์— $z^2$๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ 3D๋กœ ์‰ฝ๊ฒŒ ํ™•์žฅ๋ฉ๋‹ˆ๋‹ค.

์ด ๊ฒฝ์šฐ์—” ๋ฒกํ„ฐ (4, 2) ์˜ ๊ธธ์ด๋Š”

5

4.47 ์ž…๋‹ˆ๋‹ค.

๋‹จ์œ„ ๋ฒกํ„ฐ๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ํŠน๋ณ„ํ•œ ์œ ํ˜•์˜ ๋ฒกํ„ฐ๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์œ„ ๋ฒกํ„ฐ์—๋Š” ํ•˜๋‚˜์˜ ์ถ”๊ฐ€ ์†์„ฑ์ด ์ด์”…๋ฉฐ ๊ธธ์ด๋Š” ์ •ํ™•ํžˆ 1์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์˜ ๊ฐ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๊ธธ์ด๋กœ ๋‚˜๋ˆ„์–ด ๋ชจ๋“  ๋ฒกํ„ฐ์—์„œ ๋‹จ์œ„ ๋ฒกํ„ฐ๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

6

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

๋ฒกํ„ฐ๊ฐ„์˜ ๊ณฑ์…ˆ

๋‘ ๋ฒกํ„ฐ๋ฅผ ๊ณฑํ•˜๋Š” ๊ฒƒ์€ ์ด์ƒํ•œ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์ •๊ทœ ๊ณฑ์…ˆ์€ ์‹œ๊ฐ์  ์˜๋ฏธ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ์‹ค์ œ๋กœ ๋ฒกํ„ฐ์—์„œ ์ •์˜๋˜์ง€ ์•Š์ง€๋งŒ ๊ณฑํ•  ๋•Œ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋‘ ๊ฐ€์ง€ ํŠน์ • ๊ฒฝ์šฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜๋‚˜๋Š” $\vec x\cdot\vec y$๋กœ ํ‘œ์‹œ๋œ ๋‚ด์ ์ด๊ณ , ๋‹ค๋ฅธ ํ•˜๋‚˜๋Š” $\vec x * \vec y$ ๋กœ ํ‘œ์‹œ๋œ ์™ธ์ ์ž…๋‹ˆ๋‹ค.

๋‚ด์ (Dot product)

๋‘ ๋ฒกํ„ฐ๋ฅผ ๋‚ด์ ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ๊ฐ ๋ฒกํ„ฐ ์‚ฌ์ด์˜ ์ฝ”์‚ฌ์ธ๊ณผ ๊ฐ ๊ธธ์ด์˜ ์Šค์นผ๋ผ๋ฅผ ๊ณฑํ•˜๋Š”๊ฒƒ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์ด ๋ง์ด ์ž˜ ์ดํ•ด๊ฐ€ ๊ฐ€์ง€ ์•Š๋Š”๋‹ค๋ฉด ๋‹ค์Œ ๊ณต์‹์„ ๋ณด์„ธ์š”.

7

๊ฐ ๋ฒกํ„ฐ ์‚ฌ์ด์˜ ๊ฐ๋„๋Š” ์„ธํƒ€ $(\theta)$๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ํฅ๋ฏธ๋กœ์šด ์ด์œ ๋Š”, $\bar{v}$์™€ $\bar{k}$๊ฐ€ ๋‹จ์œ„ ๋ฒกํ„ฐ๋ผ๊ณ  ๊ฐ€์ •ํ•˜๋ฉด ๊ธธ์ด๊ฐ€ 1์ผ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๊ณต์‹์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํšจ์œจ์ ์œผ๋กœ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

8

์ด์ œ ๋‚ด์ ๋งŒ์ด ๋‘ ๋ฐฑํ„ฐ ์‚ฌ์ด์˜ ๊ฐ๋„๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”์‚ฌ์ธํ•จ์ˆ˜๋Š” ๊ฐ๋„๊ฐ€ 90๋„๋ฉด 0 ์ด ๋˜๊ณ  ๊ฐ๋„๊ฐ€ 0์ด๋ฉด 1 ์ด ๋œ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋‚ด์ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ๋ฒกํ„ฐ๊ฐ€ ์„œ๋กœ ์ง๊ตํ•˜๋Š”์ง€, ํ‰ํ–‰ํ•œ์ง€ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (์ง๊ต๋Š” ๋ฒกํ„ฐ๊ฐ€ ์„œ๋กœ ์ง๊ฐ์— ์žˆ์Œ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.) sin ๋˜๋Š” cos ํ•จ์ˆ˜์— ๋Œ€ํ•ด ๋” ์•Œ๊ณ ์‹ถ๋‹ค๋ฉด ์นธ ์•„์นด๋ฐ๋ฏธ ๋™์˜์ƒ ์—์„œ ๊ธฐ๋ณธ ์‚ผ๊ฐ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค.

๋‘๊ฐœ์˜ ๋‹จ์œ„๋ฒกํ„ฐ๊ฐ€ ์•„๋‹Œ ๋ฒกํ„ฐ ์‚ฌ์ด์˜ ๊ฐ๋„๋ฅผ ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ฒฐ๊ณผ์—์„œ ๋‘ ๋ฒกํ„ฐ์˜ ๊ธธ์ด๋ฅผ ๋‚˜๋ˆ„์–ด $cos\theta$๋กœ ๋‚จ๊ฒจ์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ๋‚ด์ ์€ ์–ด๋–ป๊ฒŒ ๊ณ„์‚ฐํ• ๊นŒ์š”? ๋‚ด์ ์€ ๊ตฌ์„ฑ ์š”์†Œ ๋ณ„ ๊ณฑ์…ˆ์˜ ๊ฒฐ๊ณผ๋ฅผ ๋”ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ ๋‹จ์œ„ ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค (๋‘ ๊ธธ์ด ๋ชจ๋‘ ์ •ํ™•ํžˆ 1 ์ธ์ง€ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Œ.)

9

์ด ๋‘ ๋‹จ์œ„ ๋ฒกํ„ฐ ์‚ฌ์ด์˜ ๊ฐ๋„๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ์šฐ๋ฆฌ๋Š” ์ฝ”์‚ฌ์ธ ํ•จ์ˆ˜์˜ ์—ญ์ธ $cos^{-1}$ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ฒฐ๊ณผ์ ์œผ๋กœ 143.1 ๋„๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด์ œ ์ด ๋‘ ๋ฒกํ„ฐ ์‚ฌ์ด์˜ ๊ฐ๋„๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ณ„์‚ฐํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด์ ์€ ๋‚˜์ค‘์— ์กฐ๋ช… ๊ณ„์‚ฐ์„ ํ•  ๋•Œ ๋งค์šฐ ์œ ์šฉํ•ฉ๋‹ˆ๋‹ค.

์™ธ์ (Cross product)

์™ธ์ ์€ 3D๊ณต๊ฐ„์—์„œ๋งŒ ์ •์˜๋˜๋ฉฐ ๋‘ ๊ฐœ์˜ ํ‰ํ–‰ํ•˜์ง€ ์•Š์€ ๋ฒกํ„ฐ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ , ๋‘ ์ž…๋ ฅ ๋ฒกํ„ฐ์— ์ง๊ตํ•˜๋Š” ์„ธ ๋ฒˆ์งธ ๋ฒกํ„ฐ๋ฅผ ์–ป์Šต๋‹ˆ๋‹ค. ๋‘ ์ž…๋ ฅ ๋ฒกํ„ฐ๊ฐ€ ์„œ๋กœ ์ง๊ตํ•˜๋ฉด ์™ธ์ ์€ 3๊ฐœ์˜ ์ง๊ต ๋ฒกํ„ฐ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‹ค์Œ ์žฅ์—์„œ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ด๋ฏธ์ง€๋Š” ์ด๊ฒƒ์ด 3D๊ณต๊ฐ„์—์„œ ์–ด๋–ป๊ฒŒ ๋ณด์ด๋Š”์ง€ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

vectors_crossproduct

๋‹ค๋ฅธ ์—ฐ์‚ฐ๊ณผ ๋‹ฌ๋ฆฌ ์™ธ์ ์€ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ๊ณต๋ถ€ํ•˜์ง€ ์•Š๊ณ ๋Š” ์ง๊ด€์ ์ด์ง€ ์•Š์œผ๋ฏ€๋กœ ๊ณต์‹์„ ์™ธ์šฐ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.(๊ทธ๋ ‡์ง€ ์•Š๋‹ค๋ฉด ๋‚˜์ค‘์— ๊ดœ์ฐฎ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.) ์•„๋ž˜์—์„œ ๋‘ ์ง๊ต ๋ฒกํ„ฐ A์™€ B ์‚ฌ์ด์˜ ์™ธ์ ์„ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

10

๋ณด์‹œ๋‹ค์‹œํ”ผ ์™€๋‹ฟ์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด ๋‹จ๊ณ„๋งŒ ๋”ฐ๋ฅด๋ฉด ์ง๊ตํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฒกํ„ฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ–‰๋ ฌ(Matrices)

์ด์ œ ๋ฒกํ„ฐ์— ๋Œ€ํ•œ ๊ฑฐ์˜ ๋ชจ๋“ ๊ฒƒ์„ ์•Œ์•„๋ดค์œผ๋ฏ€๋กœ ํ–‰๋ ฌ์— ๋“ค์–ด๊ฐˆ ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค! ํ–‰๋ ฌ์€ ์ˆซ์ž, ๊ธฐํ˜ธ ๋ฐ/๋˜๋Š” ์ˆ˜ํ•™ ํ‘œํ˜„์‹์˜ ์ง์‚ฌ๊ฐํ˜• ๋ฐฐ์—ด์ž…๋‹ˆ๋‹ค. ํ–‰๋ ฌ์˜ ๊ฐ ๊ฐœ๋ณ„ ํ•ญ๋ชฉ์„ ํ–‰๋ ฌ์˜ ์š”์†Œ(element)๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. 2x3 ํ–‰๋ ฌ์˜ ์˜ˆ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

11

ํ–‰๋ ฌ์€ (i, j) ์— ์˜ํ•ด ์ธ๋ฑ์‹ฑ๋ฉ๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ i ๋Š” ํ–‰์ด๊ณ  j ๋Š” ์—ด์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์œ„ ํ–‰๋ ฌ์€ 2x3 ํ–‰๋ ฌ (์—ด 3๊ฐœ์™€ ํ–‰2๊ฐœ, ํ–‰๋ ฌ์˜ ์ฐจ์›(dimension) ์ด๋ผ๊ณ ๋„ ํ•จ) ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ 2D ๊ทธ๋ž˜ํ”„๋ฅผ (x, y) ๋กœ ์ธ๋ฑ์‹ฑ ํ•  ๋•Œ์™€๋Š” ๋ฐ˜๋Œ€์ž…๋‹ˆ๋‹ค. ๊ฐ’ 4๋ฅผ ๊ฒ€์ƒ‰ํ•˜๋ ค๋ฉด (2, 1) (๋‘ ๋ฒˆ์งธ ํ–‰, ์ฒซ ๋ฒˆ์งธ ์—ด)๋กœ ์ƒ‰์ธ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

ํ–‰๋ ฌ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ˆ˜ํ•™ ํ‘œํ˜„์‹์˜ ์ง์‚ฌ๊ฐํ˜• ๋ฐฐ์—ด์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋งค์šฐ ์ข‹์€ ์ˆ˜ํ•™์  ์„ฑ์งˆ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ์œผ๋ฉฐ ๋ฒกํ„ฐ์™€ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ํ–‰๋ ฌ์— ๋Œ€ํ•œ ์—ฌ๋Ÿฌ ์—ฐ์‚ฐ ์ฆ‰, ๋”ํ•˜๊ธฐ, ๋นผ๊ธฐ ๋ฐ ๊ณฑํ•˜๊ธฐ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ง์…ˆ๊ณผ ๋บ„์…ˆ

๋‘ ํ–‰๋ ฌ ์‚ฌ์ด์˜ ๋”ํ•˜๊ธฐ ๋ฐ ๋นผ๊ธฐ๋Š” ์š”์†Œ๋ณ„๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ผ๋ฐ˜ ์ˆซ์ž์— ๋Œ€ํ•ด ์šฐ๋ฆฌ๊ฐ€ ์ต์†ํ•œ ๋™์ผํ•œ ๊ทœ์น™์ด ์ ์šฉ๋˜์ง€๋งŒ ๋™์ผํ•œ ์ธ๋ฑ์Šค๋ฅผ ๊ฐ€์ง„ ๋‘ ํ–‰๋ ฌ์˜ ์š”์†Œ์— ๋Œ€ํ•ด์„œ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋”ํ•˜๊ธฐ์™€ ๋นผ๊ธฐ๊ฐ€ ๊ฐ™์€ ์ฐจ์›์˜ ํ–‰๋ ฌ์— ๋Œ€ํ•ด์„œ๋งŒ ์ •์˜๋œ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. 3x2 ํ–‰๋ ฌ๊ณผ 2x3 ํ–‰๋ ฌ (๋˜๋Š” 3x3 ํ–‰๋ ฌ 4x4 ํ–‰๋ ฌ)์€ ํ•จ๊ป˜ ๋”ํ•˜๊ฑฐ๋‚˜ ๋บ„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋‘ ๊ฐœ์˜ 2x2 ํ–‰๋ ฌ์—์„œ ํ–‰๋ ฌ ๋ง์…ˆ์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

12

ํ–‰๋ ฌ ๋บ„์…ˆ์—์„œ๋„ ๋™์ผํ•œ ๊ทœ์น™์ด ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

13

ํ–‰๋ ฌ ์Šค์นผ๋ผ ๊ณฑ

ํ–‰๋ ฌ-์Šค์นผ๋ผ ๊ณฑ์€ ํ–‰๋ ฌ์˜ ๊ฐ ์š”์†Œ๋ฅผ ์Šค์นผ๋ผ๋กœ ๊ณฑํ•ฉ๋‹ˆ๋‹ค.

14

์ด์ œ ์ด๋Ÿฌํ•œ ๋‹จ์ผ ์ˆซ์ž๋ฅผ ์Šค์นผ๋ผ๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ์ด์œ ๋„ ์ดํ•ด๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์Šค์นผ๋ผ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ํ–‰๋ ฌ์˜ ๋ชจ๋“  ์š”์†Œ๋ฅผ ๊ฐ’์œผ๋กœ ์Šค์ผ€์ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „ ์˜ˆ์‹œ์—์„œ ๋ชจ๋“  ์š”์†Œ๋Š” 2 ๋กœ ํ™•์žฅ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ง€๊ธˆ๊นŒ์ง€ ์šฐ๋ฆฌ์˜ ๋ชจ๋“  ์˜ˆ์‹œ๋Š” ๊ทธ๋ ‡๊ฒŒ ๋ณต์žกํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํ–‰๋ ฌ๊ฐ„์˜ ๊ณฑ์…ˆ์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „๊นŒ์ง€๋Š”์š”.

ํ–‰๋ ฌ๊ฐ„ ๊ณฑ์…ˆ

ํ–‰๋ ฌ์„ ๊ณฑํ•˜๋Š” ๊ฒƒ์€ ๋ฐ˜๋“œ์‹œ ๋ณต์žกํ•˜์ง€๋Š” ์•Š์ง€๋งŒ, ์ต์ˆ™ํ•ด์ง€๊ธฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ํ–‰๋ ฌ ๊ณฑ์…ˆ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ณฑํ•  ๋•Œ ๋ฏธ๋ฆฌ ์ •์˜๋œ ๊ทœ์น™๋“ค์„ ๋”ฐ๋ฅด๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ๋ช‡ ๊ฐ€์ง€ ์ œํ•œ ์‚ฌํ•ญ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์ขŒ๋ณ€ ํ–‰๋ ฌ์˜ ์—ด ์ˆ˜๊ฐ€ ์šฐ๋ณ€ ํ–‰๋ ฌ์˜ ํ–‰ ์ˆ˜์™€ ๊ฐ™์€ ๊ฒฝ์šฐ์—๋งŒ ๋‘ ํ–‰๋ ฌ์„ ๊ณฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  2. ํ–‰๋ ฌ ๊ณฑ์…ˆ์€ ๊ตํ™˜๋ฒ•์น™์ด ์„ฑ๋ฆฝํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. $A\cdot{B}\not = B\cdot{A}$

2๊ฐœ์˜ 2x2 ํ–‰๋ ฌ์˜ ํ–‰๋ ฌ ๊ณฑ์…ˆ์˜ ์˜ˆ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

15

์ง€๊ธˆ ๋‹น์‹ ์€ ๋„๋Œ€์ฒด ๋ฌด์Šจ ์ผ์ด ์ผ์–ด ๋‚ฌ๋Š”์ง€ ์•Œ์•„๋‚ด๋ ค๊ณ  ํ•  ๊ฒƒ ์ž…๋‹ˆ๋‹ค. ํ–‰๋ ฌ ๊ณฑ์…ˆ์€ ์™ผ์ชฝ ํ–‰๋ ฌ์˜ ํ–‰๊ณผ ์˜ค๋ฅธ์ชฝ ํ–‰๋ ฌ์˜ ์—ด์„ ์‚ฌ์šฉํ•˜๋Š” ์ผ๋ฐ˜ ๊ณฑ์…ˆ๊ณผ ๋ง์…ˆ์˜ ์กฐํ•ฉ์ž…๋‹ˆ๋‹ค. ๋‹ค์Œ ์ด๋ฏธ์ง€๋กœ ์ด์— ๋Œ€ํ•ด ๋…ผ์˜ ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

Untitled

๋จผ์ € ์™ผ์ชฝ ํ–‰๋ ฌ์˜ ์œ„์ชฝ ํ–‰์„ ๊ฐ€์ ธ์˜จ ๋‹ค์Œ ์˜ค๋ฅธ์ชฝ ํ–‰๋ ฌ์˜ ์—ด์„ ๊ฐ€์ ธ์˜ต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ์„ ํƒํ•œ ํ–‰๊ณผ ์—ด์€ ๊ณ„์‚ฐํ•œ ๊ฒฐ๊ณผ 2x2 ํ–‰๋ ฌ์ด ๋‚˜์˜ต๋‹ˆ๋‹ค. ์™ผ์ชฝ ํ–‰๋ ฌ์˜ ์ฒซ ๋ฒˆ์งธ ํ–‰์„ ๊ฐ€์ ธ ์˜ค๋ฉด ๊ฒฐ๊ณผ ๊ฐ’์ด ๊ฒฐ๊ณผ ํ–‰๋ ฌ์˜ ์ฒซ ๋ฒˆ์งธ ํ–‰์ด ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ์—ด์„ ์„ ํƒํ•˜๊ณ  ์ฒซ ๋ฒˆ์งธ ์—ด์ด๋ฉด ๊ฒฐ๊ณผ ๊ฐ’์ด ๊ฒฐ๊ณผ ํ–‰๋ ฌ์˜ ์ฒซ ๋ฒˆ์งธ ์—ด์ด ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋ฐ”๋กœ ๋นจ๊ฐ„์ƒ‰ ๊ฒฝ๋กœ์˜ ๊ฒฝ์šฐ์ž…๋‹ˆ๋‹ค. ์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ ๊ฒฐ๊ณผ๋ฅผ ๊ณ„์‚ฐํ•˜๊ธฐ ์œ„ํ•ด ์ฒซ ๋ฒˆ์งธ ํ–‰๋ ฌ์˜ ๋งจ ์•„๋ž˜ ํ–‰๊ณผ ๋‘ ๋ฒˆ์งธ ํ–‰๋ ฌ์˜ ๋งจ ์˜ค๋ฅธ์ชฝ ์—ด์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

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

๊ฒฐ๊ณผ๋Š” ์ฐจ์›์ด (n,m) ์ธ ํ–‰๋ ฌ์ž…๋‹ˆ๋‹ค. ์—ฌ๊ธฐ์„œ n ์€ ์ขŒ๋ณ€ ํ–‰๋ ฌ์˜ ํ–‰ ์ˆ˜์™€ ๊ฐ™๊ณ  m ์€ ์šฐ๋ณ€ ํ–‰๋ ฌ์˜ ์—ด๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์•”์‚ฐ์œผ๋กœ ํ–‰๋ ฌ์˜ ๊ณฑ์…ˆ์ด ์–ด๋ ต๋‹ค๊ณ  ๊ฑฑ์ •ํ•˜์ง€ ๋งˆ์„ธ์š”. ์†์œผ๋กœ ๊ณ„์‚ฐ์„ ํ•˜๊ณ  ๋ฌธ์ œ๊ฐ€ ์žˆ์„๋•Œ๋งˆ๋‹ค ์ด ํŽ˜์ด์ง€๋กœ ๋Œ์•„์˜ค์„ธ์š”. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ๋‹น์‹ ์—๊ฒŒ ๋‘๋ฒˆ์งธ๋กœ ์ž์—ฐ์Šค๋Ÿฌ์›Œ ์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

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

Untitled 1

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

์–ด์จŒ๋“ , ์ด์ œ ์šฐ๋ฆฌ๋Š” ํ–‰๋ ฌ์„ ํ•จ๊ป˜ ๊ณฑํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•˜์œผ๋ฏ€๋กœ ์ข‹์€ ๊ฒƒ์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Matrix-Vector multiplication

์ด๋•Œ๊นŒ์ง€ ์šฐ๋ฆฐ ์ œ๋ฒ• ๋งŽ์ด ๋ฒกํ„ฐ๋ฅผ ๋‹ค๋ฃจ์—ˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ขŒํ‘œ, ์ƒ‰ ์‹ฌ์ง€์–ด ํ…์Šค์ณ ์ขŒํ‘œ๋ฅผ ํ‘œํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ๋ฒกํ„ฐ๋ฅผ ์‚ฌ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์กฐ๊ธˆ ๋” ๊นŠ๊ฒŒ ๋‚˜์•„๊ฐ€ ๋ฒกํ„ฐ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ Nx1 ํ–‰๋ ฌ์ด๋ฉฐ, ์—ฌ๊ธฐ์„œ N ์€ ๋ฒกํ„ฐ์˜ ๊ตฌ์„ฑ ์š”์†Œ ์ˆ˜ (N ์ฐจ์› ๋ฒกํ„ฐ๋ผ๊ณ ๋„ ํ•จ) ์ž…๋‹ˆ๋‹ค. ์ƒ๊ฐํ•ด๋ณด๋ฉด ๋ง์ด ๋˜๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฒกํ„ฐ๋Š” ์—ด์ด 1๊ฐœ๋ฐ–์— ์—†๋Š” ์ˆซ์ž ๋ฐฐ์—ด์ธ ํ–‰๋ ฌ์ผ ๋ฟ์ž…๋‹ˆ๋‹ค . ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ์ƒˆ๋กœ์šด ์ •๋ณด๊ฐ€ ์šฐ๋ฆฌ์—๊ฒŒ ์–ด๋–ป๊ฒŒ ๋„์›€์ด ๋ ๊นŒ์š”? ์Œ.. ๋งŒ์•ฝ ์šฐ๋ฆฌ๊ฐ€ MxN ํ–‰๋ ฌ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๋ฉด ํ–‰๋ ฌ์˜ ์—ด์ด ๋ฒกํ„ฐ์˜ ํ–‰ ์ˆ˜์™€ ๊ฐ™๊ธฐ ๋•Œ๋ฌธ์— ์ด ํ–‰๋ ฌ์„ Nx1 ๋ฒกํ„ฐ์™€ ๊ณฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ํ–‰๋ ฌ ๊ณฑ์…ˆ์ด ์ •์˜๋ฉ๋‹ˆ๋‹ค.

ํ•˜์ง€๋งŒ ํ–‰๋ ฌ์— ๋ฒกํ„ฐ๋ฅผ ๊ณฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์™œ ์‹ ๊ฒฝ์„ ์จ์•ผํ• ๊นŒ์š”? ์Œ, ํ–‰๋ ฌ ๋‚ด๋ถ€์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ๋Š” ํฅ๋ฏธ๋กœ์šด 2D/3D ๋ณ€ํ™˜์ด ๋งŽ์ด ์žˆ๊ณ  ๊ทธ ํ–‰๋ ฌ์„ ๋ฒกํ„ฐ์™€ ๊ณฑํ•œ ๋‹ค์Œ ๊ทธ ๋ฒกํ„ฐ๋ฅผ ๋ณ€ํ™˜(transforms) ํ•ฉ๋‹ˆ๋‹ค. ์—ฌ์ „ํžˆ ํ˜ผ๋ž€์Šค๋Ÿฝ๋‹ค๋ฉด ๋ช‡ ๊ฐ€์ง€ ์˜ˆ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด๋ณด๋ฉด ๊ณง ์˜๋ฏธ๋ฅผ ์•Œ ์ˆ˜ ์žˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹จ์œ„ ํ–‰๋ ฌ Identity matrix

OpenGL์—์„œ ์šฐ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ด์œ ๋กœ 4x4 ๋ณ€ํ™˜ ํ–‰๋ ฌ๋กœ ์ž‘์—…ํ•˜๋ฉฐ ๊ทธ ์ค‘ ํ•˜๋‚˜๋Š” ๋Œ€๋ถ€๋ถ„ ๋ฒกํ„ฐ์˜ ํฌ๊ธฐ๊ฐ€ 4๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๊ฐ€ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ๊ฐ„๋‹จํ•œ ๋ณ€ํ™˜ ํ–‰๋ ฌ์€ ๋‹จ์œ„ ํ–‰๋ ฌ์ž…๋‹ˆ๋‹ค. ๋‹จ์œ„ ํ–‰๋ ฌ์€ ๋Œ€๊ฐ์„ ์„ ์ œ์™ธํ•˜๊ณ  0๋งŒ ์žˆ๋Š” NxN ํ–‰๋ ฌ์ž…๋‹ˆ๋‹ค. ๋ณด์‹œ๋‹ค์‹œํ”ผ ์ด ๋ณ€ํ™˜ ํ–‰๋ ฌ์€ ๋ฒกํ„ฐ๋ฅผ ์†์ƒ์‹œํ‚ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

16

๋ฒกํ„ฐ๋Š” ๋ณ€๊ฒฝ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ณฑ์…ˆ๊ทœ์น™์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๊ฒฐ๊ณผ ์š”์†Œ๋Š” ํ–‰๋ ฌ์˜ ์ฒซ ๋ฒˆ์งธ ํ–‰์˜ ๊ฐ ๊ฐœ๋ณ„ ์š”์†Œ์— ๋ฒกํ„ฐ์˜ ๊ฐ ์š”์†Œ๋ฅผ ๊ณฑํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ–‰์˜ ๊ฐ ์š”์†Œ๋Š” ์ฒซ ์š”์†Œ๋ฅผ ์ œ์™ธํ•˜๊ณ  0์ด๋ฏ€๋กœ, $1\cdot1+0\cdot2+0\cdot3+0\cdot4=1$ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์‹์„ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒกํ„ฐ์˜ ๋‹ค๋ฅธ 3 ์š”์†Œ์—๋„ ๋™์ผํ•˜๊ฒŒ ์ ์šฉ๋ฉ๋‹ˆ๋‹ค.

๋ณ€ํ™˜ํ•˜์ง€ ์•Š๋Š” ๋ณ€ํ™˜ ํ–‰๋ ฌ์˜ ์šฉ๋„๊ฐ€ ๋ฌด์—‡์ธ์ง€ ๊ถ๊ธˆํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹จ์œ„ ํ–‰๋ ฌ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‹ค๋ฅธ ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ์‹œ์ž‘์ ์ด๋ฉฐ ์„ ํ˜• ๋Œ€์ˆ˜๋ฅผ ๋” ๊นŠ์ด ํŒŒ๊ณ  ๋“ค๋ฉด ์ •๋ฆฌ๋ฅผ ์ฆ๋ช…ํ•˜๊ณ  ์„ ํ˜• ๋ฐฉ์ •์‹์„ ํ‘ธ๋Š” ๋ฐ ๋งค์šฐ ์œ ์šฉํ•œ ํ–‰๋ ฌ์ž…๋‹ˆ๋‹ค.

์Šค์ผ€์ผ๋ง Scaling

๋ฒกํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•  ๋•Œ ํ™”์‚ดํ‘œ์˜ ๊ธธ์ด๋ฅผ ์›ํ•˜๋Š” ๋งŒํผ ๋Š˜๋ฆฌ๊ณ  ๋ฐฉํ–ฅ์„ ๋™์ผํ•˜๊ฒŒ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” 2์ฐจ์› ๋˜๋Š” 3์ฐจ์›์—์„œ ์ž‘์—…ํ•˜๊ธฐ ๋•Œ๋ฌธ์— 2๊ฐœ ๋˜๋Š” 3๊ฐœ์˜ ์Šค์ผ€์ผ๋ง ๋ณ€์ˆ˜๋กœ ๊ตฌ์„ฑ๋œ ๋ฒกํ„ฐ๋กœ ์Šค์ผ€์ผ๋ง์„ ์ •์˜ ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ๊ฐ ์Šค์ผ€์ผ๋ง์€ ํ•˜๋‚˜์˜ ์ถ• (x , y ๋˜๋Š” z ) ์ž…๋‹ˆ๋‹ค.

๋ฒกํ„ฐ $\bar{v} = (3,2)$ ์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ • ํ•ด ๋ด…์‹œ๋‹ค. x์ถ•์„ ๋”ฐ๋ผ ๋ฒกํ„ฐ์˜ ๋ฐฐ์œจ์„ 0.5๋กœ ์กฐ์ •ํ•˜์—ฌ ๋‘ ๋ฐฐ๋กœ ์ข๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค. y์ถ•์„ ๋”ฐ๋ผ ๋ฒกํ„ฐ์˜ ํฌ๊ธฐ๋ฅผ 2๋ฐฐ ์กฐ์ •ํ•˜์—ฌ ๋‘๋ฐฐ๋กœ ๋†’์ž…๋‹ˆ๋‹ค. ์Šค์ผ€์ผ ํ•œ ๋ฒกํ„ฐ (0.5, 2) ์ฆ‰ $\bar{s}$ ๋ฒกํ„ฐ๊ฐ€ ์–ด๋–ป๊ฒŒ ์ƒ๊ฒผ๋Š”์ง€ ํ•œ๋ฒˆ ๋ด…์‹œ๋‹ค.

vectors_scale

OpenGL์€ ์ผ๋ฐ˜์ ์œผ๋กœ 3D๊ณต๊ฐ„์—์„œ ์ž‘๋™ํ•˜๋ฏ€๋กœ 2D์ผ ๊ฒฝ์šฐ z์ถ• ๋ฐฐ์—ด์„ 1 ๋กœ ์„ค์ •ํ•˜์—ฌ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ์ˆ˜ํ–‰ ํ•œ ์Šค์ผ€์ผ๋ง ์ž‘์—…์€ ์Šค์ผ€์ผ๋ง ๊ณ„์ˆ˜๊ฐ€ ๊ฐ ์ถ•์— ๋Œ€ํ•ด ๋™์ผํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ท ์ผํ•˜์ง€ ์•Š๋Š” ์Šค์ผ€์ผ(non-Uniform scale)์ž…๋‹ˆ๋‹ค. ์Šค์นผ๋ผ๊ฐ€ ๋ชจ๋“  ์ถ•์—์„œ ๊ฐ™์œผ๋ฉด ๊ท ์ผ ์Šค์ผ€์ผ(Uniform Scale) ์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์Šค์ผ€์ผ๋ง์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ณ€ํ™˜ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ๊ตฌ์ถ•ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ๋‹จ์œ„ ํ–‰๋ ฌ์—์„œ ๊ฐ ๋Œ€๊ฐ์„  ์š”์†Œ์— ํ•ด๋‹น ๋ฒกํ„ฐ ์š”์†Œ๋ฅผ ๊ณฑํ•œ ๊ฒƒ์„ ๋ณด์•˜์Šต๋‹ˆ๋‹ค. ๋‹จ์œ„ ํ–‰๋ ฌ์˜ 1 ์„ 3 ์œผ๋กœ ๋ณ€๊ฒฝํ•˜๋ฉด ์–ด๋–จ๊นŒ์š”? ์ด ๊ฒฝ์šฐ ๊ฐ ๋ฒกํ„ฐ ์š”์†Œ์— 3 ์„ ๊ณฑํ•˜์—ฌ ๋ฒกํ„ฐ์— 3์„ ํšจ๊ณผ์ ์œผ๋กœ ๊ท ์ผํ•˜๊ฒŒ(Uniform) ์Šค์ผ€์ผํ•ฉ๋‹ˆ๋‹ค. ์Šค์ผ€์ผ๋ง ๋ณ€์ˆ˜$(S_1,S_2,S_3)$๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋ชจ๋“  ๋ฒกํ„ฐ$(x,y,z)$์— ๋Œ€ํ•œ ์Šค์ผ€์ผ๋ง ํ–‰๋ ฌ์„ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

17

4๋ฒˆ์จฐ ์Šค์ผ€์ผ๋ง ๊ฐ’ 1์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค. w๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋‚˜์ค‘์— ์‚ดํŽด๋ณผ ๋‹ค๋ฅธ ์šฉ๋„๋กœ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

Translation

Translation์€ ์›๋ž˜ ๋ฒกํ„ฐ ์œ„์— ๋‹ค๋ฅธ ๋ฒกํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์œ„์น˜๊ฐ€ ๋‹ค๋ฅธ ์ƒˆ ๋ฒกํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜์—ฌ ์ด๋™ ๋ฒกํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ฒกํ„ฐ๋ฅผ ์ด๋™ ํ•˜๋Š” ๊ณผ์ •์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๋ฒกํ„ฐ์˜ ๋ง์…ˆ์— ๋Œ€ํ•ด ๋…ผ์˜ ํ–ˆ์œผ๋ฏ€๋กœ ์ด๊ฒƒ์„ ์ฒ˜์Œ๋ณด๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋Š๋ผ๋ฉด ์•ˆ๋ฉ๋‹ˆ๋‹ค.

์Šค์ผ€์ผ๋ง ํ–‰๋ ฌ๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ 4x4 ํ–‰๋ ฌ์—๋Š” ํŠน์ • ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์—ฌ๋Ÿฌ ์œ„์น˜๊ฐ€ ์žˆ์œผ๋ฉฐ ๋ณ€ํ™˜์„ ์œ„ํ•ด 4๋ฒˆ์งธ ์—ด์˜ ์ƒ์œ„ 3๊ฐœ ๊ฐ’์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋™ ๋ฒกํ„ฐ๋ฅผ$(T_x,T_y,T_z)$๋กœ ํ‘œํ˜„ํ•˜๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ด๋™ ํ–‰๋ ฌ์„ ์ •์˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

18

์ด๊ฒƒ์€ ๋ชจ๋“  ๋ณ€ํ™˜ ๊ฐ’์— ๋ฒกํ„ฐ์˜ w ์—ด์„ ๊ณฑํ•˜๊ณ  ๋ฒกํ„ฐ์˜ ์›๋ž˜ ๊ฐ’์— ๋”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. (ํ–‰๋ ฌ ๊ณฑ์…ˆ ๊ทœ์น™์„ ๋– ์˜ฌ๋ฆฌ์„ธ์š”). ์ด๊ฒƒ์€ 3x3 ํ–‰๋ ฌ์—์„œ๋Š” ๋ถˆ๊ฐ€๋Šฅํ–ˆ์—ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

Homogeneous ์ขŒํ‘œ

๋ฒกํ„ฐ์˜ w ๊ตฌ์„ฑ ์š”์†Œ๋Š” Homogeneous coordinates ๋ผ๊ณ ๋„ ํ•ฉ๋‹ˆ๋‹ค. Homogeneous ๋ฒกํ„ฐ์—์„œ 3D ๋ฒกํ„ฐ๋ฅผ ์–ป๊ธฐ ์œ„ํ•ด x y z ์ขŒํ‘œ๋ฅผ w ์ขŒํ‘œ๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ๊ฒฝ์šฐ w ๊ตฌ์„ฑ์š”์†Œ๊ฐ€ 1.0 ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ ์ด๋ฅผ ์•Œ์ง€ ๋ชปํ•ฉ๋‹ˆ๋‹ค. Homogeneous ์ขŒํ‘œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ช‡ ๊ฐ€์ง€ ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค. 3D ๋ฒกํ„ฐ์—์„œ ํ–‰๋ ฌ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. (w ๊ตฌ์„ฑ์š”์†Œ ์—†์ด ๋ฒกํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†์Œ). ๋‹ค์Œ ์žฅ์—์„œ๋Š” w ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 3D ์›๊ทผ๊ฐ์„ ๊ตฌํ˜„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋˜ํ•œ Homogeneous ์ขŒํ‘œ๊ฐ€ 0 ์ผ๋•Œ๋งˆ๋‹ค w ์ขŒํ‘œ๊ฐ€ 0 ์ธ ๋ฒกํ„ฐ๋Š” ๋ณ€ํ™˜ํ•  ์ˆ˜ ์—†๊ธฐ ๋•Œ๋ฌธ์— ํ•ด๋‹น ๋ฒกํ„ฐ๋Š” ๋ฐฉํ–ฅ ๋ฒกํ„ฐ๋กœ ๋ถˆ๋ฆฝ๋‹ˆ๋‹ค.

ํ‰ํ–‰ ์ด๋™์„ ์‚ฌ์šฉํ•˜๋ฉด 3์ถ• ๋ฐฉํ–ฅ(x, y, z)์œผ๋กœ ๊ฐœ์ฒด๋ฅผ ์ด๋™ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ณ€ํ˜•์— ๋งค์šฐ ์œ ์šฉํ•œ ๋ณ€ํ˜• ํ–‰๋ ฌ์ด ๋ฉ๋‹ˆ๋‹ค.

ํšŒ์ „

๋งˆ์ง€๋ง‰ ๋ช‡ ๊ฐ€์ง€ ๋ณ€ํ™˜์€ 2D ๋˜๋Š” 3D ๊ณต๊ฐ„์—์„œ ์ƒ๋Œ€์ ์œผ๋กœ ์ดํ•ดํ•˜๊ณ  ์‹œ๊ฐ์ ์œผ๋กœ ์‰ฌ์› ์ง€๋งŒ ํšŒ์ „์€ ๊นŒ๋‹ค๋กญ์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ํ–‰๋ ฌ์ด ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜๋Š”์ง€ ์ •ํ™•ํžˆ ์•Œ๊ณ  ์‹ถ๋‹ค๋ฉด Khan Academy์˜ ์„ ํ˜•๋Œ€์ˆ˜ ๋™์˜์ƒ์˜ ํšŒ์ „ ํ•ญ๋ชฉ์„ ์‹œ์ฒญํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋จผ์ € ๋ฒกํ„ฐ์˜ ํšŒ์ „์ด ์‹ค์ œ๋กœ ๋ฌด์—‡์ธ์ง€ ์ •์˜ํ•ฉ์‹œ๋‹ค. 2D ๋˜๋Š” 3D์˜ ํšŒ์ „์€ ๊ฐ๋„๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค. ๊ฐ๋„๋Š” ์› ์ „์ฒด๊ฐ€ 360๋„ ๋˜๋Š” $2\pi$ ๋ผ๋””์•ˆ์ด๋ผ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์ต์ˆ™ํ•œ ๊ฐ๋„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํšŒ์ „์„ ์„ค๋ช…ํ•˜๋Š” ๊ฒƒ์„ ์›ํ•ฉ๋‹ˆ๋‹ค. ๋Œ€๋ถ€๋ถ„์˜ ํšŒ์ „ ํ•จ์ˆ˜์—๋Š” ๋ผ๋””์•ˆ ๊ฐ๋„๊ฐ€ ํ•„์š”ํ•˜์ง€๋งŒ, ๊ฐ๋„๋Š” ๋ผ๋””์•ˆ์œผ๋กœ ์‰ฝ๊ฒŒ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค. ๊ฐ๋„ = ๋ผ๋””์•ˆ ๊ฐ๋„ * (180 / PI) ๋ผ๋””์•ˆ ๊ฐ๋„ = ๊ฐ๋„ * (PI / 180) PI ๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ 3.14159265359 ์ž…๋‹ˆ๋‹ค. ์›์„ ๋ฐ˜์œผ๋กœ ํšŒ์ „ํ•˜๋ฉด 360/2 = 180 ๋„ ํšŒ์ „ํ•˜๊ณ  ์˜ค๋ฅธ์ชฝ์œผ๋กœ 1/5 ํšŒ์ „ํ•œ๋‹ค๋Š” ๊ฒƒ์€ ์˜ค๋ฅธ์ชฝ์œผ๋กœ 360/5 = 72 ๋„ ํšŒ์ „ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž…๋‹ˆ๋‹ค. ์ด๋Š” ๋‹ค์Œ์—์„œ ์˜ค๋ฅธ์ชฝ์œผ๋กœ ๋˜๋Š” ์‹œ๊ณ„ ๋ฐฉํ–ฅ์œผ๋กœ 72๋„ ํšŒ์ „ํ•˜๋Š” ๊ธฐ๋ณธ 2D๋ฒกํ„ฐ์— ๋Œ€ํ•ด ์„ค๋ช…๋ฉ๋‹ˆ๋‹ค.

vectors_angle

3D์˜ ํšŒ์ „์€ ๊ฐ๋„ ๋ฐ ํšŒ์ „ ์ถ•์œผ๋กœ ์ง€์ •๋ฉ๋‹ˆ๋‹ค. ์ง€์ •๋œ ๊ฐ๋„๋Š” ์ฃผ์–ด์ง„ ํšŒ์ „ ์ถ•์„ ๋”ฐ๋ผ ๊ฐœ์ฒด๋ฅผ ํšŒ์ „ํ•ฉ๋‹ˆ๋‹ค. ๋จธ๋ฆฌ๋ฅผ ๋Œ๋ ค ํ•˜๋‚˜์˜ ํšŒ์ „ ์ถ•์„ ๋‚ด๋ ค๋‹ค ๋ณด๋ฉฐ ์ด๊ฒƒ์„ ์‹œ๊ฐํ™”ํ•˜์„ธ์š”. ์˜ˆ๋ฅผ ๋“ค์–ด 3D ์„ธ๊ณ„์—์„œ 2D๋ฒกํ„ฐ๋ฅผ ํšŒ์ „ ํ•  ๋•Œ ํšŒ์ „ ์ถ•์„ z์ถ•์œผ๋กœ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค. (์ด๊ฒƒ์„ ์‹œ๊ฐํ™” ํ•ด ๋ณด์„ธ์š”)

์‚ผ๊ฐ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋ฉด ์ฃผ์–ด์ง„ ๊ฐ๋„์—์„œ ๋ฒกํ„ฐ๋ฅผ ์ƒˆ๋กœ ํšŒ์ „ ๋œ ๋ฒกํ„ฐ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ sine ๊ณผ cosine ํ•จ์ˆ˜ (๋ณดํ†ต sin ๊ณผ cos ๋กœ ํ‘œํ˜„ํ•จ)์˜ ์•„๋ฆ„๋‹ค์šด ์กฐํ•ฉ์„ ํ†ตํ•ด ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค. ํšŒ์ „ ํ–‰๋ ฌ์ด ์ƒ์„ฑ๋˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์ด ์žฅ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค.

ํšŒ์ „ ํ–‰๋ ฌ์€ ๊ฐ๋„๊ฐ€ ์„ธํƒ€ ๊ธฐํ˜ธ๋กœ ํ‘œ์‹œ๋˜๋Š” 3D๊ณต๊ฐ„์˜ ๊ฐ ๋‹จ์œ„ ์ถ•์— ๋Œ€ํ•ด ์ •์˜๋ฉ๋‹ˆ๋‹ค.

x์ถ•์„ ์ค‘์‹ฌ์œผ๋กœ ํšŒ์ „:

19

y์ถ•์„ ์ค‘์‹ฌ์œผ๋กœ ํšŒ์ „:

20

z์ถ•์„ ์ค‘์‹ฌ์œผ๋กœ ํšŒ์ „:

21

ํšŒ์ „ ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ์„ธ ๊ณ„์˜ ๋‹จ์œ„ ์ถ• ์ค‘ ํ•˜๋‚˜๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ์œ„์น˜ ๋ฒกํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž„์˜์˜ 3D์ถ•์„ ์ค‘์‹ฌ์œผ๋กœ ํšŒ์ „ํ•˜๋ ค๋ฉด ๋จผ์ € X์ถ•, Y์ถ•, Z์ถ• ์ˆœ์œผ๋กœ ํšŒ์ „ํ•˜์—ฌ 3๊ฐœ๋ฅผ ๋ชจ๋‘ ๊ฒฐํ•ฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ด๋กœ ์ธํ•ด Gimbal lock ์ด๋ผ๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•ด ์ž์„ธํ•˜๊ฒŒ ์„ค๋ช…ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ ๋” ๋‚˜์€ ํ•ด๊ฒฐ์ฑ…์€ ํšŒ์ „ ํ–‰๋ ฌ์„ ๊ฒฐํ•ฉํ•˜๋Š” ๋Œ€์‹  (0.662, 0.2, 0.722) (๋‹จ์œ„ ๋ฒกํ„ฐ)์™€ ๊ฐ™์€ ์ž„์˜์˜ ๋‹จ์œ„ ์ถ•์„ ํšŒ์ „ํ•˜๋Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ (๋ณต์žกํ•œ..) ํ–‰๋ ฌ์ด ์กด์žฌํ•˜๋ฉฐ ์ž„์˜์˜ ํšŒ์ „ ์ถ•์œผ๋กœ ($R_x,R_y,R_z)$๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์•„๋ž˜์—์„œ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

22

์ด๋Ÿฌํ•œ ํ–‰๋ ฌ ์ƒ์„ฑ์— ๋Œ€ํ•œ ์ˆ˜ํ•™์  ๋…ผ์˜๋Š” ์ด ์žฅ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค. ์ด ๋งคํŠธ๋ฆญ์Šค์กฐ์ฐจ๋„ Gimbal lock์„ ์™„์ „ํžˆ ๋ฐฉ์ง€ํ•˜์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. (ํ›จ์”ฌ ์–ด๋ ค์›Œ ์ง€์ง€๋งŒ) Gimbal lock์„ ์ง„์ •์œผ๋กœ ๋ฐฉ์ง€ํ•˜๋ ค๋ฉด quaternions์„ ์‚ฌ์šฉํ•˜์—ฌ ํšŒ์ „์„ ๋‚˜ํƒ€๋‚˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋” ์•ˆ์ „ ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ณ„์‚ฐ๋„ ์ต์ˆ™ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ฟผํ„ฐ๋‹ˆ์–ธ์— ๋Œ€ํ•œ ์„ค๋ช…์€ ์ด ์žฅ์˜ ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚ฉ๋‹ˆ๋‹ค.

Combining matrices

๋ณ€ํ™˜์— ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์— ํ•ต์‹ฌ์€ ํ–‰๋ ฌ-ํ–‰๋ ฌ ๊ณฑ์…ˆ ๋•์— ๋‹จ์ผ ํ–‰๋ ฌ์—์„œ ์—ฌ๋Ÿฌ ๋ณ€ํ™˜์„ ๊ฒฐํ•ฉ ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์—ฌ๋Ÿฌ ๋ณ€ํ™˜์„ ๊ฒฐํ•ฉํ•˜๋Š” ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ๋ฒกํ„ฐ (x, y, z)๊ฐ€ ์žˆ๊ณ  ์ด๋ฅผ 2๋กœ ์Šค์ผ€์ผ๋ง ํ•œ ๋‹ค์Œ (1, 2, 3) ์œผ๋กœ ๋ณ€ํ™˜ํ•˜๋ ค๊ณ  ํ•œ๋‹ค๊ณ  ๊ฐ€์ • ํ•ด ๋ด…์‹œ๋‹ค. ํ•„์š”ํ•œ ๋‹จ๊ณ„์— ๋Œ€ํ•œ ๋ณ€ํ™˜ ๋ฐ ์Šค์ผ€์ผ๋ง ํ–‰๋ ฌ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ ๋ณ€ํ™˜ ํ–‰๋ ฌ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

23

ํ–‰๋ ฌ์„ ๊ณฑํ•  ๋•Œ ๋จผ์ € ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ ํ•œ ๋‹ค์Œ ์Šค์ผ€์ผ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ํ–‰๋ ฌ ๊ณฑ์…ˆ์€ ๊ตํ™˜ ๋ฒ•์น™์ด ์„ฑ๋ฆฝํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค. ํ–‰๋ ฌ์„ ๊ณฑํ•  ๋•Œ ์˜ค๋ฅธ์ชฝ์— ์žˆ๋Š” ํ–‰๋ ฌ์ด ๋จผ์ € ๋ฒกํ„ฐ์™€ ๊ณฑํ•ด์ง€๋ฏ€๋กœ ์˜ค๋ฅธ์ชฝ์—์„œ ์™ผ์ชฝ์œผ๋กœ ๊ณฑ์…ˆ์„ ์ฝ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € ์Šค์ผ€์ผ๋ง ์ž‘์—…์„ ์ˆ˜ํ–‰ ํ•œ ๋‹ค์Œ ํ–‰๋ ฌ์„ ๊ฒฐํ•ฉ ํ•  ๋•Œ ํšŒ์ „ ๋ฐ ๋งˆ์ง€๋ง‰ ๋ณ€ํ™˜์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์„œ๋กœ (๋ถ€์ •์ ์œผ๋กœ) ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ๋จผ์ € ๋ณ€ํ™˜์„ ํ•œ ๋‹ค์Œ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๋ฉด ์ด๋™ ๋ฒกํ„ฐ๋„ ํฌ๊ธฐ๊ฐ€ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค!

๋ฒกํ„ฐ์—์„œ ์ตœ์ข… ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ์‹คํ–‰ํ•˜๋ฉด ๋‹ค์Œ ๋ฒกํ„ฐ๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

24

์ข‹์Šต๋‹ˆ๋‹ค! ๋ฒกํ„ฐ๋Š” ๋จผ์ € 2๋กœ ์Šค์ผ€์ผ๋ง ํ•œ ๋‹ค์Œ (1, 2, 3) ์œผ๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.

์‹ค์ „

์ด์ œ ๋ณ€ํ™˜์˜ ๋ชจ๋“  ์ด๋ก ์„ ์„ค๋ช… ํ–ˆ์œผ๋ฏ€๋กœ ์ด ์ง€์‹์„ ํ™œ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณผ ์ฐจ๋ก€์ž…๋‹ˆ๋‹ค. OpenGL์—๋Š” ํ–‰๋ ฌ ๋˜๋Š” ๋ฒกํ„ฐ๊ฐ€ ๋‚ด์žฅ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ ์ž์ฒด ์ˆ˜ํ•™ ํด๋ž˜์Šค์™€ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฑ…์—์„œ ์šฐ๋ฆฌ๋Š” ๋ชจ๋“  ์ž‘์€ ์ˆ˜ํ•™์  ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ์ถ”์ƒํ™” ํ•˜๊ณ  ๋‹จ์ˆœํžˆ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด์ง„ ์ˆ˜ํ•™ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉ ํ•ฉ๋‹ˆ๋‹ค. ์šด ์ข‹๊ฒŒ๋„ GLM์ด๋ผ๋Š” OpenGL ์ˆ˜ํ•™ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์‰ฝ๊ณ  ๋งž์ถคํ˜•์œผ๋กœ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

GLM

GLM์€ OpenGL Mathematics์˜ ์•ฝ์ž์ด๋ฉฐ ํ—ค๋” ์ „์šฉ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํ—ค๋” ํŒŒ์ผ๋งŒ ํฌํ•จํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋งํฌ ๋ฐ ์ปดํŒŒ์ผ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. GLM์€ ์›น์‚ฌ์ดํŠธ์—์„œ ๋‹ค์šด๋กœ๋“œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ—ค๋” ํŒŒ์ผ์˜ ๋ฃจํŠธ ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ includes ํด๋”์— ๋ณต์‚ฌํ•˜๊ณ  ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ๋Œ€๋ถ€๋ถ„์˜ GLM๊ธฐ๋Šฅ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํฌํ•จ ํ•  3๊ฐœ์˜ ํ—ค๋” ํŒŒ์ผ์—์„œ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

Untitled 2

#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>

Let's see if we can put our transformation knowledge to good use by translating a vector of (1,0,0) by (1,1,0) (note that we define it as a glm::vec4 with its homogeneous coordinate set to 1.0:

(1, 0, 0) ์˜ ๋ฒกํ„ฐ๋ฅผ (1, 1, 0) ์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ๋ณ€ํ™˜ ๊ฐœ๋…์„ ์œ ์šฉํ•˜๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ์‚ดํŽด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค, (์šฐ๋ฆฌ๋Š” ํ•ด๋‹น ๋ฒกํ„ฐ๋ฅผ glm::vec4 ๋กœ ์ •์˜ํ•˜๋ฉฐ, homogeneous ์ขŒํ‘œ๋ฅผ 1.0์œผ๋กœ ์„ธํŒ…ํ•ฉ๋‹ˆ๋‹ค.)

glm::vec4 vec(1.0f, 0.0f, 0.0f, 1.0f);
glm::mat4 trans = glm::mat4(1.0f);
trans = glm::translate(trans, glm::vec3(1.0f, 1.0f, 0.0f));
vec = trans * vec;
std::cout << vec.x << vec.y << vec.z << std::endl;

๋จผ์ € GLM์˜ ๋‚ด์žฅ ๋ฒกํ„ฐ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ vec๋ผ๋Š” ๋ฒกํ„ฐ๋ฅผ ์ •์˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ์œผ๋กœ mat4๋ฅผ ์ •์˜ํ•˜๊ณ  ํ–‰๋ ฌ์˜ ๋Œ€๊ฐ์„ ์„ 1.0์œผ๋กœ ์ดˆ๊ธฐํ™”ํ•˜์—ฌ ๋‹จ์œ„ ํ–‰๋ ฌ๋กœ ๋ช…์‹œ์ ์œผ๋กœ ์ดˆ๊ธฐํ™” ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์œ„ ํ–‰๋ ฌ๋กœ ์ดˆ๊ธฐํ™” ํ•˜์ง€ ์•Š์œผ๋ฉด ํ–‰๋ ฌ์€ ๋„ ํ–‰๋ ฌ (๋ชจ๋“  ์š”์†Œ 0) ์ด ๋˜๊ณ  ๋ชจ๋“  ํ›„์† ํ–‰๋ ฌ ์—ฐ์‚ฐ๋„ ๋„ ํ–‰๋ ฌ์ด ๋ฉ๋‹ˆ๋‹ค.

๋‹ค์Œ ๋‹จ๊ณ„๋Š” ๋ณ€ํ™˜ ๋ฒกํ„ฐ์™€ ํ•จ๊ป˜ ๋‹จ์œ„ ํ–‰๋ ฌ์„ glm::translate ๋ฅผ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜์—ฌ ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ( ๊ทธ๋Ÿฐ ๋‹ค์Œ ์ฃผ์–ด์ง„ ํ–‰๋ ฌ์— ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ๊ณฑํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋กœ ํ–‰๋ ฌ์ด ๋ณ€ํ™˜๋จ) ๊ทธ๋Ÿฐ ๋‹ค์Œ ๋ฒกํ„ฐ์— ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ๊ณฑํ•˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ํ–‰๋ ฌ ๋ณ€ํ™˜์ด ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๋Š”์ง€ ๊ธฐ์–ตํ•œ๋‹ค๋ฉด ๊ฒฐ๊ณผ ๋ฒกํ„ฐ๋Š” (2, 1, 0) ์ธ (1 + 1, 0 + 1, 0 + 0) ์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ฝ”๋“œ๋Š” 210 ์„ ์ถœ๋ ฅํ•˜๋ฏ€๋กœ ๋ณ€ํ™˜ ํ–‰๋ ฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ–ˆ์Šต๋‹ˆ๋‹ค.

๋” ํฅ๋ฏธ๋กœ์šด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Ÿฌ ์ด์ „ ์žฅ์˜ ์ปจํ…Œ์ด๋„ˆ ๊ฐœ์ฒด์˜ ํฌ๊ธฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ  ํšŒ์ „ ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

glm::mat4 trans = glm::mat4(1.0f);
trans = glm::rotate(trans, glm::radians(90.0f), glm::vec3(0.0, 0.0, 1.0));
trans = glm::scale(trans, glm::vec3(0.5, 0.5, 0.5));  

๋จผ์ € ๊ฐ ์ถ•์—์„œ ์ปจํ…Œ์ด๋„ˆ์˜ ํฌ๊ธฐ๋ฅผ 0.5 ๋กœ ์กฐ์ • ํ•œ ๋‹ค์Œ ์ปจํ…Œ์ด๋„ˆ๋ฅผ Z ์ถ• ์ค‘์‹ฌ์œผ๋กœ 90 ๋„ ํšŒ์ „ํ•ฉ๋‹ˆ๋‹ค. GLM์€ ๊ฐ๋„๋ฅผ ๋ผ๋””์•ˆ์œผ๋กœ ๋ฐ›์œผ๋ฏ€๋กœ glm::radians ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ๋„๋ฅผ ๋ผ๋””์•ˆ์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ํ…์Šค์ณ๊ฐ€ ์žˆ๋Š” ์‚ฌ๊ฐํ˜•์€ XY ํ‰๋ฉด์— ์žˆ์œผ๋ฏ€๋กœ Z์ถ•์„ ์ค‘์‹ฌ์œผ๋กœ ํšŒ์ „ํ•ฉ๋‹ˆ๋‹ค. ํšŒ์ „ํ•˜๋Š” ์ถ•์€ ๋‹จ์œ„ ๋ฒกํ„ฐ์ด์—ฌ์•ผ ํ•˜๋ฏ€๋กœ X,Y ๋˜๋Š” Z ์ถ•์„ ์ค‘์‹ฌ์œผ๋กœ ํšŒ์ „ํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ ๋จผ์ € ๋ฒกํ„ฐ๋ฅผ ์ •๊ทœํ™” ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ–‰๋ ฌ์„ GLM์˜ ๊ฐ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— GLM์€ ์ž๋™์œผ๋กœ ํ–‰๋ ฌ์„ ํ•จ๊ป˜ ๋‹ค์ค‘ํ™”ํ•˜์—ฌ ๋ชจ๋“  ๋ณ€ํ™˜์„ ๊ฒฐํ•ฉํ•˜๋Š” ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ์…ฐ์ด๋”์— ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ๊ฐ€์ ธ์˜ค๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” GLSL๋„ mat4 ์œ ํ˜•์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค๊ณ  ์ด์ „์— ์–ธ๊ธ‰ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ๋Š” mat4 ๊ท ์ผ ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์•„๋“ค์ด๊ณ  ์œ„์น˜ ๋ฒกํ„ฐ์— ํ–‰๋ ฌ uniform ์„ ๊ณฑํ•˜๋„๋ก ๋ฒ„ํ…์Šค ์…ฐ์ด๋”๋ฅผ ์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aTexCoord;

out vec2 TexCoord;
  
uniform mat4 transform;

void main()
{
    gl_Position = transform * vec4(aPos, 1.0f);
    TexCoord = vec2(aTexCoord.x, aTexCoord.y);
} 

GLSL์—๋Š” ๋˜ํ•œ ๋ฒกํ„ฐ์ฒ˜๋Ÿผ ์Šค์œ„์ฆ๋ง๊ณผ ๊ฐ™์€ ์—ฐ์‚ฐ์„ ํ—ˆ์šฉํ•˜๋Š” mat2 ์™€ mat3 ํƒ€์ž…์ด ์žˆ์Šต๋‹ˆ๋‹ค. ์•ž์„œ ์–ธ๊ธ‰ ํ•œ ๋ชจ๋“  ์ˆ˜ํ•™ ์—ฐ์‚ฐ (์˜ˆ์‹œ๋กœ ์Šค์นผ๋ผ-ํ–‰๋ ฌ ๊ณฑํ•˜๊ธฐ, ํ–‰๋ ฌ-๋ฒกํ„ฐ ๊ณฑํ•˜๊ธฐ ๋ฐ ํ–‰๋ ฌ-ํ–‰๋ ฌ ๊ณฑํ•˜๊ธฐ) ํ–‰๋ ฌ ํƒ€์ž…์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠน๋ณ„ํ•œ ํ–‰๋ ฌ ์—ฐ์‚ฐ์ด ์‚ฌ์šฉ๋˜๋Š” ๊ณณ ๋งˆ๋‹ค ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚˜๊ณ  ์žˆ๋Š”์ง€ ์„ค๋ช… ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

uniform์„ ์ถ”๊ฐ€ํ•˜๊ณ  gl_Position์— ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•ด ์œ„์น˜ ๋ฒกํ„ฐ์— ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ๊ณฑํ–ˆ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋‘ ๋ฐฐ ์ž‘์•„์•ผ ์•ผ ํ•˜๋ฉฐ, ์™ผ์ชฝ์œผ๋กœ 90 ๋„ ํšŒ์ „ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํ•ด๋‹น ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ์…ฐ์ด๋”์— ์ „๋‹ฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

unsigned int transformLoc = glGetUniformLocation(ourShader.ID, "transform");
glUniformMatrix4fv(transformLoc, 1, GL_FALSE, glm::value_ptr(trans));

๋จผ์ € uniform ๋ณ€์ˆ˜์˜ ์œ„์น˜๋ฅผ ๊ฐ€์ ธ์˜จ ๋‹ค์Œ Matrix4fv ๋ฅผ ์ ‘๋ฏธ์‚ฌ๋กœ ์‚ฌ์šฉํ•˜๋Š” glUniform ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ–‰๋ ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์…ฐ์ด๋”๋กœ ๋ณด๋ƒ…๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋Š” ์šฐ๋ฆฌ์—๊ฒŒ ์นœ์ˆ™ํ•œ ์œ ๋‹ˆํผ์˜ ์œ„์น˜ ์ž…๋‹ˆ๋‹ค. ๋‘๋ฒˆ์งธ ์ธ์ž๋Š” OpenGL์—๊ฒŒ ์šฐ๋ฆฌ๊ฐ€ ๋ณด๋‚ผ ํ–‰๋ ฌ์˜ ์ˆ˜์ธ 1 ์ž…๋‹ˆ๋‹ค. ์„ธ ๋ฒˆ์งธ ์ธ์ž๋Š” ํ–‰๊ณผ ์—ด์„ ๋ด๊พธ๋Š” ์ „์น˜ ํ–‰๋ ฌ์„ ํ•  ๊ฒƒ์ธ์ง€์— ๋Œ€ํ•œ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. OpenGL ๊ฐœ๋ฐœ์ž๋Š” ๋Œ€๋ถ€๋ถ„ GLM์˜ ๊ธฐ๋ณธ ํ–‰๋ ฌ ๋ ˆ์ด์•„์›ƒ์ธ column-major ordering ์ด๋ผ๋Š” ๋‚ด๋ถ€ ๋งคํŠธ๋ฆญ์Šค ๋ ˆ์ด์•„์›ƒ์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ์ „์น˜ ํ–‰๋ ฌ์„ ํ•  ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. GL_FALSE๋กœ ์„ค์ •ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค. ๋งˆ์ง€๋ง‰ ์ธ์ž๋Š” ์‹ค์ œ ํ–‰๋ ฌ ๋ฐ์ดํ„ฐ์ง€๋งŒ GLM์€ OpenGL์ด ๊ธฐ๋Œ€ํ•˜๋Š” ํ–‰๋ ฌ ๋ฐ์ดํ„ฐ์™€ ๋งž์ง€ ์•Š๋Š” ๋ฐฉ์‹์œผ๋กœ ์ €์žฅํ•˜๋ฏ€๋กœ ๋จผ์ € GLM์˜ ๋‚ด์žฅ ํ•จ์ˆ˜ value_ptr ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ๋ฐ˜๋“ค๊ณ  ๋ฒ„ํ…์Šค ์…ฐ์ด๋”์—์„œ uniform์„ ์„ ์–ธํ•˜๊ณ  ๋ฒ„ํ…์Šค ์ขŒํ‘œ๋ฅผ ๋ณ€ํ™˜ํ•˜๋Š” ์…ฐ์ด๋”๋กœ ํ–‰๋ ฌ์„ ๋ณด๋ƒˆ์Šต๋‹ˆ๋‹ค. ๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

transformations

์™„๋ฒฝํ•ด! ์šฐ๋ฆฌ์˜ ์ปจํ…Œ์ด๋„ˆ๋Š” ์‹ค์ œ๋กœ ์™ผ์ชฝ์œผ๋กœ ๊ธฐ์šธ์–ด์ ธ ์žˆ์Šต๋‹ˆ๋‹ค. ์™ผ์ชฝ์œผ๋กœ ๊ธฐ์šธ์–ด์ ธ ์žˆ๊ณ  ๋‘ ๋ฐฐ ์ž‘์•„์ง€๋Š” ๋ณ€ํ˜•์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ข€ ๋” ํŽ‘ํ‚คํ•ด์ ธ์„œ ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํšŒ์ „ ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ  ์žฌ๋ฏธ๋ฅผ ์œ„ํ•ด ์ฐฝ์˜ ์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ์— ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์žฌ๋ฐฐ์น˜ ํ•ฉ๋‹ˆ๋‹ค. ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํšŒ์ „ํ•˜๋ ค๋ฉด ๊ฐ ํ”„๋ ˆ์ž„์„ ์—…๋ฐ์ดํŠธ ํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๋ Œ๋” ๋ฃจํ”„์—์„œ ๋ณ€ํ™˜ ๋งคํŠธ๋ฆญ์Šค๋ฅผ ์—…๋ฐ์ดํŠธ ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์šฐ๋ฆฌ๋Š” GLFW์˜ ์‹œ๊ฐ„ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ๊ฐ๋„๋ฅผ ์–ป๊ฒ ์Šต๋‹ˆ๋‹ค.

glm::mat4 trans = glm::mat4(1.0f);
trans = glm::translate(trans, glm::vec3(0.5f, -0.5f, 0.0f));
trans = glm::rotate(trans, (float)glfwGetTime(), glm::vec3(0.0f, 0.0f, 1.0f));

์ด์ „ ์‚ฌ๋ก€์—์„œ๋Š” ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ์–ด๋””์—์„œ๋‚˜ ์„ ์–ธ ํ•  ์ˆ˜ ์žˆ์—ˆ์ง€๋งŒ ์ด์ œ๋Š” ํšŒ์ „์„ ์ง€์†์ ์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ˜๋ณต์„ ํ•  ๋•Œ๋งˆ๋‹ค ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ฆ‰, ๋ Œ๋”๋ง ๋ฃจํ”„๋ฅผ ๋ฐ˜๋ณต ํ•  ๋•Œ๋งˆ๋‹ค ๋ณ€ํ™˜ ํ–‰๋ ฌ์„ ๋‹ค์‹œ ๋งŒ๋“ค์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์žฅ๋ฉด์„ ๋ Œ๋”๋ง ํ•  ๋•Œ ํ”„๋ ˆ์ž„๋งˆ๋‹ค ์ƒˆ ๊ฐ’์œผ๋กœ ์ƒ์„ฑ๋˜๋Š” ๋ณ€ํ™˜ ํ–‰๋ ฌ๋ ฌ์ด ์žˆ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์„œ ์›์  (0, 0, 0) ์„ ์ค‘์‹ฌ์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ํšŒ์ „ํ•˜๊ณ  ํšŒ์ „ํ•˜๋ฉด ํšŒ์ „ ๋œ ๋ฒ„์ „์„ ํ™”๋ฉด์˜ ์˜ค๋ฅธ์ชฝ ํ•˜๋‹จ ๋ชจ์„œ๋ฆฌ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์—์„œ ๋จผ์ € ๋ณ€ํ™˜ ํ•œ ๋‹ค์Œ ๋‚˜์ค‘์— ํšŒ์ „ํ•˜๋”๋ผ๋„ ์‹ค์ œ ๋ณ€ํ™˜์€ ๋จผ์ € ํšŒ์ „์„ ์ ์šฉํ•œ ๋‹ค์Œ ๋ณ€ํ™˜์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋ชจ๋“  ๋ณ€ํ˜• ์กฐํ•ฉ๊ณผ ๊ฐœ์ฒด์— ์ ์šฉ๋˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์€ ์กฐ๊ธˆ ์–ด๋ ต์Šต๋‹ˆ๋‹ค. ์ด์™€ ๊ฐ™์€ ๋ณ€ํ˜•์„ ์‹œ๋„ํ•ด๋ณด๋ฉด ๊ธˆ๋ฐฉ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ œ๋Œ€๋กœ ํ–ˆ๋‹ค๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒฐ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

transformations.mp4

์‹œ๊ฐ„์— ์ง€๋‚จ์— ๋”ฐ๋ผ ํšŒ์ „๋˜๋Š” ์ปจํ…Œ์ด๋„ˆ๋Š” ๋ชจ๋‘ ๋‹จ์ผ ๋ณ€ํ™˜ ๋งคํŠธ๋ฆญ์Šค๋กœ ์ˆ˜ํ–‰๋ฉ๋‹ˆ๋‹ค! ์ด์ œ ๊ทธ๋ž˜ํ”ฝ ์˜์—ญ์—์„œ ํ–‰๋ ฌ์ด ์™œ ๊ทธ๋ ‡๊ฒŒ ๊ฐ•๋ ฅํ•œ ๊ตฌ์กฐ์ธ์ง€ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฌดํ•œํ•œ ์–‘์˜ ๋ณ€ํ™˜์„ ์ •์˜ํ•˜๊ณ  ์›ํ•˜๋Š” ๋งŒํผ ์ž์ฃผ ์žฌ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ผ ๋งคํŠธ๋ฆญ์Šค์— ๋ชจ๋‘ ๊ฒฐํ•ฉ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฒ„ํ…์Šค ์…ฐ์ด๋”์—์„œ ์ด์™€ ๊ฐ™์€ ๋ณ€ํ™˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋ฒ„ํ…์Šค ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์ •์˜ํ•˜๋Š” ๋…ธ๋ ฅ์„ ์ ˆ์•ฝํ•˜๊ณ  ์ฒ˜๋ฆฌ ์‹œ๊ฐ„๋„ ์ ˆ์•ฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ญ์ƒ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ๋ณด๋‚ผ ํ•„์š”๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. (์ด๋Š” ๋งค์šฐ ๋Š๋ฆฝ๋‹ˆ๋‹ค) ์šฐ๋ฆฌ๊ฐ€ ํ•ด์•ผ ํ•  ์ผ์€ ๋ณ€ํ˜• ์œ ๋‹ˆํผ์„ ์—…๋ฐ์ดํŠธ ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์˜ฌ๋ฐ”๋ฅธ ๊ฒฐ๊ณผ๋ฅผ ์–ป์ง€ ๋ชปํ–ˆ๊ฑฐ๋‚˜ ๋‹ค๋ฅธ ๊ณณ์—์„œ ํ•ด๋งค๊ณ  ์žˆ๋‹ค๋ฉด ์†Œ์Šค์ฝ”๋“œ ์™€ ์—…๋ฐ์ดํŠธ๋œ ์…ฐ์ด๋”๋ฅผ ์‚ดํŽด๋ณด์„ธ์š”.

๋‹ค์Œ ์žฅ์—์„œ๋Š” ํ–‰๋ ฌ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฒ„ํ…์Šค์— ๋Œ€ํ•ด ์„œ๋กœ ๋‹ค๋ฅธ ์ขŒํ‘œ ๊ณต๊ฐ„์„ ์ •์˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด 3D ๊ทธ๋ž˜ํ”ฝ์Šค์˜ ์ฒซ ๊ฑธ์Œ์ด ๋  ๊ฒƒ ์ž…๋‹ˆ๋‹ค.

๋” ์ฝ์„๊ฑฐ๋ฆฌ

  • Essence of Linear Algebra: ๋ณ€ํ˜• ๋ฐ ์„ ํ˜• ๋Œ€์ˆ˜์˜ ๊ธฐ๋ณธ ์ˆ˜ํ•™์— ๋Œ€ํ•œ Grant Sanderson์˜ ํ›Œ๋ฅญํ•œ ๋น„๋””์˜ค ์‹œ๋ฆฌ์ฆˆ

์—ฐ์Šต

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