Contents
1.1.1. ์ขํ๊ณ ¶
- ์ค๋ฅธ์ ์ขํ๊ณ : ์ฐ๋ฆฌ๊ฐ ์ํ์ฑ
์์ ๋ง์ด ๋ณด๋ ๊ทธ ์ขํ๊ณ๋ค. ์์๋๊ฐ Z, ์๋ค๊ฐ X, ์ข์ฐ๊ฐ Y, ๊ทธ๋ํฝ์ค์์ ์ ์์ด๋ค.
- ์ผ์ ์ขํ๊ณ : ๊ณต๊ฐ๊ฐ๋
์ดํดํ๊ธฐ ์ฝ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ํฝ์ค์์ ๋ง์ด ์ฌ์ฉํ๋ค. ์๋ค๊ฐ Z, ์ข์ฐ๊ฐ X, ์์๋๊ฐ Y
- ๊ตฌ๋ฉด ์ขํ๊ณ : ์ฃผ๋ก ์์ ์ ํํํ ๋ ์ ์ฐ์ธ๋ค. ์์ ์์๋ถํฐ์ ๊ฑฐ๋ฆฌ ฯ, z์ถ๊ณผ์ ๊ฐ ฮธ, x์ถ๊ณผ์ ๊ฐ ฯ ๋ก ๊ตฌ์ฑ๋๋ค. ์ด๊ฑธ ๊ทธ๋ฆผ์ ๋ฐ๋ผ ํ์ด๋ณด๋ฉด,
- x = ฯsinฮธcosฯ
- y = ฯsinฮธsinฯ
- z = ฯcosฮธ
- x = ฯsinฮธcosฯ
1.1.2. ๋ฒกํฐ ¶
- ๋ญ.. ๋ณ๋ก ๋ณผ๊ฑฐ ์๋ค. ๋ค ๊ณ ๋ฑํ๊ต ๋ ํ๋ ๊ฑฐ๋ค. ์์ํ๊ฑฐ๋ง ๋ช๊ฐ ์ ์ด๋ณด๋ฉด..
- ๋ฒกํฐ ํํ์.. ์๋ฌธ์๋ก ํด์ผ๊ฒ ๋ค. ํ์ดํ ๊ทธ๋ฆด๋ผ๋๊น ์ด๋ผ ๊ท์ฐฎ๋ค.
- ์ธ์ ์ โXโ ์ด๋ ๊ฒ ํํํ๋ค. ๋ฐฉํฅ์ ๋ฒกํฐ โ์์ ๋ฒกํฐโ์ชฝ์ผ๋ก 180๋๋ณด๋ค ์์ ๊ฐ์ผ๋ก ๋๋ฆด๋ ๋์ฌ๊ฐ ์งํํ๋ ๋ฐฉํฅ์ด๋ค. ์ด๊ฒ ๋ญ ๊ฐ์๋ฆฌ๋--;
- ๋ฒกํฐ์ ํฌ๊ธฐ : |โXโ| = |โ||โ|sinฮธ
- ์ธ์ ์ ์ฑ์ง : ๋ ๋ฒกํฐ์ ๋์์ ์์ง์ธ ๋ฒกํฐ
1.1.3. ํ๋ ฌ ¶
- 3X3์ ํ๋ ฌ์
~cpp | a1 b1 c1 | | b2 c2 | | b1 c1 | | b1 c1 | D = | a2 b2 c2 | = a1 | | - a2 | | + a3 | | | a3 b3 c3 | | b3 c3 | | b3 c3 | | b2 c2 |
- ๋ฒกํฐ์ ์ธ์ ์ ํ๋ ฌ๋ก ํ์ํ๊ธฐ(i,j,k๋ ๊ฐ๊ฐ x,y,z๋ฐฉํฅ์ ๋จ์๋ฒกํฐ)
~cpp | i j k | โXโ = | Xa Ya Za | | Xb Yb Zb |
- ๊ผญ์ง์ ๋ฐฉํฅ ํ๋ณ? ์ด๊ฑด ์ด๋ฐ ์ฐ๋ ๊ฑฐ์ง..
1.2. ๋์ฐจ ์ขํ๊ณ์ 3์ฐจ์ ๋ณํ ํ๋ ฌ ¶
- ๋์ฐจ ์ขํ๊ณ? ๊ทธ๋ฅ ์๊ธฐ ์ฝ๊ฒ ๋งํ์๋ฉด, ํํ์ด๋์ ์ผ๋ฐ์ ์ธ ์ผ์ฐจ๋ณํ์ผ๋ก ๋ํ๋ด๊ธฐ๊ฐ ๋ถ๊ฐ๋ฅํด์, ํ๋์ ์ฑ๋ถ์ ์ถ๊ฐํด์ ๊ทธ๊ฑธ๋ก ๋ํ๋ด๋ ๊ฑฐ๋ค.
- 3์ฐจ์ ์ขํ๋ฅผ ๋ํ๋ผ๋๋ x,y,z ๊ทธ๋ฆฌ๊ณ w๋ผ๋ ๊ฐ์ ์ถ๊ฐ๋ก ์จ์ค๋ค. ๊ทธ๋ฅ 1๋ก ์จ์ฃผ๋ฉด ๋๋ค.
1.2.1. ์์์ ์ถ์ ์ค์ฌ์ผ๋ก ํ์ ์ด๋ ํ๊ธฐ(ํ ์ด๊ฒ์ ์์นํด์ ์ํ๋ฌธ์ ?) ¶
- ํ์ ์ถ์ด ์์ ์ ์ง๋๊ฒ ํํ์ด๋ ์ํจ๋ค.
- ํ์ ์ถ์ด xzํ๋ฉด๊ณผ ๋ง๋๋๋ก x์ถ์ ์ค์ฌ์ผ๋ก ํ์ ์ด๋ ์ํจ๋ค.
- ํ์ ์ถ์ด z์ถ๊ณผ ์ผ์นํ๊ฒ y์ถ์ ์ค์ฌ์ผ๋ก ํ์ ์ด๋ ์ํจ๋ค.
- ์ํ๋ ๋งํผ z์ถ์ ์ค์ฌ์ผ๋ก ๋๋ ค์ค๋ค.
- ์์ ์์ ๊ฒ์ ์ญ๋ณํ
- ์์ ์์ ์์ ๊ฒ์ ์ญ๋ณํ
- ์์ ์์ ์์ ์์ ๊ฒ์ ์ญ๋ณํ
- ์ ํ๋ ฌ๋ค์ ๋ค ๊ณฑํ๋ฉด
~cpp T(-x1, -y1, -z1) Rx(ฯ) Ry(-ฮธ) Rz(ฮฑ) Ry(ฮธ) Rx(-ฯ) T(x1, y1, z1) ์ ๋ผ ๋ณต์กํด ๋ณด์ธ๋ค. ๊ทผ๋ฐ ์ง์ ์์ผ๋ก ๋ฐ๋ผ ํด๋ณด๋ฉด ๋ณ๋ฃจ ์ ๋ณต์กํ๋ค.
1.3. ์๋์ฐ์ ๋ทฐํฌํธ ¶
- ๋ทฐํฌํธ : ํ๋ฉด์์ ๋ํ๋ผ ๋ถ๋ถ์ ๊ฐ๋ฅดํด
- ์๋์ฐ ์์์ x๊ฐ์ ์ต์๊ฐ์ x(min), ์ต๋๊ฐ์ x(max), y๊ฐ์ ์ต์๊ฐ์ y(min), ์ต๋๊ฐ์ y(max) ๋ผ ํ์.
- ๋ทฐํฌํธ์ ์ฌ๊ฐํ์ ์ต์,์ต๋๊ฐ์ X(min), X(max), Y(min), Y(max) ๋ผ ํ์.
- ํ๋/์ฆ๊ฐ๋ ๊ตฌํ๋ ๊ณต์
- delx = (X(max) - X(min)) / (x(max) - x(min))
- dely = (Y(max) - Y(min)) / (y(max) - y(min))
- x(c) = (x(max) + x(min)) / 2
- y(c) = (y(max) + y(min)) / 2
- X(c) = (X(max) + X(min)) / 2
- Y(c) = (Y(max) + Y(min)) / 2
- c1 = X(c) - x(c) * delx
- c2 = Y(c) - y(c) * dely
- X = delx * x + c1
- Y = dely * y + c2
- delx = (X(max) - X(min)) / (x(max) - x(min))
1.4.1. ์กฐ๊ฑด ¶
- ๋ชจ๋ ๋ฉด์ ์ธ์ ํด์ผ ํ๋ค.
- ํน์ ํ ๋ค๊ฐํ์ mesh ๋ด์์ ์ฐพ์์ ์์ด์ผ ํ๋ค.
- ํ๋์ ๋ค๊ฐํ์ ์ด๋ฃจ๋ ๋ชจ๋ ๋ชจ์๋ฆฌ๋ ์ ํํ๊ฒ ํํ๋์ด์ผ ํ๋ค.
- ํ๋์ ๋ชจ์๋ฆฌ๋ฅผ ๊ณต์ ํ๋ ๋ค๊ฐํ๋ค์ ์ง์ ์ฐพ์์ ์์ด์ผ ํ๋ค.
- mesh ์ ์ฒด๋ฅผ ๋ฐ๊พธ๊ฑฐ๋ ๋์คํ๋ ์ดํ ์ ์์ด์ผ ํ๋ค.
1.4.2. Explicit Polygons Mesh ¶
- ๊ผญ์ง์ ์ vertex table์ ์ ์ฅํ ๋ค๊ฐํ์ ๊ผญ์ง์ ์ ์ฐ์๋ ์์๋ก ๋ํ๋ด๋ ๋ฐฉ๋ฒ
- ๋ฆฌ์คํธ์ ๋ฐฐ์ด์ ์ธ ์ ์๋๋ฐ, ๋ฆฌ์คํธ๊ฐ ์ข๋ ํธํ๋ค.
- ๋ง์ฝ์ P1 ๋ค๊ฐํ์ ์ด๋ฃจ๋ Vertex๋ค์ ๋ฐ์๊ณ ๋ฐฉํฅ ์์ผ๋ก v1,v3,v4,v6์ด๋ผ ํ๋ฉด v1->v3->v4->v6 ์ด๋ ๊ฒ ๊ฐ๋ฅดํค๊ฒ ๋ฆฌ์คํธ๋ฅผ ๊ตฌํํ๋ฉด ๋๋ค.
- ๋จ์
- ๋ชจ๋ ๋ชจ์๋ฆฌ๊ฐ ๋๋ฒ์ฉ ๊ทธ๋ ค์ง๊ฒ ๋๋ค.
- ์ด๋ค ๋ชจ์๋ฆฌ๋ฅผ ๊ณต์ ํ๊ณ ์๋ ๋ค๊ฐํ์ ์ฐพ๊ธฐ๊ฐ ์ด๋ ต๋ค.
- ๋๋ฌธ์ ์๋๊ฐ ์กธ๋ผ ๋๋ฆฌ๋ค.
- ๋ชจ๋ ๋ชจ์๋ฆฌ๊ฐ ๋๋ฒ์ฉ ๊ทธ๋ ค์ง๊ฒ ๋๋ค.
2.1. 3์ฐจ์ ๊ทธ๋ํฝ์ด๋? ¶
- ์ด๋ค ๋ฌผ์ฒด๋ฅผ ์ง์ ๊ณผ ๊ณก์ ์ ์งํฉ์ฒด๋ก ํํํ ๋ค์ ํฌ์์ ํตํด ํ
๋๋ฆฌ๋ฅผ ํ์ํ๋ 'Wire frame ๋ชจ๋ธ'
- ์ด๋ค ๋ฌผ์ฒด๋ฅผ ๊ทธ๊ฒ์ ๋๋ฌ์ธ๊ณ ์๋ ๋ฉด์ผ๋ก ๋ํ๋ธ ๋ค์ ์์ , ์๋ฉด์ ๊ฑฐ ์๊ณ ๋ฆฌ์ฆ์ด๋ Shading ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋ฏธํ์ฌ ๋ณด๋ค ํ์ค๊ฐ ์๊ฒ ๊ทธ ๋ฌผ์ฒด๋ฅผ ํํํ๋ 'Surfaced ๋ชจ๋ธ'
- ์ํ์ ์ธ ๊ณ ์ฒด๋ก ์ด๋ค ๋ฌผ์ฒด๋ฅผ ํํํ๋ 'Solid ๋ชจ๋ธ'
- ๊ฐ์ฅ ํฐ ๋ฌธ์ ์ : ๊น์ด๊ฐ ํํ
2.1.1. ํฌ์ ¶
- 3์ฐจ์์ 2์ฐจ์์ผ๋ก ํํํ๋ ๊ฐ์ฅ ๊ธฐ์ด์ ์ธ ๋ฐฉ๋ฒ
- ํํํฌ์ (Parallel projection, orthogonal projection) : ๋ฌผ์ฒด์ ๋ชจ๋ ์ ์ ํ๋ฉด์์ ํฌ์. ๊น์ด๊ฐ...์ ๋ณ๋ฃจ๋ค.
- ์๊ทผํฌ์ (Perspective projection) : ์ฐ๋ฆฌ ๋์ ๋ณด์ด๋ ๋๋ก(์๊ทผ๊ฐ ์ด๋ ค์) ๊น์ด๊ฐ ์ด๋ฆฌ๋๋ฐ ์ข๋ค.
2.1.4. ๊ทธ๋ฆผ์ ¶
- ์ ๊ด์ : ๊ณ์ฐํ๊ธด ์ฝ์ง๋ง ํ์ค๊ฐ ๋จ์ด์ง
- ๋ถ์ฐ๊ด์ : ๊ณ์ฐํ๊ธด ์ด๋ ต์ง๋ง ํ์ค๊ฐ ์ข์
2.2. ์๊ฐ๋ณํ๊ณผ ์๊ทผํฌ์ ¶
- ์ค์ขํ๊ณ(Xw,Yw,Zw) -> ์๊ฐ์ขํ๊ณ(Xe,Ye,Ze) -> ์คํฌ๋ฆฐ ์ขํ๊ณ(X,Y)
2.2.1. ์๊ฐ๋ณํ ¶
- ์๊ฐ์ขํ๋ ์์์ ๋งํ๋ฏ์ด ๊ตฌ๋ฉด์ขํ๊ณ๋ฅผ ์ด๋ค.
- Xe, Ye, Ze, 1 = Xw, Yw, Zw, 1 V : V๋ ์ค์ขํ๊ณ๋ฅผ ์๊ฐ์ขํ๊ณ๋ก ๋ฐ๊พธ๊ธฐ ์ํ ํ๋ ฌ
- ํ๋ ฌ V ๊ตฌํ๊ธฐ
- ์ค์ขํ๊ณ์ ์ค์ฌ O๋ฅผ ์์ E๋ก ํํ์ด๋์ํจ๋ค. T( -Xe, -Ye, -Ze )
- y์ถ์ ์์ ๋ฒกํฐ์ xyํ๋ฉด์ฑ๋ถ์ ๋ฐฉํฅ๊ณผ ์ผ์น์์ผ์ผ ํ๋ค. Z์ถ์ ์ค์ฌ์ผ๋ก (ํ์ด/2-ฮธ) ํ์ (ฮธ๋ x์ถ๊ณผ์ ๊ฐ)
- z์ถ์ด ์์ ๋ฒกํฐ์ ๋ฐฉํฅ์ด ๋์ด์ผ ํ๋ฏ๋ก x์ถ์ ์ค์ฌ์ผ๋ก (ฯ-ํ์ด) ํ์ (ฯ๋ z์ถ๊ณผ์ ๊ฐ)
- x์ถ์ ๋ฑกํฅ์ ๋ฐ๊พผ๋ค.
- ๊ฒฐ๋ก (์ง๊ธ ๋ณด๋๊น ์ฐ๋ฆฌ๊ฐ ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ ํ๋ ฌ์ด๋ ์ข ๋ค๋ฅด๋ค. ํ๊ณผ ์ด์ด ๋ฐ๊ปด์๋ค.)
- ์ค์ขํ๊ณ์ ์ค์ฌ O๋ฅผ ์์ E๋ก ํํ์ด๋์ํจ๋ค. T( -Xe, -Ye, -Ze )
~cpp V = T( -Xe, -Ye, -Ze) Rz(ํ์ด/2-ฮธ) Rx(ฯ-ํ์ด) Myz | -sinฮธ -cosฯcosฮธ -sinฯcosฮธ 0 | | cosฮธ -cosฯsinฮธ -sinฯsinฮธ 0 | = | 0 sinฯ -cosฯ 0 | | 0 0 1 |
2.2.2. ์๊ทผํฌ์ ¶
- ๊ทธ๋ฆผ ๋ด์ผ ์ดํดํ ์ ์๋๋ฐ.. ๊ทธ๋ฅ ์๋ง ์จ๋ณด๋ฉด..
- X = d*x/z + c1, Y = d*y/z + c2 (d๋ ์์ ๊ณผ ์คํฌ๋ฆฐ ์ฌ์ด์ ๊ฑฐ๋ฆฌ, ์คํฌ๋ฆฐ์ ๊ฐ๋ก 2c1, ์ธ๋ก 2c2)
3. ํผํฉ(Blend) ¶
- ํท๊ฐ๋ ธ๋ ๋ถ๋ถ์ด๊ณ ์ธํฐ๋ท์์ ์ฐพ์๋ ๋ณ๋ก ์์ธํ ์๋์๊ธธ๋ ์ ์์.
- ์๋ณธ(source) : ์๋ก ๊ทธ๋ ค์ง๋ ํฝ์
- ๋์(destination) : ํ๋ ์ ๋ฒํผ์ ์ด๋ฏธ ๊ทธ๋ ค์ ธ ์๋ ํฝ์
- ์ฌ์ฉํ๋ ํจ์ : glEnable(GL_BLEND), glBlendFunc(์๋ณธ ํฝ์
์ ๋ํ ๋ธ๋๋ฉ ๊ณ์๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ์, ๋์ ํฝ์
์ ๋ํ ๋ธ๋๋ฉ ๊ณ์๋ฅผ ๊ณ์ฐํ๋ ๋ฐฉ์)
- ์๋ณธ ํฝ์
์ ๋ํ ๊ณ์ฐ ๋ฐฉ์
๋ฐฉ์ | ์ค๋ช |
GL_ZERO | ์๋ณธ ์์์ 0,0,0,0 ์ผ๋กํ๋ค |
GL_ONE | ์๋ณธ ์์์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค |
GL_DST_COLOR | ์๋ณธ ์์๊ณผ ๋์ ์์์ ๊ณฑํ๋ค |
GL_ONE_MINUS_DST_COLOR | ์๋ณธ ์์๊ณผ ((1,1,1,1)-๋์ ์์)์ ๊ณฑํ๋ค |
GL_SRC_ALPHA | ์๋ณธ ์์์ ์๋ณธ ์ํ ๊ฐ์ ๊ณฑํ๋ค |
GL_ONE_MINUS_SRC_ALPHA | ์๋ณธ ์์์ (1-์๋ณธ ์ํ๊ฐ)์ ๊ณฑํ๋ค |
GL_DST_ALPHA | ์๋ณธ ์์์ ๋์ ์ํ ๊ฐ์ ๊ณฑํ๋ค |
GL_ONE_MINUS_DST_ALPHA | ์๋ณธ ์์์ ((1,1,1,1)-๋์ ์์ ์ํ๊ฐ)์ ๊ณฑํ๋ค |
GL_SRC_ALPHA_SATURATE | ์๋ณธ ์์์ ์๋ณธ์ํ ๊ฐ๊ณผ (1-๋์ ์ํ๊ฐ)์ค ์์ ๊ฒ์ ๊ณฑํ๋ค |
- ๋์ ํฝ์
์ ๋ํ ๊ณ์ฐ ๋ฐฉ์
๋ฐฉ์ | ์ค๋ช |
GL_ZERO | ๋์ ์์์ 0,0,0,0 ์ผ๋กํ๋ค |
GL_ONE | ๋์ ์์์ ๊ทธ๋๋ก ์ฌ์ฉํ๋ค |
GL_SRC_COLOR | ๋์ ์์๊ณผ ์๋ณธ ์์์ ๊ณฑํ๋ค |
GL_ONE_MINUS_SRC_COLOR | ๋์ ์์๊ณผ ((1,1,1,1)-์๋ณธ ์์)์ ๊ณฑํ๋ค |
GL_SRC_ALPHA | ๋์ ์์์ ์๋ณธ ์ํ ๊ฐ์ ๊ณฑํ๋ค |
GL_ONE_MINUS_SRC_ALPHA | ๋์ ์์์ (1-์๋ณธ ์ํ๊ฐ)์ ๊ณฑํ๋ค |
GL_DST_ALPHA | ๋์ ์์์ ๋์ ์ํ ๊ฐ์ ๊ณฑํ๋ค |
GL_ONE_MINUS_DST_ALPHA | ๋์ ์์์ ((1,1,1,1)-๋์ ์์ ์ํ๊ฐ)์ ๊ณฑํ๋ค |
GL_SRC_ALPHA_SATURATE | ๋์ ์์์ ์๋ณธ์ํ ๊ฐ๊ณผ (1-๋์ ์ํ๊ฐ)์ค ์์ ๊ฒ์ ๊ณฑํ๋ค |
4. TextureMapping ¶
- ํ
์ค์ณ ๋งตํํ๋ ๊ณผ์
~cpp Define the LoadBMPfile(char *filename) function declare GLuint tex[n] declare AUX_RGBImageRec *texRec[n] assign LoadBMPFile("filename.bmp") to each texRec[i] glGenTextures(count,&tex[0]) glBindTexture(GL_TEXTURE_2D,tex[i]) glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER,GL_LINEAR); glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_LINEAR); glTexImage2D(GL_TEXTURE_2D,0,3,texRec[i]->sizeX ,texRec[i]->sizeY, 0, GL_RGB, GL_UNSIGNED_BYTE,texRec[i]->data); if(texRec[i]) if(texRec[i]->data) free(texRec[i]->data); free(texRec[i]); glEnable(GL_TEXTURE_2D); glTexEnvi(GL_TEXTURE_ENV,GL_TEXTURE_ENV_MODE,GL_MODULATE); Example of using the texturemapping glBindTexture(GL_TEXTURE_2D, tex[0]); DrawQuad(1,1,1,normal);
5. Thread ¶
- ๊ทธ๋ฆฌ์ค ๋ฌธ์ ์ฐ๋๋ฒ ใ
๋๋ฅด๊ณ ํ์ํค
- ์๋ฌธ์ ใ
๋๋ฅด๊ณ ํ์ํค
- ใ
๋๋ฅด๊ณ ํ์ํค ์น๋ฉด ๋ถ์ ์ธ์ ์๋ค.
- ใน ๋๋ฅด๊ณ ํ์ํค ์น๋ฉด ๋จ์๋ ๋์จ๋ค.