Upload
mensur-durakovic
View
23
Download
1
Embed Size (px)
DESCRIPTION
opis
Citation preview
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 */