โ ํ๋ ฌ (Matrix)
ํ๋ ฌ์ ์ซ์, ๊ธฐํธ, ๋๋ ์ํ์ ํํ์ด ์ง์ฌ๊ฐํ ๋ฐฐ์ด๋ก ์ ๋ ฌ๋ ๊ฒ์ด๋ค. ํ๋ ฌ์ ๊ฐ ๊ฐ๋ณ ํญ๋ชฉ์ ํ๋ ฌ์ ์์๋ผ๊ณ ํ๋ค.
ํ๋ ฌ์ (i, j)๋ก ์ธ๋ฑ์ค๊ฐ ๋งค๊ฒจ์ง๋ฉฐ, ์ฌ๊ธฐ์ i๋ ํ(row)์ด๊ณ j๋ ์ด(column)์ด๋ค. ์ด๋ ํ๋ ฌ์ ์ฐจ์(dimension)์ ์๋ฏธํ๋ค. ์ด์ ๋ฌ๋ฆฌ 2D ๊ทธ๋ํ์์๋ (x, y)๋ก ์ธ๋ฑ์ฑํ๋ ๊ฒ๊ณผ๋ ๋ฐ๋์ด๋ค.
ํ๋ ฌ์ ๋งค์ฐ ์ ์ฉํ ์ํ์ ์ฑ์ง๋ค์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ๋ฒกํฐ์ ๋ง์ฐฌ๊ฐ์ง๋ก ํ๋ ฌ์ ๋ํด ์ฌ๋ฌ ์ฐ์ฐ์ ์ ์ํ ์ ์๋ค. ์๋ฅผ ๋ค์ด, ํ๋ ฌ์ ๋ง์
, ๋บ์
, ๊ทธ๋ฆฌ๊ณ ๊ณฑ์
์ฐ์ฐ์ด ์๋ค.
โ ํ๋ ฌ์ ๋ง์ ๊ณผ ๋บ์
ํ๋ ฌ์ ๋ง์
๊ณผ ๋บ์
์ ๋ ํ๋ ฌ์ ๊ฐ ์์๋ฅผ ๊ธฐ์ค์ผ๋ก ์ํ๋๋ค. ์ฆ, ๋ ํ๋ ฌ์ ๋์ผํ ์ธ๋ฑ์ค์ ์๋ ์์๋ค๋ผ๋ฆฌ ์ฐ์ฐ์ ์ํํ๋ค. ์ด ์๋ฏธ๋ ๋ง์
๊ณผ ๋บ์
์ด ๋์ผํ ์ฐจ์์ ํ๋ ฌ๋ค์ ๋ํด์๋ง ์ ์๋๋ค๋ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด, 3x2 ํ๋ ฌ๊ณผ 2x3 ํ๋ ฌ(๋๋ 3x3 ํ๋ ฌ๊ณผ 4x4 ํ๋ ฌ)์ ์๋ก ๋ง์
์ด๋ ๋บ์
์ ํ ์ ์๋ค.
โ ํ๋ ฌ๊ณผ ์ค์นผ๋ผ์ ๊ณฑ์
ํ๋ ฌ๊ณผ ์ค์นผ๋ผ์ ๊ณฑ์
์ ํ๋ ฌ์ ๊ฐ ์์๋ฅผ ์ค์นผ๋ผ๋ก ๊ณฑํ๋ ์ฐ์ฐ์ด๋ค. ์ฌ๊ธฐ์ ์ค์นผ๋ผ(scalar)๋ ๋จ์ํ ํ๋ ฌ์ ๋ชจ๋ ์์๋ฅผ ์ค์นผ๋ผ์ ๊ฐ์ผ๋ก ์ค์ผ์ผ(scaling)ํ๋ ๊ฒ๊ณผ ๊ฐ์ ์๋ฏธ์ด๋ค.
โ ํ๋ ฌ๊ณผ ํ๋ ฌ์ ๊ณฑ์
1. ์ผ์ชฝ ํ๋ ฌ์ ์ด์ ๊ฐ์์ ์ค๋ฅธ์ชฝ ํ๋ ฌ์ ํ์ ๊ฐ์๊ฐ ๊ฐ์์ผ ๊ณฑ์
์ด ๊ฐ๋ฅํ๋ค.
์ฆ, ์ผ์ชฝ ํ๋ ฌ์ด (m, n) ํ๋ ฌ์ด๋ฉด ์ค๋ฅธ์ชฝ ํ๋ ฌ์ (n, p) ํ๋ ฌ์ด์ด์ผ ํ๋ค.
2. ํ๋ ฌ์ ๊ณฑ์
์ ๊ตํ๋ฒ์น์ด ์ฑ๋ฆฝํ์ง ์๋๋ค.
์ผ์ชฝ ํ๋ ฌ์ ํ ํ๊ณผ ์ค๋ฅธ์ชฝ ํ๋ ฌ์ ํ ์ด์ ๊ฐ์ ธ์ ํ๊ณผ ์ด์ ์ฒซ ๋ฒ์งธ ์์๋ผ๋ฆฌ ๊ณฑํ๋ค. ์ดํ ์์๋ค๋ ๋๊ฐ์ด ๊ณฑํ ํ ๊ฐ๋ค์ ๋ชจ๋ ํฉํ์ฌ ๊ฒฐ๊ณผ๊ฐ์ ๊ตฌํ๋ค.
(m, n) ํ๋ ฌ๊ณผ (n, p) ํ๋ ฌ์ ๊ณฑ์
์ ๊ฒฐ๊ณผ๋ (m, p) ์ฐจ์์ ํ๋ ฌ์ด ๋๋ค.
โ ํ๋ ฌ๊ณผ ๋ฒกํฐ์ ๊ณฑ์
๋ฒกํฐ๋ ๊ธฐ๋ณธ์ ์ผ๋ก N๊ฐ์ ๊ตฌ์ฑ ์์๋ฅผ ๊ฐ์ง Nx1 ํ๋ ฌ์ด๋ค. (์ด๋ N์ ๋ฒกํฐ์ ์ฐจ์์ ๋ํ๋ธ๋ค) ์ด๋ ๋ง์ฝ MxN ํ๋ ฌ์ด ์๋ค๋ฉด, Nx1 ๋ฒกํฐ์ ๊ณฑํ ์ ์์์ ์๋ฏธํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ ์ฐ๋ฆฌ๊ฐ ํ๋ ฌ๊ณผ ๋ฒกํฐ๋ฅผ ๊ณฑํ ์ ์๋ค๋ ์ฌ์ค์ ์ ๊ฒฝ ์จ์ผ ํ ๊น? ๊ทธ ์ด์ ๋, 2D/3D ๋ณํ์ ๋ง์ ํฅ๋ฏธ๋ก์ด ๊ฒ๋ค์ ํ๋ ฌ ์์ ๋ฃ์ ์ ์๊ณ , ๊ทธ ํ๋ ฌ๊ณผ ๋ฒกํฐ๋ฅผ ๊ณฑํ๋ฉด ๋ฒกํฐ๊ฐ ๋ณํ๋๊ธฐ ๋๋ฌธ์ด๋ค.
โ ํญ๋ฑ ํ๋ ฌ (Identity Matrix)
์ฐ๋ฆฌ๊ฐ ์๊ฐํ ์ ์๋ ๊ฐ์ฅ ๊ฐ๋จํ ๋ณํ ํ๋ ฌ์ ํญ๋ฑ ํ๋ ฌ(๋จ์ ํ๋ ฌ)์ด๋ค. ํญ๋ฑ ํ๋ ฌ์ ์ฃผ๋๊ฐ์ ์ ์ ์ธํ๊ณ ๋ชจ๋ 0์ผ๋ก ๊ตฌ์ฑ๋ NxN ํ๋ ฌ์ด๋ค. ์ด ๋ณํ ํ๋ ฌ์ ๋ฒกํฐ์ ์๋ฌด๋ฐ ์ํฅ์ ์ฃผ์ง ์๋๋ค.
ํญ๋ฑ ํ๋ ฌ์ ์ผ๋ฐ์ ์ผ๋ก ๋ค๋ฅธ ๋ณํ ํ๋ ฌ์ ์์ฑํ๊ธฐ ์ํ ์ถ๋ฐ์ ์ผ๋ก ์ฌ์ฉ๋๋ค. ๋ ๊น์ด ๋ค์ด๊ฐ๋ฉด, ํญ๋ฑ ํ๋ ฌ์ ์ ๋ฆฌ๋ฅผ ์ฆ๋ช
ํ๊ณ ์ฐ๋ฆฝ ๋ฐฉ์ ์์ ํธ๋ ๋ฐ ๋งค์ฐ ์ ์ฉํ ํ๋ ฌ์ด๋ค.
โ Scaling (ํ๋, ์ถ์)
๋ฒกํฐ๋ฅผ ์ค์ผ์ผ๋งํ๋ค๋ ๊ฒ์ ํ์ดํ์ ๊ธธ์ด๋ฅผ ์ํ๋ ๋งํผ ๋๋ฆฌ๋ฉด์ ๊ทธ ๋ฐฉํฅ์ ๊ทธ๋๋ก ์ ์งํ๋ ๊ฒ์ ์๋ฏธํ๋ค. ์ฐ๋ฆฌ๊ฐ 2์ฐจ์ ๋๋ 3์ฐจ์์์ ์์
ํ๊ณ ์๊ธฐ ๋๋ฌธ์, ๊ฐ ์ถ(x, y, z)์ ๊ฐ๊ฐ ์ค์ผ์ผ๋งํ๋ 2๊ฐ ๋๋ 3๊ฐ์ ์ค์ผ์ผ๋ง ๋ณ์๋ก ์ค์ผ์ผ๋ง์ ์ ์ํ ์ ์๋ค.
์ค์ผ์ผ๋ง ๋ณ์๊ฐ ๊ฐ ์ถ๋ง๋ค ๋์ผํ๋ค๋ฉด ๊ท ์ผ ์ค์ผ์ผ(uniform scale)์ด๋ผ๊ณ ํ๋ฉฐ ๊ฐ ์ถ๋ง๋ค ๊ฐ์ง ์๋ค๋ฉด ๋น๊ท ์ผ ์ค์ผ์ผ(non-uniform scale)์ด๋ผ๊ณ ํ๋ค.
์๋ฅผ๋ค์ด 3๋ฐฐ์ ์ค์ผ์ผ๋ง์ ์ํํ๋ ๋ณํ ํ๋ ฌ์ ๋ง๋ค๊ธฐ ์ํด ํญ๋ฑ ํ๋ ฌ์ 1์ ๋ชจ๋ 3์ผ๋ก ๋ฐ๊พผ๋ค๋ฉด, ๋ฒกํฐ์ ๊ฐ ์์์ 3์ ๊ณฑํ๊ฒ ๋์ด ๋ฒกํฐ๊ฐ ๊ท ์ผํ๊ฒ 3๋ฐฐ๋ก ์ค์ผ์ผ๋ง๋๋ค.
โ Translation (ํํ ์ด๋)
ํํ ์ด๋์ ๋ฒกํฐ์ ๋ค๋ฅธ ๋ฒกํฐ๋ฅผ ๋ํ์ฌ ์๋ก์ด ์์น๋ฅผ ๊ฐ์ง ๋ฒกํฐ๋ฅผ ์์ฑํ๋ ๊ณผ์ ์ด๋ค.
์ค์ผ์ผ๋ง ํ๋ ฌ๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก, 4x4 ํ๋ ฌ์๋ ํน์ ์ฐ์ฐ์ ์ํํ ์ ์๋ ์ฌ๋ฌ ์์น๊ฐ ์๋ค. ํํ ์ด๋์ ์ํด์๋ 4๋ฒ์งธ ์ด์ ์์ 3๊ฐ ๊ฐ์ด ์ฌ์ฉ๋๋ค. (ํํ ์ด๋ ๋ณ์๊ฐ์ด ๋ฒกํฐ์ w์์ ์ฆ, 1๊ณผ ๊ณฑํด์ ธ ํํ ์ด๋ ๊ฐ ๊ทธ๋๋ก ๋ฒกํฐ์ ์๋ ๊ฐ์ ๋ํด์ง๋ค)
- Homogeneous coordinates (๋์ฐจ ์ขํ)
๋ฒกํฐ์ w ๊ตฌ์ฑ ์์๋ ๋์ฐจ ์ขํ๋ก๋ ์๋ ค์ ธ ์๋ค. ๋์ฐจ ๋ฒกํฐ์์ 3D ๋ฒกํฐ๋ฅผ ์ป์ผ๋ ค๋ฉด x, y, z ์ขํ๋ฅผ w ์ขํ๋ก ๋๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ w ๊ตฌ์ฑ ์์๊ฐ 1.0์ด๊ธฐ ๋๋ฌธ์ ์ด๋ฅผ ์์์ฑ์ง ๋ชปํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
๋์ฐจ ์ขํ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ฌ๋ฌ ๊ฐ์ง ์ด์ ์ด ์๋ค. 3D ๋ฒกํฐ์ ๋ํด ํ๋ ฌ ํํ ์ด๋์ ํ ์ ์๊ฒ ํด์ฃผ๊ณ (w ๊ตฌ์ฑ ์์๊ฐ ์์ผ๋ฉด ๋ฒกํฐ๋ฅผ ํํ ์ด๋ํ ์ ์๋ค), ์ด w ๊ฐ์ ์ฌ์ฉํ์ฌ 3D ์๊ทผ๋ฒ์ ๊ตฌํํ ์ ์๋ค.
๋ํ, ๋์ฐจ ์ขํ๊ฐ 0์ผ ๋ ๋ฒกํฐ๋ ๋ฐฉํฅ ๋ฒกํฐ๋ผ๊ณ ํน๋ณํ ๋ถ๋ฆฌ๋ฉฐ, w ์ขํ๊ฐ 0์ธ ๋ฒกํฐ๋ ํํ ์ด๋ํ ์ ์๋ค.
โ Rotation (ํ์ )
์์ ๋ค๋ฃฌ ๋ช ๊ฐ์ง ๋ณํ์ 2D ๋๋ 3D ๊ณต๊ฐ์์ ์ดํดํ๊ณ ์๊ฐํํ๊ธฐ ์๋์ ์ผ๋ก ์ฌ์ ์ง๋ง, ํ์ ์ ์กฐ๊ธ ๋ ๊น๋ค๋กญ๋ค.
๋จผ์ , ๋ฒกํฐ์ ํ์ ์ด ์ค์ ๋ก ๋ฌด์์ธ์ง ์ ์ํ๋ฉด, 2D ๋๋ 3D์์์ ํ์ ์ ๊ฐ๋๋ก ํํ๋๋ค. ๊ฐ๋๋ ๋(degrees) ๋๋ ๋ผ๋์(radians) ๋จ์๋ก ํํ๋ ์ ์์ผ๋ฉฐ, ์ ์ ์ฒด๋ 360๋ ๋๋ 2π ๋ผ๋์์ด๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ ๋จ์์ ๋ ์ต์ํ๊ธฐ ๋๋ฌธ์ ํ์ ์ ์ค๋ช
ํ ๋ ๋ ๋จ์๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์ ํธํ๋ค.
๋๋ถ๋ถ์ ํ์ ํจ์๋ ๋ผ๋์ ๋จ์๋ฅผ ํ์๋ก ํ์ง๋ง, ๋คํํ๋ ๋(degrees)๋ฅผ ๋ผ๋์(radians)์ผ๋ก ์ฝ๊ฒ ๋ณํํ ์ ์๋ค.
- ๋ผ๋์ = ๋ * (PI / 180)
- ๋ = ๋ผ๋์ * (180 / PI)
* π๋ ๋ฐ์ฌ๋ฆผํ์ฌ 3.14159265359
3D์์์ ํ์ ์ ๊ฐ๋์ ํ์ ์ถ์ผ๋ก ์ง์ ๋๋ค. ์ง์ ๋ ๊ฐ๋๋ ์ฃผ์ด์ง ํ์ ์ถ์ ๋ฐ๋ผ ๋ฌผ์ฒด๋ฅผ ํ์ ์ํจ๋ค. ์๋ฅผ ๋ค์ด, 3D ์ธ๊ณ์์ 2D ๋ฒกํฐ๋ฅผ ํ์ ์ํฌ ๋, ํ์ ์ถ์ z์ถ์ผ๋ก ์ค์ ํ๋ค.
์ผ๊ฐ๋ฒ(Trigonometry)์ ์ฌ์ฉํ๋ฉด ์ฃผ์ด์ง ๊ฐ๋์ ๋ฐ๋ผ ๋ฒกํฐ๋ฅผ ์๋ก ํ์ ๋ ๋ฒกํฐ๋ก ๋ณํํ ์ ์๋ค. ์ด๋ ์ผ๋ฐ์ ์ผ๋ก ์ฌ์ธ(sin)๊ณผ ์ฝ์ฌ์ธ(cos) ํจ์์ ์กฐํฉ์ ํตํด ์ํ๋๋ค.
ํ์ ํ๋ ฌ์ 3D ๊ณต๊ฐ์ ๊ฐ ๋จ์ ์ถ์ ๋ํด ์ ์๋๋ฉฐ, ๊ฐ๋๋ θ(์ธํ) ๊ธฐํธ๋ก ํ์๋๋ค.
- x์ถ์ ์ค์ฌ์ผ๋ก ํ์
(x, y, z, 1) → (x, cosθ⋅y - sinθ⋅z, sinθ⋅y + cosθ⋅z, 1)
- y์ถ์ ์ค์ฌ์ผ๋ก ํ์
(x, y, z, 1) → (cosθ⋅x + sinθ⋅z, y, −sinθ⋅x + cosθ⋅z, 1)
- z์ถ์ ์ค์ฌ์ผ๋ก ํ์
(x, y, z, 1) → (cosθ⋅x − sinθ⋅y, sinθ⋅x + cosθ⋅y, z, 1)
ํ์ ํ๋ ฌ์ ์ฌ์ฉํ๋ฉด 3๊ฐ์ ๋จ์ ์ถ ์ค ํ๋๋ฅผ ์ค์ฌ์ผ๋ก ์์น ๋ฒกํฐ๋ฅผ ๋ณํํ ์ ์๋ค. ๋ํ X์ถ์ ์ค์ฌ์ผ๋ก ํ์ ํ ๋ค์ Y์ถ, ๊ทธ ๋ค์ Z์ถ์ ์ค์ฌ์ผ๋ก ํ์ ํ๋ ๋ฐฉ์์ผ๋ก 3๊ฐ์ ํ์ ํ๋ ฌ์ ์กฐํฉํ ์ ์๋ค.
์ด๋ ๊ฒ ํ๋ฉด '์ง๋ฒ ๋ฝ(Gimbal Lock)'์ด๋ผ๋ ๋ฌธ์ ๋ฅผ ์ด๋ํ ์ ์๋ค. ๋ ๋์ ๋ฐฉ๋ฒ์ ํ์ ํ๋ ฌ์ ์กฐํฉํ๋ ๋์ ์์์ ๋จ์ ์ถ, ์๋ฅผ ๋ค์ด (0.662, 0.2, 0.722) (์ด ๋ฒกํฐ๊ฐ ๋จ์ ๋ฒกํฐ์์ ์ฃผ์) ์ฃผ์๋ก ์ง์ ํ์ ํ๋ ๊ฒ์ด๋ค.
ํ์ง๋ง ์ด ๋ฐฉ๋ฒ๋ ์ง๋ฒ ๋ฝ ํ์์ด ๋ฐ์ํ ์ ์๋ค. ์๋ฒฝํ ์ง๋ฒ ๋ฝ ํ์์ ์๋ฐฉํ๋ ๋ฐฉ๋ฒ์ ์ฌ์์(Quaternion)๋ฅผ ์ฌ์ฉํ์ฌ ํ์ ์ํค๋ ๊ฒ์ด๋ค.
โ ํ๋ ฌ์ ์กฐํฉ
ํ๋ ฌ์ ์ฌ์ฉํ์ฌ ๋ณํ์ ์ํํ๋ ์ง์ ํ ์ฅ์ ์ ํ๋ ฌ-ํ๋ ฌ ๊ณฑ์
๋๋ถ์ ์ฌ๋ฌ ๋ณํ์ ํ๋์ ํ๋ ฌ๋ก ๊ฒฐํฉํ ์ ์๋ค๋ ์ ์ด๋ค. ์๋ฅผ ๋ค์ด, ํ๋์ ๋ณํ ํ๋ ฌ๋ก ๋ฒกํฐ (x,y,z)๋ฅผ 2๋ฐฐ๋ก ์ค์ผ์ผ๋งํ ํ (1,2,3)๋งํผ ํํ ์ด๋์ด ๊ฐ๋ฅํ๋ค.
ํ๋ ฌ์ ๊ณฑํ ๋๋ ๋จผ์ ํํ ์ด๋์ ํ๊ณ ๊ทธ ๋ค์์ ์ค์ผ์ผ ๋ณํ์ ํ๋ค. ํ๋ ฌ ๊ณฑ์
์ ๊ตํ ๋ฒ์น์ด ์ฑ๋ฆฝํ์ง ์์ผ๋ฏ๋ก ์์๊ฐ ์ค์ํ๋ค. ํ๋ ฌ์ ๊ณฑํ ๋๋ ๊ฐ์ฅ ์ค๋ฅธ์ชฝ์ ์๋ ํ๋ ฌ์ด ๋จผ์ ๋ฒกํฐ์ ๊ณฑํด์ง๋ฏ๋ก, ๊ณฑ์
์ ์ค๋ฅธ์ชฝ์์ ์ผ์ชฝ์ผ๋ก ์ฝ์ด์ผ ํ๋ค.
ํ๋ ฌ์ ๊ฒฐํฉํ ๋๋ ๋จผ์ ์ค์ผ์ผ๋ง์ ํ๊ณ , ๊ทธ ๋ค์์ ํ์ ์ ํ๊ณ , ๋ง์ง๋ง์ผ๋ก ํํ ์ด๋์ ํ๋ ๊ฒ์ด ์ข๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ๋ณํ๋ค์ด ์๋ก์๊ฒ ๋ถ์ ์ ์ธ ์ํฅ์ ๋ฏธ์น ์ ์๋ค. ์๋ฅผ ๋ค์ด, ๋จผ์ ํํ ์ด๋์ ํ๊ณ ๊ทธ ๋ค์์ ์ค์ผ์ผ๋ง์ ํ๋ฉด ํํ ์ด๋ ๋ฒกํฐ๋ ์ค์ผ์ผ๋ง๋๋ค.
'๐จ Graphics > ๐ต OpenGL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [OpenGL] ์ขํ๊ณ (Coordinate System) (0) | 2024.08.02 |
|---|---|
| [OpenGL] ๋ณํ (Transformation) (0) | 2024.07.30 |
| [OpenGL] ๋ฒกํฐ (Vector) (0) | 2024.07.30 |
| [OpenGL] Texture ์ ๋ (0) | 2024.07.28 |
| [OpenGL] Texture ์ ์ฉ (0) | 2024.07.28 |