20110919 computer graphics_galinsky_lecture02_raster

23
1 Raste Raste r Галинский В.А. Физико-математический лицей № 30 Computer Graphics Support Group Растровая графика URL: http://www.school30.spb.ru/cgsg/cgc/ E-mail: [email protected]

Upload: computer-science-club

Post on 20-Jun-2015

598 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: 20110919 computer graphics_galinsky_lecture02_raster

1

RasterRaster

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

Computer Graphics Support Group

Растровая

графика

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

E-mail: [email protected]

Page 2: 20110919 computer graphics_galinsky_lecture02_raster

2

RasterRaster

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

Computer Graphics Support Group

Примитивы

• Точки

• Линии

• Прямоугольники (со сторонами, параллельными границам экрана)

• Многоугольники

• Шрифты

• Заливка областей

• Плоское отсечение

Page 3: 20110919 computer graphics_galinsky_lecture02_raster

3

RasterRaster

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

Computer Graphics Support Group

Line

x

y

(x1,y1)

(x2,y2)

Page 4: 20110919 computer graphics_galinsky_lecture02_raster

4

RasterRaster

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

Computer Graphics Support Group

Line: Digital Differential Analyzer (DDA)

(x,y) x2-x1

y2-y1

slope

Page 5: 20110919 computer graphics_galinsky_lecture02_raster

5

RasterRaster

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

Computer Graphics Support Group

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

x

y

(x1,y1)

(x2,y2)

(x,y)

0),(

0),(

0),(

)11(),(

0)11(

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

12

1

12

1

yxf

yxf

yxf

dxydyxydxxdyyxf

dxydyxydxxdy

xxyyyyxx

yy

yy

xx

xx

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

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

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

Page 6: 20110919 computer graphics_galinsky_lecture02_raster

6

RasterRaster

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

Computer Graphics Support Group

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

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: 20110919 computer graphics_galinsky_lecture02_raster

7

RasterRaster

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

Computer Graphics Support Group

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

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: 20110919 computer graphics_galinsky_lecture02_raster

8

RasterRaster

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

Computer Graphics Support Group

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

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: 20110919 computer graphics_galinsky_lecture02_raster

9

RasterRaster

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

Computer Graphics Support Group

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

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

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

Тогда помеченные строки изменяться на:

e = 2 * dy - dx;

e > 0

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

e = e + 2 * dy

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

Page 10: 20110919 computer graphics_galinsky_lecture02_raster

10

RasterRaster

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

Computer Graphics Support Group

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

Page 11: 20110919 computer graphics_galinsky_lecture02_raster

11

RasterRaster

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

Computer Graphics Support Group

Line: Алгоритм с использованием 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: 20110919 computer graphics_galinsky_lecture02_raster

12

RasterRaster

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

Computer Graphics Support Group

Circle

x

y

R

Page 13: 20110919 computer graphics_galinsky_lecture02_raster

13

RasterRaster

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

Computer Graphics Support Group

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

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),(

yxf

yxf

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

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

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

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

Page 14: 20110919 computer graphics_galinsky_lecture02_raster

14

RasterRaster

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

Computer Graphics Support Group

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

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: 20110919 computer graphics_galinsky_lecture02_raster

15

RasterRaster

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

Computer Graphics Support Group

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

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: 20110919 computer graphics_galinsky_lecture02_raster

16

RasterRaster

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

Computer Graphics Support Group

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

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

Просчитаем изменение приращений по направлениям 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: 20110919 computer graphics_galinsky_lecture02_raster

17

RasterRaster

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

Computer Graphics Support Group

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

Page 18: 20110919 computer graphics_galinsky_lecture02_raster

18

RasterRaster

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

Computer Graphics Support Group

Polygon

Page 19: 20110919 computer graphics_galinsky_lecture02_raster

19

RasterRaster

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

Computer Graphics Support Group

Flood Fill

Page 20: 20110919 computer graphics_galinsky_lecture02_raster

20

RasterRaster

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

Computer Graphics Support Group

Flood Fill

Page 21: 20110919 computer graphics_galinsky_lecture02_raster

21

RasterRaster

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

Computer Graphics Support Group

Text

Шрифты

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

Page 22: 20110919 computer graphics_galinsky_lecture02_raster

22

RasterRaster

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

Computer Graphics Support Group

Text

0x3C

0x46

0x86

0x86

0x86

0xFE

0x86

0x00

Page 23: 20110919 computer graphics_galinsky_lecture02_raster

23

RasterRaster

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

Computer Graphics Support Group

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

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