računalna grafika

Post on 16-Jan-2016

25 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

DESCRIPTION

opis

TRANSCRIPT

Računalna grafika

Računalna grafika

Grafički cjevovod

Osnovni algoritmi rasterske grafike

Računalna grafika

2014/2015 Predavanje 3 2

Grafički sustav

• Skup izlaznih potprograma koji odgovaraju različitim

primitivnim oblicima, atributima i drugim elementima.

• Potprogrami tvore biblioteku grafičkih potprograma ili

grafički paket

• Mogu se pozivati iz programskih jezika visoke razine (C,

C++, C#, Pascal, LISP,…).

• Potprogrami pokreću prikazne uređaje i na taj način

generiraju slikovni prikaz geometrijskih primitivnih oblika i

atributa specificiranih aplikacijskim programom.

Računalna grafika

2014/2015 Predavanje 3 3

Grafički sustavi rasterske grafike

- GKS, SRGP, PHIGS, OpenGL,...

- Aproksimiraju matematičke (idealne) primitive opisanih

vrhovima u Kartezijevu koordinatnom sustavu, pomoću

skupova piksela odgovarajuće razine svjetloće i/ili boje.

- Pikseli su pohranjeni kao bitovna matrica (bitmap) ili

matrica slikovnih elemenata (pixmap) u memoriju

centralnog procesora ili u međuspremnik okvira (frame

buffer).

Računalna grafika

2014/2015 Predavanje 3 4

Grafički sustavi rasterske grafike

- Grafički sustav kao posrednik između aplikacijskog

programa i sklopovlja za prikaz slike

Računalna grafika

2014/2015 Predavanje 3 5

Grafički sustavi rasterske grafike

- Procedure grafičkog sustava koje se odnose na generiranje

primitiva specificiraju što treba generirati

- Atributske procedure specificiraju kako će se generirati

primitivi

- copyPixel procedura specificira kako će se slike

modificirati

- Pocedure upravljanja canvasom specificiraju gdje će se

generirati slike.

Računalna grafika

2014/2015 Predavanje 3 6

Grafički sustavi rasterske grafike

- Canvasi su bitmape ili pixmape koje se pohranjuju u

prikaznu memoriju.

- Ekran - također canvas koji je poseban samo po tome što

je jedini canvas koji se prikazuje.

- Da bi se slika pohranjena u canvasu prikazala, potrebno je

da aplikacija taj canvas kopira u ekranski canvas.

- U nekom trenutku, samo jedan canvas može biti aktivan.

- To je canvas u koji se crtaju novi primitivi i na kojem se

primjenjuju promjene atributa.

Računalna grafika

2014/2015 Predavanje 3 8

- Grafički sustav koji

pogoni dva tipa

prikaznih sustava:

- a) Prikazno sklopovlje

s prikaznim

procesorom i

međuspremnikom

okvira;

- b) Bez prikaznog

procesora,

međuspremnik okvira

je dio memorije

Računalna grafika

2014/2015 Predavanje 3 9

Prikazni sustavi s međuspremnicima okvira i prikaznim

procesorima

Rasterećenje:

- prikazni procesor obavlja rasterizaciju (scan conversion)

- prikazni procesor izravno obrađuje primitive i atribute koje je

proslijedio grafički sustav.

• Grafički sustav samo vrši konverziju u njegovu internu

reprezentaciju primitiva, atributa i načina zapisa u formatima

u koje prihvaća prikazna periferija koja iscrtava primitive.

Računalna grafika

2014/2015 Predavanje 3 10

Prikazni sustavi bez prikaznog procesora

• grafički sustav sam vrši rasterizaciju u međuspremnik okvira i

neekranski canvas.

• dijelovi memorije pripadaju međuspremniku okvira i

pohranjuju canvase kojima upravlja grafički sustav.

• ostatak memorije koriste ostali programi uključujući i sam

grafički sustav.

Računalna grafika

2014/2015 Predavanje 3 11

Grafički protočni sustav (cjevovod)

• Grafički cjevovod : slijed koraka koji se primjenjuju kako bi se

realna ili virtualna 3D scena i objekti u njoj iscrtali na prikaznom

uređaju.

• Obavljanje grafičkih operacija po fiksnom redoslijedu.

Slika: pojednostavljeni grafički protočni sustav.

Računalna grafika

2014/2015 Predavanje 3 12

Grafički protočni sustav (cjevovod)

• Grafičke aplikacije rade na

apstraktnom nivou i barataju

objektima

• Podatci iz aplikacije predstavljaju

ulaz u grafički cjevovod.

• Podatci o objektima scene su

podatci o osnovnim geometrijskim

elementima i/ili krivuljama od kojih

se sastoje (vrhovi, veze među

vrhovima, položaj, boja, tekstura...).

Primjer koda: zadana 3

vrha trokuta (OpenGL)

Računalna grafika

2014/2015 Predavanje 3 13

Grafički protočni sustav (cjevovod)

• Ulaz u grafički cjevovod čine koordinate vrhova i ostali

parametri koji se postavljaju u grafičkoj aplikaciji.

• Svi ti parametri transformiraju se nizom matrica radi pravilnog

smještanja u scenu, proračuna osvjetljenja i projekcije scene.

• To je “geometrijska faza”

Računalna grafika

2014/2015 Predavanje 3 14

Grafički protočni sustav (cjevovod)

• “Rasterska faza”:

1) Podfaza sakupljanja primitiva

Iz pojedinih vrhova slažu se geometrijski

elementi .

Rezultat: različiti elementi kao što su točke,

linije, trokuti i poligoni

Računalna grafika

2014/2015 Predavanje 3 15

Grafički protočni sustav (cjevovod)

• “Rasterska faza”:

1) Podfaza sakupljanja primitiva

Elementi ili dijelovi elemenata možda će

biti odbačeni ako se ne nalaze u vidljivu

dijelu 3D prostora ili na osnovi toga je li im

lice, tj. ona strana poligona iz koje ide

normala vidljivo ili ne.

Računalna grafika

2014/2015 Predavanje 3 16

Grafički protočni sustav (cjevovod)

“Rasterska faza”:

2) Potfaza: rasterizacija - određivanje prekrivenosti

geometrijskih elemenata slikovnim elementima –

pikselima

Neki poligon - sitan da ne zauzima niti jedan jedini

piksel / velik pa zauzima velik broj piksela (može i

čitav zaslon).

Računalna grafika

2014/2015 Predavanje 3 17

Grafički protočni sustav (cjevovod)

“Rasterska faza”:

2) Potfaza: rasterizacija

Još se ne radi o pikselima jer još nije sigurno da će

se pojedini slikovni element i zapisati u

međuspremnik okvira.

Potencijalni slikovni elementi - fragmenti.

Računalna grafika

2014/2015 Predavanje 3 18

Grafički protočni sustav (cjevovod)

“Rasterska faza”:

3) Potfaza: preslikavanje tekstura na fragmente i

bojenje

Fragmentima se određuje se boja na osnovi

tekstura i različitih matematičkih transformacija.

Računalna grafika

2014/2015 Predavanje 3 19

Grafički protočni sustav (cjevovod)

“Rasterska faza”:

4) Podfaza : rasterske operacije i testovi

razni testovi koje prolazi fragment da bi se utvrdilo da li će se

zapisati u memoriju.

test škara - odbacivanje fragmenata izvan željenog pravokutnog dijela zaslona;

Računalna grafika

2014/2015 Predavanje 3 20

Grafički protočni sustav (cjevovod)

“Rasterska faza”:

4) Podfaza : rasterske operacije i testovi

test dubine - odbacivanje nevidljivih fragmenata;

alfa test – odbacivanje/prihvaćanje fragmenata temeljem alfa komponente

boje...)

različite operacije vezane uz smještanje fragmenata u spremnik okvira (npr.

određivanje i miješanje boje).

Računalna grafika

2014/2015 Predavanje 3 21

Grafički protočni sustav (cjevovod)

“Rasterska faza”:

4) Podfaza : rasterske operacije i testovi

• Ako se fragment zapiše u memoriju, točnije memorijski

spremnik okvira, on će postati slikovni element koji se prikazuje

na zaslonu.

Računalna grafika

2014/2015 Predavanje 3 23

Grafički cjevovod programirljivog sklopovlja

• Grafičko sklopovlje počinje se prvo koristiti za ubrzavanje

dijelova grafičke protočne strukture odnosno grafičkog

cjevovoda.

• Grafički cjevovod u potpunosti prelazi na grafičku procesorsku

jedinicu (GPU)

• Nakon toga - programabilnost

• Programabilnost - od potpuno fiksnog sustava prema potpuno

programabilnom grafičkom procesoru s procesorskim

elementima.

Računalna grafika

2014/2015 Predavanje 3 24

Grafički cjevovod programirljivog sklopovlja

• Osnovna razlika : na postojeće sklopovlje dodaju se dva

procesora (1 za vrhove, 1 za fragmente).

Računalna grafika

2014/2015 Predavanje 3 25

Grafički cjevovod programirljivog sklopovlja

• Procesor vrhova zamjenjuje transformacije vrhova izvedene

sklopovski ostvarenim funkcijama.

• Sve transformacije se moraju izvesti na procesoru vrhova ili

sklopovski ostvarenim funkcijama.

• Analogno vrijedi i za procesor fragmenata.

Računalna grafika

2014/2015 Predavanje 3 26

Grafički cjevovod programirljivog sklopovlja

• Analogno vrijedi i za procesor fragmenata.

• Transformacija vrhova odvojena faza od transformacije

fragmenata - one se mogu odvijati nezavisno (paralelno).

Računalna grafika

2014/2015 Predavanje 3 27

Grafički cjevovod programirljivog sklopovlja

• Broj procesora za fragmente veći je od broja procesora za

vrhove.

Napomena: Dio grafičkih operacija i dalje isključivo pomoću sklopovski

ostvarenih funkcija (dio sakupljanja primitiva i rasterizacije, interpolacije te

dio rasterskih operacija).

Računalna grafika

2014/2015 Predavanje 3 28

GPU cjevovodProgram/

API

GPU Front End

Geometrijska

faza

Sakupljanje

primitiva

Rasterizacija &

Interpolacija

Obrada

fragmenata

Rasterske

operacije

Međuspremnik

okvira

Driver

CPU

GPUBus

Računalna grafika

2014/2015 Predavanje 3 29

GPU cjevovod

• Program

– Napisani program

• API

– Sučelje za OpenGL ili DirectX

Program/

API

Računalna grafika

2014/2015 Predavanje 3 30

GPU cjevovod

• GPU Front End

– Prima naredbe i podatke od drivera

GPU Front End

Računalna grafika

2014/2015 Predavanje 3 31

• Obrada vrhova (geometrijska faza)

– Uobičajeno: transformacije

– Programabilno

Geometrijska

faza

Vertex

Processor

vrhovi

Podaci za interpolaciju

Podaci za rasterizaciju

POSITION

PSIZE

FOG

TEXCOORD[0-7]

COLOR[0-1]shader

POSITION,

NORMAL,

BINORMAL*,

TANGENT*,

TEXCOORD[0-7],

COLOR[0-1],

PSIZE

teksture

Računalna grafika

2014/2015 Predavanje 3 32

GPU cjevovod

• Ispitivanje dubine

– Provjeri međuspremnik okvira: postoje li već manje

dubine (Z-Buffer)

– Ograničena programabilnost

• Miješanje (Blending)

– Koristi alfa kanal za kombiniranje boja koje se već

nalaze u međuspremniku okvira

– Ograničena programabilnost

Rasterske

operacije

Računalna grafika

2014/2015 Predavanje 3 33

PrimjerProgram/

API

GPU Front End

Geometrijska

faza

Sakupljanje

primitiva

Rasterizacija &

Interpolacija

Obrada

fragmenata

Rasterske

operacije

Međuspremnik

okvira*

Driver

Bus

Dio koda

….glBegin(GL_TRIANGLES);glTexCoord2f(1,0); glVertex3f(0,1,0);glTexCoord2f(0,1); glVertex3f(-1,-1,0);glTexCoord2f(0,0); glVertex3f(1,-1,0);

glEnd();

Računalna grafika

2014/2015 Predavanje 3 34

PrimjerProgram/

API

GPU Front End

Geometrijska

faza

Sakupljanje

primitiva

Rasterizacija &

Interpolacija

Obrada

fragmenata

Rasterske

operacije

Međuspremnik

okvira*

Driver

Bus

01001001100….

GP

U

Računalna grafika

2014/2015 Predavanje 3 35

PrimjerProgram/

API

GPU Front End

Geometrijska

faza

Sakupljanje

primitiva

Rasterizacija &

Interpolacija

Obrada

fragmenata

Rasterske

operacije

Međuspremnik

okvira*

Driver

Bus

Volumen pogleda

Računalna grafika

2014/2015 Predavanje 3 36

PrimjerProgram/

API

GPU Front End

Geometrijska

faza

Sakupljanje

primitiva

Rasterizacija &

Interpolacija

Obrada

fragmenata

Rasterske

operacije

Međuspremnik

okvira*

Driver

Bus

Prostor zaslona

Računalna grafika

2014/2015 Predavanje 3 37

PrimjerProgram/

API

GPU Front End

Geometrijska

faza

Sakupljanje

primitiva

Rasterization &

Interpolation

Obrada

fragmenata

Rasterske

operacije

Međuspremnik

okvira*

Driver

Bus

Međuspremnik okvira

Računalna grafika

2014/2015 Predavanje 3 38

PrimjerProgram/

API

GPU Front End

Geometrijska

faza

Sakupljanje

primitiva

Rasterization &

Interpolation

Obrada

fragmenata

Rasterske

operacije

Međuspremnik

okvira*

Driver

Bus

Međuspremnik okvira

Računalna grafika

2014/2015 Predavanje 3 39

Osnovni algoritmi rasterske grafike

Računalna grafika

2014/2015 Predavanje 3 40

Rasterski prikaz

Osnovni problem:

• crtanje kose ravne crte širine jednog piksela na

dvorazinskom rasterskom prikaznom uređaju.

Računalna grafika

2014/2015 Predavanje 3 41

Rasterski prikaz ravnih crta

Algoritmi za rasterski prikaz ravnih crta proračunavaju

koordinate piksela na 2D rasteru koji su najbliži idealnoj,

beskonačno uskoj ravnoj crti.

Poželjne značajke prikazane ravne crte uključuju:

jednolik intenzitet crte čitavom dužinom,

jednolik intenzitet crte neovisno o nagibu,

mogućnost proizvoljnog odabira širine crte,

mogućnost proizvoljnog oblikovanja krajeva,

Računalna grafika

2014/2015 Predavanje 3 42

Rasterski prikaz ravnih crta

Osnovni inkrementalni algoritam

• najjednostavniji pristup

• proračun piksel po piksel na osnovi eksplicitnog oblika

jednadžbe pravca.

Računalna grafika

2014/2015 Predavanje 3 43

Rasterski prikaz ravnih crta

Osnovni inkrementalni algoritam

Algoritam:

1. proračun nagiba pravca (|m| < 1)

2. proračun nove vrijednosti xi povećanjem prethodne

vrijednosti za 1

3. proračun vrijednosti

4. isticanje piksela (xi, Round(yi)) gdje je Round(yi) = Floor

(0.5 + yi).

Računalna grafika

2014/2015 Predavanje 3 44

Rasterski prikaz ravnih crta

Osnovni inkrementalni algoritam

• odabire točke koje su najmanje udaljene od idealne crte

• nije učinkovit jer se u svakoj iteraciji obavljaju operacije

množenja i zbrajanja s realnim ili (racionalnim) brojevima

kao i poziv funkcije Floor.

Računalna grafika

2014/2015 Predavanje 3 45

Rasterski prikaz ravnih crta

Osnovni inkrementalni algoritam

Primjer:

Primjenom osnovnog

inkrementalnog algoritma odredite

niz piksela koji aproksimiraju

ravnu crtu povezuje točke (5,8) i

(10,11)

Računalna grafika

2014/2015 Predavanje 3 46

Rasterski prikaz ravnih crta

Digitalni diferencijalni analizator (DDA)

•izbjegava množenje realnih brojeva

•izraz za proračun vrijednosti koordinate y :

xmyBxxmBmxy iiii Δ)Δ(11

1Δx myy ii 1

•ako je |m| > 1 mijenjaju se uloge x i y koordinata u

algoritmu

Računalna grafika

2014/2015 Predavanje 3 47

Rasterski prikaz ravnih crta

Digitalni diferencijalni analizator (DDA)

Nedostatak:

•zbog nepreciznosti prikaza realnih brojeva u digitalnim

procesorima dodavanje ne sasvim točne vrijednosti unosi

kumulativnu pogrešku i otklon od stvarne vrijednosti

•za kratke crte razina pogreške je prihvatljiva

Računalna grafika

2014/2015 Predavanje 3 48

Rasterski prikaz ravnih crta

Digitalni diferencijalni analizator (DDA)

void Crta( /* Pretpostavka: -1 m1, x0 < x1 */

int x0, int y0, /* Lijeva krajnja točka */

int x1, int y1, /* Desna krajnja točka */

int value) /* Vrijednost koju poprimaju pikseli linije */

{

int x; /* vrijednost x ide od x0 do x1 korak: +1 */

double dy = y1 – y0;

double dx = x1 – x0;

double m = dy / dx;

double y = y0;

for (x = x0; x <= x1; x++) {

WritePixel (x, Round (y), value); /* Postavi piksel u vrijednost - value */

y += m; /* Povećaj y za nagib m */

}

} /* Crta */

Računalna grafika

2014/2015 Predavanje 3 49

Rasterski prikaz ravnih crta

Digitalni diferencijalni analizator (DDA)

x y Round(y)

2.0 2.0 2

3.0 2.8 3

4.0 3.6 4

5.0 4.4 4

6.0 5.2 5

7.0 6.0 6

Rezultat izvršavanja DDA algoritma: Crta(2,2,7,6,120)

Računalna grafika

2014/2015 Predavanje 3 50

Rasterski prikaz ravnih crta

Algoritam središnje točke

o Pretpostavka: nagib pravca između 0 i 1

o Za pravce s nagibima izvan ovog intervala

primjenjuje se tehnika zrcaljenja oko koordinatnih

osi.

o Pravac se preslikava u odgovarajući pravac s

nagibom unutar navedenog intervala

Samo inkrementiranje i cjelobrojno procesiranje

Računalna grafika

2014/2015 Predavanje 3 51

Rasterski prikaz ravnih crta

Algoritam središnje točke

Primjene algoritma središnje točke za crtanje ravne crte

P: posljednja odabrana točka

Izbor između dviju mogućih

točaka:D i GD

S : točka polovišta dužine koja

povezuje točke D i GD

1. S ispod idealnog pravca -

GD bliža idealnom pravcu.

2. S iznad idealnog pravca - D

bliža idealnom pravcu.

Računalna grafika

2014/2015 Predavanje 3 52

Rasterski prikaz ravnih crta

Algoritam središnje točke

• Koristimo implicitni oblik pravca:

• U svakoj iteraciji utvrdimo da li je sred.točka iznad ili ispod

pravca

• Ispitaj vrijednost od:

• di - varijabla odluke u i – tom koraku

iiii

iiii

iiii

yxcbyax

yxcbyax

yxcbyax

,0

,0

,0

Na pravcu

Iznad pravca

Ispod pravca

cybxad iii

2

11

Računalna grafika

2014/2015 Predavanje 3 53

Rasterski prikaz ravnih crta

Algoritam središnje točke

void SredCrta(int x0, int y0, int x1, int y1, int value)

{

int dx = x1– x0;

int dy = y1– y0;

int d = 2 * dy – dx;/* početna vrijednost za d */

int incrD = 2 * dy;/* povećanje za pomak u D */

int incrGD = 2 * (dy – dx);/* povećanje za pomak u GD */

int x = x0;

int y = y0;

Računalna grafika

2014/2015 Predavanje 3 54

Algoritam središnje točke

WritePixel (x, y, value);/* Početni piksel */

while (x < x1) {

if (d <= 0) {/* Izaberi D */

d += incrD;

x++;

} else {/* Izaberi GD */

d += incrGD;

x++;

y++;

}

WritePixel (x, y, value);/* Izabrani piksel najbliži liniji */

} /* while */

}/* SredCrta */

Računalna grafika

2014/2015 Predavanje 3 55

Rasterski prikaz kružnice

Osnovna jednadžba kružnice sa ishodištem koordinatnog

sustava smještenom u njenom središtu je:

x2 + y2 = r2

Eksplicitno izrazimo y:

22 xry

Računalna grafika

2014/2015 Predavanje 3 56

Rasterski prikaz kružnice

1. Nacrtamo četvrtinu

kružnice

2. Povećavanjem

vrijednosti x-a od 0

do r u jediničnim

koracima

izračunavamo +y

rješenje za svaki

korak.

Računalna grafika

2014/2015 Predavanje 3 57

Rasterski prikaz kružnice

Nedostatci:

• računski zahtjevna uzastupna izračunavanja kvadratnog

korijena

• kako vrijednost x-a postaje bliža krajnjoj vrijednosti r,

točke na kružnici će biti sve razmaknutije

Računalna grafika

2014/2015 Predavanje 3 58

Rasterski prikaz kružnice

Drugi pristup:

• crtanjem točaka s koordinatama (rcos, rsin)

povećavanjem vrijednosti kuta od 0° do 90°

• Ovaj način je također spor

Računalna grafika

2014/2015 Predavanje 3 59

Rasterski prikaz kružnice

Osmosmjerna simetrija

Računalna grafika

2014/2015 Predavanje 3 60

Rasterski prikaz kružnice

Osmosmjerna simetrija

void TockeKruznice(int x, int y, int value)

{

WritePixel(x, y, value);

WritePixel(y, x, value);

WritePixel(y, -x, value);

WritePixel(x, -y, value);

WritePixel(-x, -y, value);

WritePixel(-y, -x, value);

WritePixel(-y, x, value);

WritePixel(-x, y, value);

} /* TockeKruznice */

Računalna grafika

2014/2015 Predavanje 3 61

Rasterski prikaz kružnice

Algoritam središnje točke za kružnice

Koristimo simetriju pa razmatramo samo segment od 45°,

npr. drugi oktant

Kao i kod tehnike središnje točke za rasterski prikaz ravne

crte, strategija se zasniva na odabiru koji je od dva piksela

bliži kružnici tako što se procijeni funkcija na sredini između

ta dva piksela.

2/r

Računalna grafika

2014/2015 Predavanje 3 62

Rasterski prikaz kružnice

Algoritam središnje točke za kružnice

2/r

2

2

2

2

11 ryxd iii

–Ako je di < 0 izabiremo piksel A, inače B

Računalna grafika

2014/2015 Predavanje 3 63

Rasterski prikaz kružnice

Algoritam središnje točke za kružnice

2/r

•Ponovo, na osnovu izbora točke A ili B se može koristiti za

izračun nove vrijednosti di+1

•Ako je izabran A onda slijedeća središnja točka ima vrijednost

varijable odluke:

32

2

12

2

1,2 2

2

2

1

ii

iiiii

xd

ryxdyx

Računalna grafika

2014/2015 Predavanje 3 64

Rasterski prikaz kružnice

Algoritam središnje točke za kružnice

2/r

•Inače, ako je bio izabran B varijabla odluke se izračunava iz:

522

2

32

2

3,2 2

2

2

1

iii

iiiii

yxd

ryxdyx

Računalna grafika

2014/2015 Predavanje 3 65

Rasterski prikaz kružnice

Algoritam središnje točke za kružnice

•Ako pretpostavimo da je radijus cjelobrojna vrijednost, prvi

nacrtani piksel će biti (0, r) a početna vrijednost za varijablu

odluke je:

r

rrrdr

4

5

4

11

2

1,1 22

0

Računalna grafika

2014/2015 Predavanje 3 69

Algoritam središnje točke za kružnice

void SredTocKruznica (int radius, int value)

/* pretpostavljamo da je centar kružnice u ishodištu koord.sustava */

{

int x = 0;

int y = radius;

double d = 5.0 / 4.0 – radius;

CirclePoints (x, y, value);

while (y > x) {

if (d < 0)/* izaberi A */

d += 2.0 * x + 3.0;

else {/* izaberi B */

d += 2.0 * (x – y) + 5.0;

y––;

}

x++;

TockeKruznice(x, y, value);

}/* while */

}/* SredTocKruznica */

top related