๐ผcomputer_graphics/ chap 04.2์ฐจ์ ๊ทธ๋ํฝ์ค์ ๊ธฐ๋ณธ ์์
๐ 4.1 ์ ๊ณผ ์
๐ ์ ๊ณผ ์ ์ ์ ์ ๋ฐ ์์ฑ
์ (point)
-
๊ธฐํ์ ๊ณต๊ฐ์์ ์ขํ (x,y)๋ก ์ ์
-
์์ฑ์ ํฌ๊ธฐ(Size), ๋ช
์(Intensity) ๋๋ ์์(Color), ๋ชจ์(Shape) ๋ฑ
๊ธฐํ์ ๊ณต๊ฐ
์ถ๋ ฅ์ฅ์น์ ๊ณต๊ฐ
์ (Line)
- ์์์ (xa, yb)์ ๋์ (xb, yb)์ ์ ๋์ขํ๋ก ์ ์
- ๋๋ ์์์ ์ขํ (x,y)์ ์ขํ์ ์ฆ๊ฐ๊ฐ (โณx,โณy)์ ์๋์ขํ๋ก ์ ์
- ์์ฑ์ ์ ์ ์ ํ(Line Type), ๊ตต๊ธฐ(Width), ์์, ์ ๋ ๋ชจ์(Line Cap) ๋ฑ
๋ค์ค์ (Polyline)
- ์์์ (x1, y1)๋ถํฐ ๋ง์ง๋ง n๋ฒ ์งธ ์ (xn, yn)๊น์ง์ ์ ๋์ขํ๋ก ์ ์
- ๋๋ ์์์ (x1, y1)๊ณผ ๊ฐ ์ขํ์ ์ฆ๊ฐ๊ฐ๋ค (โณx1, โณy1)...(โณxn-1, โณyn-1)๋ก ์ ์
- ์ ์ ์์ฑ ์ด์ธ์ ์ถ๊ฐ๋ก ์ ์ด์(Line Join) ๋ฑ์ ์์ฑ
๐ DDA ์ ๊ทธ๋ฆฌ๊ธฐ ์๊ณ ๋ฆฌ์ฆ
์ ์ ์๋ ์ขํ๋ก๋ถํฐ ๋์คํฐ ์ถ๋ ฅ์ฅ์น๋ก ๋ณํํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๊ณ ๋ฆฌ์ฆ
DDA(Digital Differential Analyzer) ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ์
-
์ ์ ๊ณต์์ y = mx + c ์ ํํ๋ก ๊ณ์ฐ
-
0โคmโค1 ์ธ ๊ฒฝ์ฐ, x๋ฅผ 1์ฉ ์ฆ๊ฐ์ํค๋ฉด y๊ฐ์ m๋งํผ ์ฆ๊ฐ
-
m > 1 ์ธ ๊ฒฝ์ฐ, ๊ทธ ๋ฐ๋๋ก y๋ฅผ ๋งค๋ฒ 1์ฉ ์ฆ๊ฐ์ํค๋ฉด x๊ฐ์ด 1/m๋งํผ์ฉ ์ฆ๊ฐ
-
๊ธฐ์ธ๊ธฐ m์ด ์์์ธ ๊ฒฝ์ฐ, x ์ฆ๊ฐ์ ๋ฐ๋ผ y๊ฐ์ด ์ฆ๊ฐ๋์ ๊ฐ์
DDA ์ ๊ทธ๋ฆฌ๊ธฐ ์๊ณ ๋ฆฌ์ฆ
๊ธฐํ์ ๊ณต๊ฐ์์ ์ขํ (x,y)๋ก ์ ์
์์ฑ์ ํฌ๊ธฐ(Size), ๋ช ์(Intensity) ๋๋ ์์(Color), ๋ชจ์(Shape) ๋ฑ
๊ธฐํ์ ๊ณต๊ฐ
์ถ๋ ฅ์ฅ์น์ ๊ณต๊ฐ
์ ์ ์๋ ์ขํ๋ก๋ถํฐ ๋์คํฐ ์ถ๋ ฅ์ฅ์น๋ก ๋ณํํ๋ ๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ ์๊ณ ๋ฆฌ์ฆ
์ ์ ๊ณต์์ y = mx + c ์ ํํ๋ก ๊ณ์ฐ
0โคmโค1 ์ธ ๊ฒฝ์ฐ, x๋ฅผ 1์ฉ ์ฆ๊ฐ์ํค๋ฉด y๊ฐ์ m๋งํผ ์ฆ๊ฐ
m > 1 ์ธ ๊ฒฝ์ฐ, ๊ทธ ๋ฐ๋๋ก y๋ฅผ ๋งค๋ฒ 1์ฉ ์ฆ๊ฐ์ํค๋ฉด x๊ฐ์ด 1/m๋งํผ์ฉ ์ฆ๊ฐ
๊ธฐ์ธ๊ธฐ m์ด ์์์ธ ๊ฒฝ์ฐ, x ์ฆ๊ฐ์ ๋ฐ๋ผ y๊ฐ์ด ์ฆ๊ฐ๋์ ๊ฐ์
1) ์ด๊ธฐํ๋ฅผ ํ๋ค.
โณx = xb - xa , โณy = yb - ya ,
m = โณy / โณx
x1 = xa , y1 = ya
2) ๊ธฐ์ธ๊ธฐ์ m์ ๊ฐ์ ๋ฐ๋ผ ๋ค์๊ณ์ฐ์ ์ํํ๋ค.
2a) ๊ธฐ์ธ๊ธฐ |m|โค1์ธ ๊ฒฝ์ฐ,
๋งค๋ฒ k+1๋ฒ ์งธ ์ ์์ (1โคkโคฮx)
xk+1 = xk + 1 yk+1 = yk + m yk+1์ ๋์คํฐ ์ขํ = Round(yk+1)
2b) 2b) ๊ธฐ์ธ๊ธฐ |m|>1 ์ธ ๊ฒฝ์ฐ,
๋งค๋ฒ k+1๋ฒ ์งธ ์ ์์ (1โคkโคโณy)
yk+1 = yk + 1 xk+1 = xk + 1/m xk+1์ ๋์คํฐ ์ขํ = Round(xk+1)
DDA ์๊ณ ๋ฆฌ์ฆ์ ํน์ง
- ๊ณฑํ๊ธฐ๊ฐ ์์ด ์์์ (Floating-point) ๋ํ๊ธฐ ์ฐ์ฐ๋ง์ ๋ฐ๋ณต
- ๋งค๋ฒ ์ ์์ขํ๋ฅผ ๊ตฌํ ๋๋ง๋ค ์ค์ฐจ๊ฐ ์ถ์
๐ Bresenham ์ ๊ทธ๋ฆฌ๊ธฐ ์๊ณ ๋ฆฌ์ฆ
์์์ ๊ณ์ฐ ์์ด ์ ์์ ๋ํ๊ธฐ ์ฐ์ฐ๊ณผ ์ํํธ ์ฐ์ฐ๋ง์ผ๋ก ์ฒ๋ฆฌ
Bresenham ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ณธ ๊ฐ๋
-
0โคmโค1์ผ ๋, (xk, yk)์ ๋ค์ ์ ์
(xk+1, yk) ๋๋ (xk+1, yk+1) -
k+1๋ฒ์งธ ์ ์์์ ์ฐจ์ด๊ฐ์ผ๋ก ํ๋ณ์์ ๊ณ์ฐ
pk+1 = pk + 2(โณx - โณy)
๋๋, pk+1 = pk + 2โณy์ด๊ธฐ๊ฐ p1 = 2โณy - 2โณx
-
๋งค๋ฒ ํ๋ณ์ pk+1์ ๊ณ์ฐํ ๋ ์ ์ ๊ฐ์ธ
์์ C1 ๋๋ C2๋ฅผ ๋ํ๋ค. -
C1 = 2(โณy - โณx) ๋๋ C2 = 2โณy ์ ๊ณ์ฐ์ ์ฒ์์ ํ๋ฒ๋ง ํ๋ค.
Bresenham ์ ๊ทธ๋ฆฌ๊ธฐ ์๊ณ ๋ฆฌ์ฆ (๊ธฐ์ธ๊ธฐ 0 โค m โค 1 ๋ก ๊ฐ์ )
1) ์ด๊ธฐ๊ฐ์ ๊ตฌํ๋ค.
C1 = 2โณy , C2 = 2(โณy - โณx) , p1 = 2โณy - โณx
2) d1 - d2 ์ ํ๋ณ์ pk ๊ฐ์ ๋ฐ๋ผ ๋ค์ ์ ์ ์์น๋ฅผ ๊ตฌํ๋ค. (1โคkโคโณx)
- i) pk < 0 ์ธ ๊ฒฝ์ฐ
๋ค์ ํฝ์ ์ ์ (xk+1, yk) ์ด๋ฉฐ, pk+1 = pk + C1 ์ด๋ค - ii) pk โฅ 0 ์ธ ๊ฒฝ์ฐ
๋ค์ ํฝ์ ์ ์ (xk+1, yk+1) ์ด๊ณ , pk+1 = pk + C2 ์ด๋ค.
๐ 4.2 ์, ํ์ ๋ฐ ๊ธฐํ ๊ณก์
๐ ์ ๊ทธ๋ฆฌ๊ธฐ
๊ทน ์ขํ๊ณ(Polar Coordinate)๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ
x2 + y2 = r2 ์ผ ๋ x = r cosฮธ, y = r sinฮธ
(x-xc)2 + (y-yc)2 = r2 ์ผ ๋, x = xc + r cosฮธ, y = yc + r sinฮธ
- ๋งค๊ฐ๋ณ์ ฮธ์ ์ผ์ ๊ฐ๊ฒฉ์ผ๋ก ์์ฃผ ์์ ์ ์ ๊ตฌํ ํ ์ ๋ถ์ผ๋ก ์ฐ๊ฒฐ
- 90ยฐโฅ ฮธ โฅ 45ยฐ์ธ ๊ฒฝ์ฐ์๋ง ๊ตฌํ๊ณ , ๋๋จธ์ง๋ ์์ 8๋ฐฉํฅ ๋์นญ์ ์ด์ฉ
x2 + y2 = r2 ์ผ ๋ x = r cosฮธ, y = r sinฮธ
(x-xc)2 + (y-yc)2 = r2 ์ผ ๋, x = xc + r cosฮธ, y = yc + r sinฮธ
Bresenham ์ ๊ทธ๋ฆฌ๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ ๊ฐ๋
-
์ ๊ณฑ๊ทผ์ด๋ ์ผ๊ฐํจ์ ๋ฑ์ ๊ณ์ฐ์ด ์์ด ์ ์ ์ฐ์ฐ๋ง์ผ๋ก ์ฒ๋ฆฌ
-
ํ ํฝ์ ์ ๋ค์์ ๋ฐ๋์ ์ค๋ฅธ์ชฝ ๋๋ ์ค๋ฅธ์ชฝ ๋ฐ๋ก ์๋ ์
์ฆ, k๋ฒ ์งธ ์ (xk,yk)์ ๋ค์์ (xk + 1, yk) ๋๋ (xk + 1, yk - 1)
Bresenham ์ ๊ทธ๋ฆฌ๊ธฐ ์๊ณ ๋ฆฌ์ฆ (์ค์ฌ์ด xc, yc ์ด๊ณ ๋ฐ์ง๋ฆ์ด r ์ธ ๊ฒฝ์ฐ)
1) ์ด๊ธฐํ๋ฅผ ํ๋ค.
x1 = xc , y1 = yc + r , p1 = 3 - 2r ๋ก ๊ณ์ฐํ๋ค.
2) xk < yk ์ธ ๋์ ๋ค์ ๊ณ์ฐ์ ๋ฐ๋ณตํ๋ค.
k๋ฒ ์งธ ์ ์์,
a) pk < 0 ์ธ ๊ฒฝ์ฐ ๋ค์ ์ ์ (xk + 1, yk) ์ด๋ฉฐ
pk+1 = pk + 4 xk + 6 ์ผ๋ก ๊ณ์ฐํ๊ณ ,
b) pk โฅ 0 ์ธ ๊ฒฝ์ฐ ๋ค์ ์ ์ (xk + 1, yk - 1) ์ด๋ฉฐ
pk+1 = pk + 4 (xk-yk) + 10 ์ผ๋ก ๊ณ์ฐํ๋ค.
๐ ํ์ ๊ทธ๋ฆฌ๊ธฐ
๊ทน ์ขํ๊ณ ์ด์ฉ
(x - xc)2 / rx2 + (y - yc)2 / ry2 = 1์ผ ๋ x = xc + rx cos ฮธ, y = yc + ry sinฮธ
90ยฐโฅ ฮธ โฅ 0ยฐ์ ๋ํด ์ ๋นํ ๊ฐ๊ฒฉ์ ์ ๋ถ์ผ๋ก ์ฐ๊ฒฐ, ๋๋จธ์ง๋ 4๋ฐฉํฅ ๋์นญ์ผ๋ก ์ฒ๋ฆฌ
๐ ๊ธฐํ ๊ณก์ ๊ทธ๋ฆฌ๊ธฐ
ํจ์ y = f(x) ๋ก ํํ ๊ฐ๋ฅํ ๊ณก์
-
์ ๋นํ ๊ฐ๊ฒฉ์ x๊ฐ์ ํด๋นํ๋ ๊ณก์ ์์ ์ ์ ๊ตฌํ ํ ์ ๋ถ์ผ๋ก ์ฐ๊ฒฐ
-
์ผ๊ฐ(Sine) ํจ์, ์ง์(Exponential) ํจ์, ๋คํญ์(Polynomial) ํจ์, ์คํ๋ผ์ธ(Spline) ํจ์, ๋ฑ
๐ 4.3 ์์ญ ๋ฐ ๋ค๊ฐํ ์ฑ์ฐ๊ธฐ
๐ ์์ญ์ ํน์ฑ๊ณผ ์ฑ์ฐ๊ธฐ ๋ฐฉ์
์ด์ํ(Adjacent ๋๋ Connected) ํฝ์
๊ฐ์ ์ฐ๊ฒฐ ๋ฐฉ์
- 4๋ฐฉํฅ์ฐ๊ฒฐ(4-Connected) ๋ฐฉ์
- 8๋ฐฉํฅ์ฐ๊ฒฐ(8-Connected) ๋ฐฉ์
ex) ์) 4๋ฐฉํฅ ์ฐ๊ฒฐ๋ฐฉ์์ ๊ฒฝ์ฐ ์์ญ์ 2๊ฐ, 8๋ฐฉํฅ ์ฐ๊ฒฐ๋ฐฉ์์ ๊ฒฝ์ฐ ์์ญ์ 1๊ฐ
ex) ์) 4๋ฐฉํฅ ์ฐ๊ฒฐ๋ฐฉ์์ ๊ฒฝ์ฐ ์์ญ์ 2๊ฐ, 8๋ฐฉํฅ ์ฐ๊ฒฐ๋ฐฉ์์ ๊ฒฝ์ฐ ์์ญ์ 1๊ฐ
๋์คํฐ ์์ญ์ ๊ฒฝ๊ณ ํฝ์ ๊ณผ ๋ด๋ถ ํฝ์ ์ ์ฐ๊ฒฐ๋ฐฉ์์ ๋ค๋ฅด๊ฒ,
- ๊ฒฝ๊ณ 8๋ฐฉํฅ ์ฐ๊ฒฐ โ ๋ด๋ถ๋ ๋ฐ๋์ 4๋ฐฉํฅ ์ฐ๊ฒฐ ์ฑ์ฐ๊ธฐ
- ๊ฒฝ๊ณ 4๋ฐฉํฅ ์ฐ๊ฒฐ โ ์ผ๋ฐ์ ์ผ๋ก ๋ด๋ถ๋ 8๋ฐฉํฅ ์ฐ๊ฒฐ ์ฑ์ฐ๊ธฐ
์ผ๋ฐ์ ์ธ ๋์คํฐ ๋ฐฉ์์ ์ถ๋ ฅ์ฅ์น
- Bresenham ์ ๊ทธ๋ฆฌ๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ 8๋ฐฉํฅ์ฐ๊ฒฐ ๋ฐฉ์
- ์์ญ์ฑ์ฐ๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ ๋ด๋ถ ์์ญ์ 4๋ฐฉํฅ์ฐ๊ฒฐ ๋ฐฉ์์ผ๋ก ์ฑ์ฐ๊ธฐ
์๋์ฑ์ฐ๊ธฐ ๋ฐฉ์
- ๊ทธ๋ฆผ์ด ๋์คํฐ ๋ฒํผ์ ๊ทธ๋ ค์ง ํ ์ด๋ฏธ์ง์์ ์์ญ์ ์ฑ์ฐ๊ธฐ๋ฅผ ์คํ
- ์์ญ ๋ด๋ถ์ ํ ํฝ์ ์ด ์๋๋ก ์ฃผ์ด์ง๊ณ ์ด ํฝ์ ์์๋ถํฐ ์ฑ์๋๊ฐ๋ค
- ์ฃผ๋ก ํ์ธํ ์ํํธ์จ์ด๋ ๋ํ์ ์ด๋ฏธ์ง ์ฒ๋ฆฌ ํ๋ก๊ทธ๋จ์์ ์ฌ์ฉ
๋ค๊ฐํ ์ฃผ์ฌ๋ณํ ๋ฐฉ์
- ๋งค ์ฃผ์ฌ์ ๋ณ๋ก ๋ค๊ฐํ์ ๋ด๋ถ ๊ตฌ๊ฐ์ ํ๋จํ์ฌ ํด๋น ํฝ์ ์ ์น ํ๋ค.
- ์ฃผ์ฌ์ ์ฑ์ฐ๊ธฐ(Scanline Fill)๋ผ๊ณ ๋ ํ๋ค.
- ์ฃผ๋ก ๋ฒกํฐ๋ฐฉ์์ ๊ทธ๋ฆฌ๊ธฐ ์ํํธ์จ์ด์์ ์ฌ์ฉ
๐ ์๋์ฑ์ฐ๊ธฐ(Seed Fill) ๋ฐฉ์
๋ด๋ถ ์์ญ์ ๋ํ ํ๋จ ๋ฐ ์ฑ์ฐ๊ธฐ ๋ฐฉ์
- ๋ด๋ถ๋ก ์ ์๋(Interior-defined) ์์ญ ์ฑ์ฐ๊ธฐ => ๋ฒ๋์ฑ์ฐ๊ธฐ(Flood Fill)
- ๊ฒฝ๊ณ๋ก ์ ์๋(Boundary-defined) ์์ญ ์ฑ์ฐ๊ธฐ => ๊ฒฝ๊ณ์ฑ์ฐ๊ธฐ(Boundary Fill)
๋ฒ๋์ฑ์ฐ๊ธฐ(Flood Fill) ์๊ณ ๋ฆฌ์ฆ
๊ฒฝ๊ณ์ฑ์ฐ๊ธฐ(Boundary Fill) ์๊ณ ๋ฆฌ์ฆ
๐ ๋ค๊ฐํ ๋ด๋ถ์ ํ๋จ ๊ท์น
ํ์ง ๊ท์น(Even-Odd Rule)
์ฃผ์ฌ์ ๋ณ๋ก ์์ง๊ฐ ํ์ ๋ฒ์งธ ๊ต์ฐจํ๋ฉด ๋ด๋ถ๊ฐ, ์ง์ ๋ฒ์งธ ๊ต์ฐจํ๋ฉด ์ธ๋ถ๊ฐ์์๋๋ค๊ณ ํ๋จ
์ ๊ธฐํ์ ๊ท์น(Non-zero Winding Rule)
-
์ฃผ์ฌ์ ๋ณ๋ก ์๋์ชฝ ์์ง์ ๊ต์ฐจํ๋ฉด ์ ๊ธฐํ์๋ฅผ 1 ์ฆ๊ฐ, ์์ชฝ ๋ฐฉํฅ์ ์์ง์ ๊ต์ฐจํ๋ฉด 1 ๊ฐ์
-
์ด ๋ ์ ๊ธฐ ํ์๊ฐ 0๋ณด๋ค ํฐ ๊ตฌ๊ฐ์ ๋ค๊ฐํ์ ๋ด๋ถ์์ญ์ผ๋ก ํ๋จ
์) (a) ๊ต์ฐจํ์๊ฐ 1, 3์ธ ๋ถ๋ถ์ด ๋ด๋ถ
(b์) ์ ๊ธฐํ์๊ฐ 1์ธ ๋ถ๋ถ์ด ๋ด๋ถ => ๊ฐ์ด๋ฐ๊ฐ ๋น ๋ค๊ฐํ
(b์๋) ์ ๊ธฐํ์๊ฐ 1, 2, 1 ์ธ ๋ถ๋ถ์ด ๋ด๋ถ => ์ ์ฒด๊ฐ ๋ด๋ถ
๐ ๋ค๊ฐํ ์ฃผ์ฌ๋ณํ ๋ฐฉ์
Y-X ๋ค๊ฐํ ์ฃผ์ฌ์ ์๊ณ ๋ฆฌ์ฆ์ ๊ธฐ๋ณธ ๊ฐ๋
- ๋งค ์ฃผ์ฌ์ ์์ ๊ต์ฐจ๋๋ ์์ง๋ค์ ๋ชฉ๋ก์ ์ ์งํ๊ณ ๊ฐฑ์ ํ๊ธฐ ์ํ์ฌ,
ํ์ฑํ๋ ์์ง์ ๋ชฉ๋ก์ AEL(Active Edge List),
๋ค๊ฐํ์ ์ ์ฒด ์์ง ๋ชฉ๋ก์ EL(Edge List) - ์ฐ์ , ๋ค๊ฐํ์ ์ ์ฒด ์์ง๋ฅผ ์์์ ์ Y์ขํ๊ฐ ์์๋ก ์ ๋ ฌํ์ฌ EL์ ๊ตฌ์ฑ
- ๋งค ์ฃผ์ฌ์ ์์ ์๋ก ๊ต์ฐจํ๋ ์์ง๋ฅผ EL์์ ๊บผ๋ด์ด AEL๋ก ์ฎ๊ฒจ ๊ด๋ฆฌ
๊ทธ๋ฆฌ๊ธฐ๊ฐ ์๋ฃ๋ AEL ๋ด์ ์์ง๋ฅผ ์ฐพ์์ ์ ๊ฑฐ
EL์์ ํด๋น ์ฃผ์ฌ์ ๊ณผ ๊ต์ฐจ๋๋ ์๋ก์ด ์์ง๋ฅผ ์ฐพ์ผ๋ฉด AEL๋ก ์ด๋ - ํด๋น ์ฃผ์ฌ์ ๊ณผ ๊ฐ ์์ง์ ๊ต์ฐจ์ ์ 2๊ฐ์ฉ ์ง์ ์ง์ด ์ฌ์ด๋ฅผ ์ฑ์ด๋ค
ํ์ง ๊ท์น : X๊ฐ ์์ผ๋ก ์ ๋ ฌ ํ ๋จ์ํ ์์๋๋ก ์ง์ ๋ง๋ค์ด ์ฑ์ฐ๊ธฐ
์ ๊ธฐํ์ ๊ท์น : X ์ ๋ ฌ ํ ์๋์ชฝ ๋ฐฉํฅ๊ณผ ์์ชฝ ๋ฐฉํฅ์ ๊ต์ฐจ์ ์ด ์ง์์ด๋ฃจ์ด ์ฑ์ฐ๊ธฐ - AEL๊ณผ EL ๊ฐ๊ฐ์ ์ฒ๋ฆฌํด์ผํ ์์ง๊ฐ ์์ผ๋ฉด ์ข ๋ฃ
์๊ณ ๋ฆฌ์ฆ์ ์
Y-X ๋ค๊ฐํ ์ฃผ์ฌ์ ์๊ณ ๋ฆฌ์ฆ์ ํน์ง
- Y-X ์๊ณ ๋ฆฌ์ฆ : Y๊ฐ ์์๋ก ์ ์ฒด ์์ง ์ ๋ ฌ, ๊ต์ฐจ์ ์ X์ขํ๊ฐ ์์๋ก ์ ๋ ฌ
- ํจ์จ์ฑ : ์์ง์ ๋ชฉ๋ก์ ๋ํ ๋ถ๋ถ์ ์ธ ์ผ๊ด์ฑ(Coherence)์ผ๋ก ๋ฐ์
Y-X ๋ค๊ฐํ ์ฃผ์ฌ์ ์๊ณ ๋ฆฌ์ฆ
1) ์ด๊ธฐํ๋ฅผ ํ๋ค.
๊ฐ ์์ง๋ค์ Y์ขํ์ ์ต์๊ฐ ์์๋ก ์ ๋ ฌํ์ฌ Edge List(EL)๋ฅผ ๊ตฌ์ฑํ๋ค.
2) ๋งค ์ฃผ์ฌ์ yk์์ ๋ค์์ ์ํํ๋ค.
2a) AEL์ ๊ฐฑ์ ํ๋ค.
AEL์์ yb < yk ์ธ ์์ง๋ฅผ ์ญ์ ํ๊ณ , // ์๋ฃ๋ ์์ง ์ญ์
EL์์ ya = yk ์ธ ์์ง๋ฅผ AEL๋ก ์ด๋ํ๋ค. // ์๋ก์ด ์์ง ์ฝ์
๋จ, AEL ๊ณผ EL์ ๋ ์ด์์ ์์ง๊ฐ ์์ผ๋ฉด ์ข ๋ฃํ๋ค.
2b) AEL์์ ๊ฐ ์์ง์ ๊ต์ฐจ์ ์ ๊ณ์ฐํ๋ค.
2c) ๊ต์ฐจ์ x๊ฐ์ ์ ๋ ฌํ ํ ๊ฐ ์์ ๊ฒฐ์ ํ์ฌ ๊ทธ ์ฌ์ด๋ฅผ ์ฑ์ด๋ค.
๐ 4.4 ๋ฌธ์์ ํํ
๐ ํฐํธ์ ์ข
๋ฅ
๋์คํฐ ํฐํธ(Raster Font ๋๋ Bitmap Font)
- ๊ธ์ ํฌ๊ธฐ์ ํด๋นํ๋ ์ฌ๊ฐํ ๊ทธ๋ฆฌ๋์ ํฝ์
์ 1๊ณผ 0์ผ๋ก ํํ
- ๋ฉ๋ชจ๋ฆฌ ๋ด์์ ๋นํธ๋งต์ ๋ํ ์ฐ์ฐ์ผ๋ก ์ฒ๋ฆฌํ๋ฏ๋ก ์ถ๋ ฅ ์๋๊ฐ ๋งค์ฐ ๋น ๋ฅด๋ค
- ์ ์์ ์ฉ์ดํ๋ ํ๋ํ๋ฉด ๊ณ๋จํ์(Aliasing)
- ๊ธ์์ ํ๋, ํ์ , ๋ฐ๋ฆผ ๋ฑ ๊ธฐํ๋ณํ์ ๋งค์ฐ ์ด๋ ค์ฐ๋ฉฐ ๋ณํ์ ์ถ๋ ฅ ํ์ง ์ ํ
๋ฒกํฐ ํฐํธ(Vector Font ๋๋ Outline Font)
- ๊ธ์์ ์ค๊ณฝ์ ์ ์ฌ๋ฌ ๋ถ๋ถ์ผ๋ก ๋๋์ด ์ง์ , ์ํธ, ๊ณก์ ๋ฑ์ผ๋ก ํํํ๊ณ , ์ด๋ค์ ๋ํ ์ ์ด์ ์ ์ ์ฅ
- MS ์๋์ฐ์ TrueType ํฐํธ๋ 2์ฐจ B-์คํ๋ผ์ธ(B-Spline) ๊ณก์ ์ ์ฌ์ฉ
- PostScript์ Type1 ํฐํธ๋ 3์ฐจ ๋ฒ ์ง์ด(Bezier) ๊ณก์ ์ ์ฌ์ฉ
๋ฒกํฐ ํฐํธ์ ์ฒ๋ฆฌ๊ณผ์ :
1) ์ ์ด์ ์ ์ขํ๋ค์ ๋ํด ์ถ์ํ๊ฑฐ๋ ํ์ ํ๋ ๋ฑ ๊ธฐํ๋ณํ์ ์ํ
2) ์ค๊ณฝ์ ์ ๊ณก์ ๋ถ๋ถ์ ์ ์กฐ๊ฐ์ผ๋ก ๋๋์ด ๋ค๊ฐํ ํํ๋ก ํํ
3) ๋ค๊ฐํ ์ฃผ์ฌ์ ์๊ณ ๋ฆฌ์ฆ์ ์ด์ฉํ์ฌ ๊ธ์์ ๋ด๋ถ์์ญ ์ฑ์ฐ๊ธฐ๋ฅผ ์ํ
๋ฒกํฐ ํฐํธ์ ํน์ง
- ํ๋ ๋๋ ์ถ์๋ฅผ ํ์ฌ๋ ์ถ๋ ฅ ํ์ง์ด ๋์ผํ๊ฒ ์ ์ง
- ํ์ ๋ฑ์ ๊ธฐํ๋ณํ์ด ์ฉ์ด, ๋จ, ๊ธฐํ๋ณํ์ ์ํ ๊ณ์ฐ ์๊ฐ ์ฆ๊ฐ
๐ ๋ฌธ์์ ํ ์คํธ์ ์์ฑ
๋ฌธ์(Character)์ ์ฃผ์ ์์ฑ
- ํฐํธ, ์์, ํฌ๊ธฐ (ํญ๊ณผ ๋์ด), ์คํ์ผ (๊ตต์์ฒด, ์ดํค๋ฆญ, ๋ฐ์ค ๋ฑ), ...
ํ ์คํธ(Text ๋๋ String)์ ์์ฑ
- ์ธ์ฐ๊ธฐ ๋ฐฉํฅ( Orientation) : Character Up ๋ฒกํฐ๋ก ํํ
- ์ฐ๊ธฐ ๋ฐฉํฅ(Direction) : Text Path Direction์ผ๋ก ํํ
- ์ ๋ ฌ(Alignment), ํ๊ฐ๊ฒฉ, ๋ฌธ์๊ฐ๊ฒฉ ๋ฑ
๐ 4.5 ์คํฐ์จ๋ฆฌ์ด์ฑ
๐ ๋์คํฐ ์ถ๋ ฅ์ ๋ฌธ์ ์
์จ๋ฆฌ์ด์ฑ(Aliasing)
- ๋์คํฐ ์ถ๋ ฅ์ฅ์น์์ ๋์งํธํ ๊ณผ์ ์ ์ํ๋ง ์ค์ฐจ๋ก ์ธํ ์๊ณกํ์
- ์ฌ์ ์ ๊ตต๊ธฐ๊ฐ ์ํ์ ์ ๊ตต๊ธฐ์ ๋ค๋ฅด๊ฒ ๋ณด์ด๋ ํ์
- ์ฌ์ ์ด๋ ๊ณก์ ๋ถ๋ถ์ ๋ํ๋๋ ๊ณ๋จํ์
์คํฐ์จ๋ฆฌ์ด์ฑ(Antialiasing)
- ์ปฌ๋ฌ ๋๋ ํ์์กฐ(Gray) ์ถ๋ ฅ ์ฅ์น์์ ๊ฒฝ๊ณ๊ฐ ๋ถ๋๋ฝ๊ฒ ๋ณด์ด๋๋ก ํ๋ ๊ธฐ๋ฒ
- ๋ฌผ์ฒด์ ๊ฒฝ๊ณ ํฝ์
์์ ๋ฌผ์ฒด์ ๋ฐฐ๊ฒฝ์ ์์์ ํผํฉํด์ ๊ทธ๋ฆฐ๋ค.
- ์ ๊ทธ๋ฆฌ๊ธฐ, ๋ค๊ฐํ ์ฑ์ฐ๊ธฐ, ๋ฌธ์ ์์ฑ ๋ฑ์ ์ ์ฉ์ด ๊ฐ๋ฅ
๐ ์คํฐ์จ๋ฆฌ์ด์ฑ ๊ธฐ๋ฒ
์ํผ์ํ๋ง(Super Sampling) ๊ธฐ๋ฒ
- ํ๋์ ํฝ์ ์์ญ์ ์ฌ๋ฌ ๊ฐ๋ก ๋ถํ ํ๋ ์ํผ์ํ๋ง ๊ณผ์ ์ ์ ์ฉํ๊ณ , ์ด๋ฅผ ์๋์ ํด์๋๋ก ํ์ํ ๋ ํฝ์ ์ ๋ช ์ ๊ฐ์ ๊ณ์ฐ
- ํฝ์
์ ์์ญ์ ํฌํจ๋๋ ๊ณ ํด์๋ ํฝ์
์ ๊ฐ์์ ๋น๋กํ์ฌ ๋ช
์ ๊ฐ์ ๊ณ์ฐ
์์ญ ์ํ๋ง(Area Sampling) ๊ธฐ๋ฒ
- Bresenham ์ ๊ทธ๋ฆฌ๊ธฐ ์๊ณ ๋ฆฌ์ฆ์ ์์ฉํ์ฌ Pitteway์ Watkinson์ด ์ ์
- ์ผ๋ง๋งํผ ๋ค๊ฐํ์ ๋ด๋ถ์์ญ์ ํฌํจ๋๋์ง ํฌํจ๋ ๋ฉด์ ๋น์จ์ ๊ณ์ฐ
y1 = m (xk - 0.5) + c , y2 = m (xk + 0.5) + c
๋ฉด์ = { (y1 - (yk - 0.5)) + (y2 - (yk - 0.5)) } / 2
= m xk + c - yk + 0.5
๐ 4.6 ์์์ ํํ
๐ RGB ์ปฌ๋ฌ ํํ๋ฐฉ์
RGB ์ปฌ๋ฌ ํํ๋ฐฉ์
- ํ๋ ์๋ฒํผ ๋ด์ Rํ๋ฉด, Gํ๋ฉด, Bํ๋ฉด์ ๊ฐ ํฝ์
์ ํด๋น ๊ฐ์ด ์ ์ฅ
ํํ ๊ฐ๋ฅํ ์์์ ๊ฐ์๋
- ํฝ์
์ ๊น์ด(Pixel Depth)์ ํ๋ ์๋ฒํผ์ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ์ ์ํด ๊ฒฐ์
- ํฝ์
์ ๊น์ด๊ฐ k ๋นํธ์ด๋ฉด 2k ๊ฐ์ง์ ์์ ํํ์ด ๊ฐ๋ฅ
ํฝ์ ์ ๊น์ด์ ๋ฐ๋ผ ํํ์ด ๊ฐ๋ฅํ ์์์ ๊ฐ์
์ํ์ฑ๋/์ํํ๋ฉด(Alpha Plane)
- RGBA ์ปฌ๋ฌ ํํ๋ฐฉ์
- ์ฃผ๋ก ํฌ๋ช ๋ฐ ๋ถํฌ๋ช , ์๊ฐํจ๊ณผ ๋ฑ์ ํํํ๊ฑฐ๋, ์๋ฉด์ ๊ฑฐ์ ์ฌ์ฉ
ํ๋ ์ ๋ฒํผ(Frame Buffer)์ ํฌ๊ธฐ
- ํ์ํ ๋ฉ๋ชจ๋ฆฌ ํฌ๊ธฐ๋ ํ๋ฉด์ ํด์๋์ ํฝ์ ๊น์ด์ ๋น๋ก
์) 1024 x 768 ํด์๋์ 32๋นํธ ๊น์ด(4๋ฐ์ดํธ)์ธ ๊ฒฝ์ฐ,
1024 x 768 x 4 = 3M ๋ฐ์ดํธ๊ฐ ํ์
1280 x 1024 ํด์๋์ 32๋นํธ ๊น์ด(4๋ฐ์ดํธ)์ธ ๊ฒฝ์ฐ,
1280 x 1024 x 4 = 5M ๋ฐ์ดํธ๊ฐ ํ์
๐ ์ธ๋ฑ์ค์ปฌ๋ฌ ํํ๋ฐฉ์
์ธ๋ฑ์ค์ปฌ๋ฌ ๋ฐฉ์
- ์ฌ์ฉ ๊ฐ๋ฅํ ์์์ ์๊ฐ ์ ํ๋ ๋ ์ฌ์ฉ์๊ฐ ์์์ ์ ํํ์ฌ ์ฌ์ฉ
- ๋น์ทํ ์์ ์ค์์ ์ ํํ๋ฉด ์๋ ๊ทธ๋ฆผ์ ํจ์ฌ ๊ฐ๊น์ด ์์์ผ๋ก ํํ ๊ฐ๋ฅ
์์๋ณด๊ธฐํ(CLUT: Color Look-Up Table)
- ์์ ํ๋ ํธ์ ๊ฐ๋ ์ผ๋ก ์ฌ์ฉํ๋ ค๋ ์์์ ์ ์ฅํ๋ ํ์ ์ญํ
- ํ๋ ์๋ฒํผ์๋ ์์์ ๊ฐ์ด ์๋๋ผ ์์๋ณด๊ธฐํ์ ๋ฒํธ(Index)๋ฅผ ๊ธฐ๋ก
- ํ๋ ํธ๋ฅผ ๋ฐ๊พธ๋ฉด ํ๋ ์ ๋ฒํผ ๋ด ๊ทธ๋ฆผ์ ์์๋ ๋ฐ๋ผ์ ๋ฐ๋๋ค.
์์๋ณด๊ธฐํ์ ํฌ๊ธฐ์ ์ฌ์ฉ ๊ฐ๋ฅํ ์์์ ๊ฐ์
- ์์๋ณด๊ธฐํ์ ํฌ๊ธฐ๊ฐ 256์ด๊ณ ๊ฐ RGB ์์์ ํฌ๊ธฐ๊ฐ 8๋นํธ ์ธ ๊ฒฝ์ฐ, ํ๋ ์๋ฒํผ์ ๊น์ด๋ 8๋นํธ์ด๋ฉฐ ํํ ๊ฐ๋ฅํ ์์ 224๊ฐ(1600๋ง๊ฐ) ์ค ๋์์ 256๊ฐ๊ฐ ์ฌ์ฉ ๊ฐ๋ฅ
- ์ด ๋ ๊ฐ ํฝ์ ์๋ 24๋นํธ ๋์ ์ 8๋นํธ๋ง ์ฌ์ฉํ์์ผ๋ฏ๋ก ํ๋ ์๋ฒํผ์ ํ์ํ ๋ฉ๋ชจ๋ฆฌ๋ 1/3๋ก ์ถ์
Author And Source
์ด ๋ฌธ์ ์ ๊ดํ์ฌ(๐ผcomputer_graphics/ chap 04.2์ฐจ์ ๊ทธ๋ํฝ์ค์ ๊ธฐ๋ณธ ์์), ์ฐ๋ฆฌ๋ ์ด๊ณณ์์ ๋ ๋ง์ ์๋ฃ๋ฅผ ๋ฐ๊ฒฌํ๊ณ ๋งํฌ๋ฅผ ํด๋ฆญํ์ฌ ๋ณด์๋ค https://velog.io/@soltrawberry0707/computergraphics-chap-04.2์ฐจ์-๊ทธ๋ํฝ์ค์-๊ธฐ๋ณธ-์์์ ์ ๊ท์: ์์์ ์ ๋ณด๊ฐ ์์์ URL์ ํฌํจ๋์ด ์์ผ๋ฉฐ ์ ์๊ถ์ ์์์ ์์ ์ ๋๋ค.
์ฐ์ํ ๊ฐ๋ฐ์ ์ฝํ ์ธ ๋ฐ๊ฒฌ์ ์ ๋ (Collection and Share based on the CC Protocol.)
์ข์ ์นํ์ด์ง ์ฆ๊ฒจ์ฐพ๊ธฐ
๊ฐ๋ฐ์ ์ฐ์ ์ฌ์ดํธ ์์ง
๊ฐ๋ฐ์๊ฐ ์์์ผ ํ ํ์ ์ฌ์ดํธ 100์ ์ถ์ฒ ์ฐ๋ฆฌ๋ ๋น์ ์ ์ํด 100๊ฐ์ ์์ฃผ ์ฌ์ฉํ๋ ๊ฐ๋ฐ์ ํ์ต ์ฌ์ดํธ๋ฅผ ์ ๋ฆฌํ์ต๋๋ค