๐Ÿ“ผ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 ์„  ๊ทธ๋ฆฌ๊ธฐ ์•Œ๊ณ ๋ฆฌ์ฆ˜

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๋ฐฉํ–ฅ ๋Œ€์นญ์„ ์ด์šฉ

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๊ฐœ


๋ž˜์Šคํ„ฐ ์˜์—ญ์˜ ๊ฒฝ๊ณ„ ํ”ฝ์…€๊ณผ ๋‚ด๋ถ€ ํ”ฝ์…€์€ ์—ฐ๊ฒฐ๋ฐฉ์‹์„ ๋‹ค๋ฅด๊ฒŒ,

  • ๊ฒฝ๊ณ„ 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๋กœ ์ถ•์†Œ


์ข‹์€ ์›นํŽ˜์ด์ง€ ์ฆ๊ฒจ์ฐพ๊ธฐ