Transcript
Page 1: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

1

Растроваяграфика

URL: http://www.school30.spb.ru/cgsg/cgc/

E-mail: [email protected]

Page 2: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

2Примитивы

• Точки• Линии• Прямоугольники (со сторонами,

параллельными границам экрана)• Многоугольники• Шрифты• Заливка областей• Плоское отсечение

Page 3: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

3Line

x

y

(x1,y1)

(x2,y2)

Page 4: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

4Line: Digital Differential Analyzer (DDA)

(x,y) x2-x1

y2-y1

slope

Page 5: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

5Line: Алгоритм Брезенхема (метод центральной точки)

x

y

(x1,y1)

(x2,y2)

(x,y)

⎪⎩

⎪⎨

<

=

>

⋅−⋅−⋅−⋅=

=⋅−⋅−⋅−⋅

=−⋅−−−⋅−

−=

0),(0),(0),(

)11(),(0)11(

0)12()1()12()1(121

121

yxfyxfyxf

dxydyxydxxdyyxfdxydyxydxxdy

xxyyyyxxyyyy

xxxx

точка (x,y) «ниже» прямой

точка (x,y) «лежит» на прямой

точка (x,y) «выше» прямой

Page 6: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

6Line: Алгоритм Брезенхема (метод центральной точки)

P(x,y)

M(x+1,y+1/2)

f(x,y) Подставляем точку M в функцию f:• если f(M) > 0 выбираем точку NЕ• если f(M) <= 0 выбираем точку Е

E

NE

Page 7: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

7Line: Алгоритм Брезенхема (метод центральной точки)

P(x,y)

ME(x+2,y+1/2)

f(x,y)Подставляем точку M в функцию f:• если f(M) > 0 выбираем точку NЕ• если f(M) <= 0 выбираем точку Е

Изменения значения f(M) при переходек новым точкам (E или NE):

E

NEMNE(x+2,y+3/2)

dxdyMfCdxydxdyxdy

CydxxdyyxfMf

dyMfCdxydxdyxdy

CydxxdyyxfMf

Cdxydxdyxdy

CydxxdyyxfMf

NE

E

−+=−⋅−⋅−⋅+⋅

=−+⋅−+⋅=++=

+=−−⋅−⋅+⋅

=−+⋅−+⋅=++=

−−⋅−+⋅

=−+⋅−+⋅=++=

)(232

)23()2()2

3,2()(

)(22

)21()2()2

1,2()(2

)21()1()2

1,1()(

M

Page 8: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

8Line: Алгоритм Брезенхема (метод центральной точки)

P1(x1,y1)

M0(x+1,y+1/2)

f(x,y)

Известны приращения f.

Найдем первоначальное значение для точки (x1,y1)

2

)11()211()11(

)211,11()( 0

dxdy

dxydyxydxxdy

yxfMf

=⋅−⋅−+⋅−+⋅

=++=

Page 9: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

9Line: Алгоритм Брезенхема (метод центральной точки)

Сохранились вещественные числа.

Сделаем замену: 2f = e

Тогда помеченные строки изменяться на:e = 2 * dy - dx;

e > 0

e = e + 2 * dy - 2 *dx;

e = e + 2 * dy

и e – целое число.

Page 10: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

10Line: Алгоритм Брезенхема (метод центральной точки)

Page 11: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

11Line: Алгоритм с использованием Fixed Point (DDA)

Fixed Point – вещественные числа с фиксированной точкой.

Рассмотрим 4-байтное целое:

2b целая часть 2b дробная часть

Точность 1/65536

Если x и y fixed point, то

• сложение не изменяется (x+y)

• вычитание не изменяется (x-y)

• целая часть – «двоичный сдвиг» вправо на 16 бит (x >> 16)

• из целого: x = a << 16

Page 12: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

12Circle

x

y

R

Page 13: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

13Circle: Алгоритм Брезенхема (метод центральной точки)

x

y

(0,R) x<=y

222),( Ryxyxf −+=

P(x,y)

M(x+1,y-1/2)

f(x,y)

SE

E

⎪⎩

⎪⎨

<

=

>

0),(0),(0),(

yxfyxfyxf точка (x,y) вне круга

точка (x,y) на окружности

точка (x,y) внутри круга

Подставляем точку M в функцию f:• если f(M) >= 0 выбираем точку SЕ• если f(M) < 0 выбираем точку Е

Page 14: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

14Circle: Алгоритм Брезенхема (метод центральной точки)

P(x,y)

M

E

SE MSE

MEf(x,y)

Изменения значения f(M) при переходек новым точкам (E или SE):

522)(49344

)23()2()2

3,2()(

32)(4144

)21()2()2

1,2()(4112

)21()1()2

1,1()(

222

222

222

222

222

222

+−+=−+−+++

=−−++=−+=

++=−+−+++

=−−++=−+=

−+−+++

=−−++=−+=

yxMfRyyxx

RyxyxfMf

xMfRyyxx

RyxyxfMf

Ryyxx

RyxyxfMf

NE

E

Page 15: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

15Circle: Алгоритм Брезенхема (метод центральной точки)

P(0,R)

M0(1,R-1/2)

f(x,y)

SE

E

Определили приращения f.Найдем первоначальное значение для точки (x1,y1)

RRRR

RRRfMf

−=−+−+

=−−+=−=

45

411

)21(1)2

1,1()(22

2220

Все приращения - целые. Сравнение f с 0 строгое: ‘<‘.Поэтому из первоначального f можно вычесть 1/4..

Page 16: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

16Circle: Алгоритм Брезенхема (метод центральной точки)

Дополнительная оптимизация:

Просчитаем изменение приращений по направлениям E и SE(incrE=2*x+3 и incrSE=2*(x-y)+5) для избавления от доступа к переменным.

•Если выбрана точка E, то ‘x’ увеличивается на 1 и:

incrE=incrE+2 и incrSE=incrSE+2

•Если выбрана точка SE, то ‘x’ увеличивается на 1, ‘y’ уменьшается на 1 и:incrE=incrE+2 и incrSE=incrSE+4

Изначальные значения:

incrE=3 и incrSE=5-2*R

Page 17: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

17Circle: Алгоритм Брезенхема (метод центральной точки)

Page 18: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

18Polygon

Page 19: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

19Flood Fill

Page 20: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

20Flood Fill

Page 21: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

21Text

ШрифтыРастровые Векторные Контурные

Page 22: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

22Text

0x3C

0x46

0x86

0x86

0x86

0xFE

0x86

0x00

Справа показана битовая кодировка каждой строки

(в шестнадцатеричном виде)

Page 23: Компьютерная графика, осень 2011: Растровая графика

RasterRaster

Галинский В.А.Физико-математический лицей № 30

Computer Graphics Support Group

23

• Упражнение– Рекомендуется реализовать растровые алгоритмы

с помощью программы из первого упражнения. Растровые шрифты необходимо загружать из файла.