Компьютерная графика Лекция вторая

28
1 Компьютерная графика Лекция вторая Тема Растеризация, линия, окружность Подготовлено А.А.Пименовым [email protected] Для 4 курса мат.-мех. СПбГУ в 2006

Upload: nigel-lang

Post on 31-Dec-2015

84 views

Category:

Documents


4 download

DESCRIPTION

Компьютерная графика Лекция вторая. Тема Растеризация, линия, окружность. Подготовлено А.А.Пименовым [email protected] Для 4 курса мат.-мех. СПбГУ в 2006. Растр. Средства визуализации Дисплей Типы дисплеев Принтер Графопостроитель CNC (Computer Numerical Control) ?. Буфер кадра. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Компьютерная графика Лекция вторая

1

Компьютерная графикаЛекция вторая

ТемаРастеризация, линия, окружность

Подготовлено А.А.Пименовым [email protected]Для 4 курса мат.-мех. СПбГУ в 2006

Page 2: Компьютерная графика Лекция вторая

2

Растр

•Средства визуализации•Дисплей

•Типы дисплеев•Принтер•Графопостроитель•CNC (Computer Numerical Control) ?

Page 3: Компьютерная графика Лекция вторая

3

Буфер кадра

• Местоположение буфера кадра– Основная память– Видео-память

• Представление пикселя– Битовое предствавление

• 565• 555• 24bit

– Битовые плоскости

• Учет обратного хода луча • Interlacing!!!• Замечание про систему координат

Page 4: Компьютерная графика Лекция вторая

4

Двойная буферизация

• Промаргиваниe (flicker)

Page 5: Компьютерная графика Лекция вторая

5

Растеризация линии

• Связность линии– 4-связность |x1-x2| + |y1-y2| <= 1 – 8-связность |x1-x2| <=1 или |y1-y2| <= 1

• Постановка задачи линии должны быть– Точные (нужные точки начала и конца)– Прямые – Равномерные (одинаковая яркость вне

зависимости от наклона)– Быстрые

Page 6: Компьютерная графика Лекция вторая

6

Размышление о границах пикселя• Свертка• Фильтрация и aliasing.• Варианты

– Круглый• с захватом• без захвата

– Квадрантный• ромбический

Page 7: Компьютерная графика Лекция вторая

7

Aliasing

Page 8: Компьютерная графика Лекция вторая

8

Представление линии (отрезка)

• A(x1,y1) B(x2,y2)–L = A + (B-A)t, t = 0..1–y = y1 + (y2-y1)/(x2-x1) * (x - x1)–y = kx + b, k = (y2-y1)/(x2-x1), b =

y1 – k * x1

Page 9: Компьютерная графика Лекция вторая

9

Свдение задачи к частному случаю

• Ограничения • Рисуем отрезок в первой восьмушке.• Для удобства перевернем систему координат

• Подходы• Деление пополам• На векторном дисплее• Аналитически

Page 10: Компьютерная графика Лекция вторая

10

Наивный алгоритм

void drawLine ( int xa, int ya, int xb, int yb, int color ){

double k = ((double)(yb - ya))/(xb - xa);double b = ya - k*xa;

for ( int x = xa; x <= xb; x++ )putpixel ( x, (int)( k*x +b ), color );

}

Page 11: Компьютерная графика Лекция вторая

11

Рекурентрый алгоритм

void drawLine ( int xa, int ya, int xb, int yb, int color ){

double k = ((double)(yb - ya))/(xb - xa);double b = ya - k*xa;double y = ya;

for ( int x = xa; x <= xb; x++, y += k )putpixel ( x, (int) y, color );

}

Page 12: Компьютерная графика Лекция вторая

12

Алгоритм с коррекцией (избавляемся от округления)

Page 13: Компьютерная графика Лекция вторая

13

Цифровой дифференциальный анализаторvoid drawLine ( int xa, int ya, int xb, int yb, int color ){

double k = ((double)(yb - ya))/(xb - xa);double d = 2*k - 1;int y = ya;

putpixel ( xa, ya, color );

for ( int x = xa + 1; x <= xb; x++ ){

if ( d > 0 ){

d += 2*k - 2;y++;

}else

d += 2*k;

putpixel ( x, y, color );}

}

Page 14: Компьютерная графика Лекция вторая

14

Целочисленный алгоритм Брезенхема void drawLine ( int xa, int ya, int xb, int yb, int color ){

int dx = xb - xa;int dy = yb - ya;int d1 = dy << 1;int d2 = ( dy - dx ) << 1;int d = d1 - dx;

putpixel ( xa, ya, color );

for ( int x = xa; x <= xb; x++ ){

if ( d > 0 ){

d += d2;y ++;

}else

d += d1;

putpixel ( x, y, color );}

}

Page 15: Компьютерная графика Лекция вторая

15

Алгоритм для 4х связаной линии

void drawLine4 ( int x1, int y1, int x2, int y2, int color ){

int dx = x2 - x1;int dy = y2 - y1;int d = 0;//( dy << 1 ) - dx;int d1 = dy << 1;int d2 = - ( dx << 1 );

putpixel ( x1, y1, color );

for ( int x = x1, y = y1, i = 1; i <= dx + dy; i++ ){

if ( d > 0 ){

d += d2;y += 1;

}else{

d += d1;x += 1;

}

putpixel ( x, y, color );}

}

Page 16: Компьютерная графика Лекция вторая

16

Алгоритм для равномерной линии (размышления)• Идея с удалением лишнего

• Выравнивание

Page 17: Компьютерная графика Лекция вторая

17

Замечания

• Прохождение линии в обе стороны (разный проход – разный результат)– d = 0

• Отсечение

• Использование симметричности

• Алгоритмы Кс.Ву и Дж.Рокне, Гилл. по несколько точек

• Алгоритмы J.Boyer и J.J.Bourdin с ортогональным проходом и пядями

Page 18: Компьютерная графика Лекция вторая

18

Алгоритм Кастеля-Питвеяy = b;x = a - b;

m1 = "s";m2 = "d";

while( x != y ){ if( x > y ) { x = x - y; m2 = m1 # ~ m2; } else { y = y - x; m1 = m2 # ~ m1; }}m = m2 # ~ m1

Page 19: Компьютерная графика Лекция вторая

19

Уловки примененные в алгоритме Брезенхема• Переход к целочисленной арифметике (есть общий знаменатель)

• Использование функции отклонения (DDA)

Page 20: Компьютерная графика Лекция вторая

20

Растеризация окружности

• Смотри книжку

Page 21: Компьютерная графика Лекция вторая

21

Растеризация эллипса

• (x^2 / a^2) + (y^2 / b^2) = 1• b^2 * x^2 + a^2 * y^2 – a^2 * b^2 = 0• Точка перехода gradF(x,y) = (2*b^2*x, 2*a^2*y)

Page 22: Компьютерная графика Лекция вторая

22

Архитектура и уловки

• Использование кеша–с какой стороны рисовать?

• Самомодифицирующийся код• Избавление от лишних

переходов

Page 23: Компьютерная графика Лекция вторая

23

Заливка рекурсивная

Page 24: Компьютерная графика Лекция вторая

24

Заливка продвинутая

Page 25: Компьютерная графика Лекция вторая

25

Заливка при известном контуре

Page 26: Компьютерная графика Лекция вторая

26

Сcылки• http://graphics.cs.msu.su

• http://cylib.iit.nau.edu.ua/Books/Graph/Study/3d_course-2/brezquic.html

• http://graphics.cs.msu.su/courses/cg_el99/notes/lect01.doc

• http://www.intuit.ru/department/graphics/rastrgraph/

Page 27: Компьютерная графика Лекция вторая

27

Q&A

Page 28: Компьютерная графика Лекция вторая

28

Thanks!