OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
DISPLEJ LISTA
Displej lista je grupa komandi grafičke biblioteke koje su
pohranjene za kasnije izvršenje. Većina komandi grafičke
biblioteke mogu biti pohranjene u displej listu ili izdate u
trenutačnom modu (immediate mode), ovaj mod prouzrokuje
da se komande trenutačno izvršavaju. Time, skup komandi
grafičke biblioteke se može imenovati, organizirati i raditi sa
displej listom na pogodan i efikasan način. Naprimjer,
posmatrajmo translaciju slike kuće na monitoru. Ako slika
kuće se sastoji od nekoliko stotina linija, morali bi da pišemo
translacione komande nekoliko stotina puta- jednaput za
svaku liniju- ako linije slike postoje kao nezavisni entiteti.
Medjutim, mi treba da pišemo istu komandu samo jedanput,
ako bi grafički entiteti za sliku bili definisani kao displej lista.
1
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Displej lista OpenGL je dizajnirana da optimizira performansu,
naročito putem mreže, ali nikada na trošak performanse na
pojedinačnoj mašini.
Da bi se optimizirala performansa, displej lista kašira
komande a ne dinamičku bazu podataka. Drugim riječima,
jedanput kada je displej lista kreirana, ona se ne može
modificirati. Ako bi displej liste bile modifikabilne, performansa
bi mogla biti reducirana zbog overheda ( dodatnih aktivnosti),
koji bi bio potreban da se pretraži kroz displej listu i izvrši
menadjment memorije. Kako bi dijelovi displej liste bili
mjenjani, alokacija i dealokacija memorije bi mogla voditi ka
fragmentaciji memorije. Korištenje displej lista je isto tako brzo
kao i da se ne koriste.
2
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Jedanput kada je displej lista definisana, slijedeće operacije
se mogu primjeniti:
- Višestruko izvršenje: Ista displej lista se može izvršiti
mnogo puta.
- Hijerahijsko izvršenje: Hijerarhijska displej lista je ona koja
izvršava drugu displej listu pozivajući komandu za izvršenje
displej listu-dijete, u okviru displej liste-roditelj.
Hijerarhijska displej lista je korisna za objekat koji je
sastavljen od komponenata, naročito ako neke od ovih
komponenata se koriste više od jedanput.
Brisanje ( deletion): ovim se displej lista eliminira.
3
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
TRANSFORMACIONA MATRICA
Konverzija koordinata iz jednog koordinatnog sistema u
drugi je bitna u izračunavanju lokacija projekcija tačaka na
objekat u prostoru. Prvo, mi treba da sračunamo koordinate
tačaka na objektu za vanjski koordinatni sistem ( wcs) iz
njegovog model koordinatnog sistema ( mcs). Tekuća
pozicija objekta je obićno specificirana kao: koliko je puta
objekat bio transliran i rotiran od svoje inicijalne pozicije,
kod koje njegov modelni koordinantni sistem koincidira sa
vanjskim kooridinatnim sistemom. Time, vanjske koordinate
tačaka na objektu u tekučoj lokaciji se dobiju translacijom i
rotacijom odgovarajućih tačaka kod inicijalne pozicije, gdje
njegov model koordinatni sistem koincidira sa vanjskim
koordinatnim sistemom. Na taj način, vanjske koordinate
tačaka na objektu kod tekuče lokacije, se dobiju sa
translacijom i rotacijom odgovarajućih tačaka kod inicijalne 4
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
pozicije gdje su njegove modelne koordinate iste kao i
vanjske koordinate. Većina grafičkih biblioteka izvršava
interno ove transformacije, i grafički programer može trebati
da obezbjedi samo dio translacije i rotacije svakog objekta.
Medjutim, mi još uvjek moramo da razumijemo jasno
transformaciju da bi bili u stanju da crtamo objekte na
njihovim korektnim lokacijama bez metode probe i greške,
naročito kada se objekti kreću na komplikovan način.
Mi opisujemo transformacionu matricu koju treba primjeniti
na koordinate tačaka za ove translacije i rotacije u nastavku.
Kada smo dobili vanjske koordinate svih tačaka jednog
objekta u njegovoj tekučoj poziciji, mi treba da izvedemo
koordinate istih tačaka u odnosu na koordinatni sistem
gledanja ( vcs). Ova konverzija koordinata izmedju različitih
koordinatnih sistema se naziva mapiranje. Mapiranje
5
izmedju vanjskog koordinatnog sistema i k.s gledanja ( vcs)
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
se obićno realizuje interno od strane grafičke biblioteke
kada programer obezbjedi informaciju kao što je lokacija
tačke gledanja( viewpoint), lokacija gledanja ( viewsite), i
smjer up vektora, i to za sve u vanjskom k.s.
TRANSLACIJA
Kada se objekat translira za a,b i c u x, y i z pravcima, od
svoje početne pozicije kod koje njegov model koordinatni
sistem koincidira sa vanjskim koordinatnim sistemom ( wcs),
( vidjeti na narednoj slici), vanjske koordinate tačke ( wcs) na
objektu u novoj poziciji( Xw, Yw, Zw ) se dobiju kao:
( 3.3)
6
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
U ovoj jednačini ( 3.3), Xm, Ym i Zm su takodjer modelne
koordinate od iste tačke. Jednačina (3.3) se može izraziti u
slijedećoj formi, koristeći matrične operacije :
7
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Jednačina (3.4) se može lako verificirati da je ista kao i
jednačina (3.3) jednostavnom ekspanzijom. Dodatna operacija
u jednačini (3.3) se može izraziti kao operacija multiplikacije u
jednačini ( 3.4) korištenjem homogenih koordinata koje
predstavljaju trodimenzionalni vektor sa četiri skalara umjesto
tri . Matrica koja se koristi da transformira homogene koordinate
se naziva homogena transformaciona matrica. Zbog toga,
transformaciona matrica na desnoj strani jednačine (3.4) ,
označena kao Trans( a.b.c) je homogena transformaciona
matrica za translaciju. Ako tačka u dvije dimenzije treba da
bude transformirana, ili translirana kao u ovom slučaju,
homogena transformaciona matrica će se reducirati na 3 x 3
matricu eliminišući treči red i treču kolonu iz 4 x 4 homogene
transformacione matrice. Biće primjenjena na koordinate tačke
koja je predstavljena sa 3 x 1 vektorom kolonom, dobijenim
eliminacijom z koordinata iz 4 x 1 trodimenzionalnih homogenih
8
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
koordinata.
ROTACIJA
Predpostavimo da je objekat rotiran za q oko X ose
vanjskog koordinatnog sistema( wcs) zajedno sa svojim
modelnim koordinatnim sistemom ( koji ponovno koincidira
sa vanjskim k.s kod početne pozicije, kao što je prikazano
na narednoj slici). Vanjske koordinate tačke na objektu u
novoj poziciji, ( Xw, Yw, Zw ) , se mogu dobiti iz svojih
originalnih koordinata, ( Xm, Ym, Zm) , kako slijedi: Ovdje (
Xm, Ym, Zm) su koordinate tačke u odnosu na modelni
koordinatni sistem, i time su one jednake sa svojim
vanjskim koordinatama prije rotacije.
9
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Rotacija oko x ose
Relacija izmedju ( Xw, Yw, Zw ) i ( Xm, Ym, Zm) postaje
jasnija kada se prethodna slika projektuje na yz ravan kako
je prikazano na narednoj slici:
10
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Iz ove slike se lako mogu dobiti slijedeće jednačine:
11
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
jednačine ( 3.5), (3.6) i (3.7) se mogu izraziti u matričnom
obliku kao:
Matrica na desnoj strani jednačine (3.8) je homogena
transformacija matrice za rotaciju oko x ose i zato je
označena kao Rot (x,q ) . Ova homogena transformaciona
matrica će takodjer biti reducirana na 3 x 3 za
dvodimenzionalni objekat, kao i za translaciju.
12
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Homogena transformaciona matrica za rotaciju oko y ili z
ose se može izvesti slično i izraziti kao:
Razmatrali smo transformacione matrice pridružene sa
rotacijama oko jedne od osa vanjskog k.s. ( wcs). Mi
možemo zaključiti da rotacija oko bilo koje arbitrarne ose se
postiže kombinacijom rotacija oko x, y i z osa. Time,
transformaciona matrica za arbitrarnu osu se dobije
kombinujući matrice u jednačinama ( 3.8) – ( 3.10).
13
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Transformacione matrice opisane u ovom poglavlju su
obićno izvedene iz prodruženih rutina u grafičkim
bibliotekama. Posmatrajmo neke primjere da pojasnimo
objašnjenja za transformacionu matricu.
Objekat u prostoru se translira za 5 jedinica u y smjeru
vanjskog koordinatnog sistema ( wcs), i nakon toga rotira
90 stepeni oko x ose vanjskog koord. sistema ( wcs). Ako
tačka na objektu ima koordinate ( 0,0,1) u odnosu na njen
modelni koord. sistem ( mcs), koje će biti vanjske
koordinate iste tačke nakon translacije i rotacije?
14
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Odgovor
Koordinate ( Xw’, Yw’, Zw’) nakon translacije se mogu dobiti
sa:
Nakon toga kada se primjeni rotacija:
Dakle, koordinate nove tačke će biti ( 0, -1, 5). Primjetimo da
jednačine ( a) i (b) se mogu objediniti kako slijedi:
Jednačina (c) je mnogo praktičniji izraz, naročito kada
koordinate brojnih tačaka se trebaju izračunati.
15
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
U tom slučaju, transformacione matrice
Rot( x,90) i
Trans(0,5,0) , su unaprijed pomnožene da daju
ekvivalentnu transformacionu matricu, i nakon toga
rezultirajuča matrica se primjenjuje na sve tačke koje su
uključene.
Ovaj proces računanja ekvivalentne
transformacione matrice sa množenjem pridruženih
transformacionih matrica u odgovarajučoj sekvenci se
naziva sastavljanjem ( concatenation). Ovaj proces je
jedan od beneficija korištenja homogenih koordinata, koje
omogućuju translaciju da se izrazi sa množenjem matrica
umjesto sa dodavanjem.
16
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Primjer br 2
Objekat u prostoru je rotiran 90 stepeni oko ose koja je
paralelna sa x osom vanjskog koordinatnog sistema, i
prolazi kroz tačku koja ima vanjske koordinate ( wcs) (
0,0,1). Koje će biti vanjske koordinate ( wcs) iste tačke
nakon rotacije?
17
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Odogovor
Diskutirali smo rotacije samo oko osa koje prolaze kroz
koord. početak, tako da moramo zajedno pomjeriti i
objekat i osu rotacije. Osa rotacije mora proći kroz koord.
početak dok ista relativna pozicija se održava izmedju
objekta i ose rotacije. Dakle, objekat je transliran za ( 0,-3,2) zajedno sa rotacijom ose tako da rotaciona osa koincidira
sa x osom od vanjskog koordinatnog sistema ( wcs). Nakon
toga objekat se rotira oko x ose za 90 stepeni. Sada se
objekat ponovo translira, za ( 0,3,2), da se vrati na
originalnu poziciju.
Ove operacije se mogu izraziti kao:
Primjetimo sekvencu transformacionih matrica u jednačini
(d). Razultat se može lako verificirati primjenjujući
18
transformacije korak po korak, kao i u prethodnom primjeru.
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Ekspandirajući jednačinu (d) dobićemo:
MAPIRANJE
Mapiranje uključuje izračunavanje koordinata tačke u
odnosu na koordinatni sistem iz poznatih koordinata, od iste
tačke u odnosu na drugi koordinatni sistem.
Posmatrajmo dva koordinatna sistema prikazana na
narednoj slici. Da bi to uradili, predpostavljamo da su
koordinate ( X2, Y2 i Z2 ) tačke P u odnosu na x2, y2 i,z2
koordinatni sistem treba da budu sračunate u odnosu na
19
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
x1y1z1 koordinatni sistem.
Nadalje, za ( X2, Y2 , Z2 ) se predpostavlja da su sračunate
primjenjujući transformacionu matricu T1-2 na ( X1, Y1 i Z1 )
kako slijedi:
20
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Zamjenjujući T1-2 sa njegovim elementima
jednačini ( 3.11) da bude izražena kao:
dozvoljava
Da bi izveli elemente u jednačini (3.12) mi prvo zamjenjujemo
X1 = 0, Y1 = 0, i Z1=0, i dobijemo:
21
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Dakle, mi možemo reći da px, py i pz su dobijene kao
koordinate početka od x1y1z1 koordinatnog sistema u
odnosu na x2y2z2 koordinatni sistem.
Mi sada zamjenjujemo vrijednosti od X1= 1, Y1= 0 i Z1= 0 u
jednačinu ( 3.13) i dobijamo:
Oduzimajući jednačinu (3.13) od jednačine (3.14), mi
možemo zaključiti da nx , ny i nz su respektivno , x2 , y2 i z2
komponente jediničnog vektora duž x1 ose od x1y1z1
koordinatnog sistema. Dakle, nx , ny i nz se lako izvode iz
relativne orjentacije izmedju dva koordinatna sistema koja
su uključena. Slično ox , oy i oz su x2 , y2 i z2 komponente
od y1 ose i ax , ay i az su one od z1 ose.
22
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Druge transformacione matrice
Pored transformacionih matrica opisanih u prethodnom
tekstu, transformacione matrice za skaliranje i za
ogledalsku refleksiju se takodjer često koriste. Da bi se
skalirao jedan objekat prema gore ili dolje, sx puta u x
pravcu, sy u y, i sz puta u z pravcu, slijedeća
transformaciona matrica se primjenjuje:
Kao i za translaciju i rotaciju dvodimenzionalnih objekata,
skalirajuća transformaciona matrica se takodjer reducira na
3x3 matricu.
Isti efekat skaliranja se može dobiti
mjenjanjem velićine viewporta ili prozora bez da se mjenja
23
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
vrijednost koordinata.
Transformaciona matrica u jednačini ( 3.15) se koristi kada
objekat se skalira u odnosu na koord. početak. Medjutim,
često je poželjno da se skalira objekat u odnosu na tačku P
na objektu predstavljenu sa ( Xp, Yp, Zp ). U ovom slučaju,
translaciona transformacija, Trans(- Xp, -Yp, -Zp ) se
primjenjuje prvo tako da se referentna tačka za skaliranje
pomjera u koord. početak, nakon toga skalirajuća matrica u
jednačini ( 3.15) se primjenjuje, i konačno Trans(Xp, Yp, Zp )
se primjenjuje da se pomjeri objekat natrag u svoju
originalnu poziciju.
Sa xy ravni kao ogledalom, zrcalna refleksija se može
postiči sa slijedećom transformacionom matricom, pošto
samo znak z koordinate se treba reverzirati:
24
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Transformaciona matrica za druge zrcalne refleksije, sa yz
ravni ili xz ravni kao ogledalom, se može izvesti na isti
način.
25
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
OTKLANJANJE SKRIVENIH LINIJA I POVRŠINA
Kada je jedan objekat u prostoru projektovan na ekran,
prikazujući samo vidljive linije i površine će dovesti do
povećanja jasnoće slike. Otklanjanje skrivenih linija ( hidden
line removal) sprječava prikaz segmenata linije da postanu
loše vidljivi, otklanjanje skrivenih površina ( hidden-surface
removal), spriječava prikaz bilo kojeg dijela površine koji je
zaklonjen ( obscured). Naredne dvije slike ilustriraju slike
objekta prije i nakon otklanjanja skrivenih linija. Očito,
razumjevanje slike je mnogo lakše, sa otklonjenim
sakrivenim linijama.
Objavljeni su mnogi softverski algoritmi za otklanjanje
skrivenih linija i/ili površina. Oni pokušavaju da poboljšaju
računarsku efikasnost ili da prošire
dijapazon oblika
objekata sa kojima se može manipulirati. Medjutim,
otklanjanje skrivenih linija i/ili površina ima tendenciju da se
najbolje ostvaruje kada se iskoristi prednost hardvera
grafičkog uredjaja koji se naziva z-bafer ( buffer).
26
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Slika prije nego što su skrivene linije otklonjene
Slika nakon što su skrivene linije otklonjene
27
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Razlozi za otklanjanje skrivenih linija i površina su ne samo
zbog bolje preglednosti i jasnije vidljivosti objekata na sceni
nego i da se uštedi vrijeme iscrtavanja od strane CPU (
GPU ) ovih objekata jer crtanje pologonalnih lica kozumira
procesorska vremena. Zato treba crtati i renderisati samo
ona lica i objekte koje vidimo. Površine i linije koje ne
vidimo su :
- zasjenjene površine i linije
- zadnja lica objekata ( back faces culling)
- lica i površine van volumena gledanja ( tkz viewing
frustum culling .
Takodjer da bi se izvršilo korektno renderisanje ( sjenćenje
) potrebno je izračunati korektno i koje su površine vidljive a
koje nisu. Kada više punih ( neprovidnih ) poligona pokriva
istu površinu ekrana , samo one koje su nabliže tački
28
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
gledanja ( tj. oku posmatrača ) su vidljive i ostale trebaju biti
otklonjene kao što se vidi sa slijedeće slike :
nekorektni prikaz scene
korektan prikaz scene
Dakle potrebno je:
- odrediti koji su objekti vidljivi u oku posmatrača
- odrediti koje boje koristiti da se oboje pikseli na ekranu29
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
U nastavku, ćemo pogledati nekoliko tipičnih algoritama za
eliminiranje skrivenih linija i površina, korištenjem
softverskih algoritama kao i metoda za korištenje z-bafera
za istu namjenu.
Back-face algoritam otklanjanja
Back-face ( stražnje lice) algoritam , koristi osnovnu ideju
da je lice objekta vidljivo ako njegov normalni vektor u
smjeru van objekta je usmjeren prema posmatraču, a inače
je nevidljivo. Slućaj kada je lice nevidljivo i usmejeno na
suprotnu stranu od smjera posmatrača je prikazan na
narednoj slici:
30
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Odstranjivanje stražnjih lica je podržano u OpenGL. Ako ga
nadjemo nećemo ga iscrtavati niti renderisati pošto se lica
na sceni izložena različitim izvorima svjetla najčešće sjenče
radi realističnosti scene. Kako ćemo detektovati ovo
stražnje lice?
Postupak je prikazan na slijedećoj slici:
M
F je lice objekta kojeg želimo testirati da li je stražnje lice.
P je tačka na F
Formirati vektor posmatranja od tačke gledanja - M
N je normalni vektor na lice F
31
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Dva vektora u relaciji prema vidljivosti lica
If M . N > 0, tada je lice vidljivo
If M . N = 0, tada je lice prikazano kao linija
If M . N < 0, tada je lice nevidljivo
32
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Takodjer se odstranjuju i svi objekti koji su van volumena
gledanja ( viewing frustum ).
Ovo odstranjivanje se realizuje preko 3D algoritma
odsjecanja ( napr. 3D clipping algorithm Liang – Barsky)
33
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Ovi uslovi otkrivanja stražnjih lica se mogu lako primjeniti
na objekat ograničen sa planarnim licima, pošto normalni
vektor N konstantan bilo gdje na licu. Medjutim, ovi uslovi
se ne mogu primjeniti na konkavni objekat, pošto lice koje
je okrenuto prema posmatraču može biti zaklonjeno (
obscured) od strane drugog lica od istog objekta, kao što
je to pokazano na narednoj slici.
Primjer konkavnog objekta
34
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Ista situacija se pojavljuje sa više od jednim konveksnim
objektom kada lice jednog objekta može biti zasjenjeno
drugim objektom mada je lice usmjereno ka posmatraču.
Zbog toga back-face algoritam se može primjeniti samo na
jedan konveksan objekat. Nadalje, algoritam ne može
manipulirati sa objektom kao što je onaj pokazan na
narednoj slici, pošto normalni vektor usmjeren prema vani
svakog lica se ne može jednoznačno ( unambiguously)
odrediti.
35
Objekat čiji normalni vektor prema vani nije odredjen jednoznačno
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Ako objekat ima neplanarna lica ( površine), vrijednost N za
svaku neplanarnu površ će se promjeniti, zavisno od toga
na koju tačku na licu je izabran, a znak od M . N će se
takodjer promjeniti. Ovo znači da lice ima vidljivi dio i
nevidljvi dio u isto vrijeme. Zato, lice treba biti podjeljeno
duž krive na licu koja slijedi tačke M . N = 0. Kriva duž koje
je M . N = 0 se naziva linija siluete (silhouette line). Kada se
lice podjeli duž linije siluete, znak M . N za podjeljeni
segment se istražuje za bilo koju reprezentativnu tačku
izabranu iz svakog segmenta. Ovaj proces se može pojaviti
da je lagan, ali izračunavanje linija silueta nije jednostavan
zadatak, i time najveća prednost back-face algoritma- tj
jednostavnost implementacije je izgubljena.
Nakon što su sva lica identificirana kao vidljiva ili nevidljiva,
ivice vidljvih lica se prikazuju da generišu sliku crtanja linija
36
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
sa otklonjenim sakrivenim linijama. Ako se želi slika sa
otklonjenim sakrivenim površinama, vidljive površine se
jednostavno ispune sa izabranim bojama.
Sortiranje dubine ili slikarev algoritam
Osnovni princip dubinskog sortiranja ( ili slikarevog )
algoritma se može iskazati na slijedeći način:
Površine objekata se sortiraju po rastojanju od posmatrača i
pune sa njihovim odgovarajučim bojama od najudaljenijeg
Slikanjem površina
ovim
lica ka najbližem licu.
redoslijedom,
najudaljenije površine se automatski
sakrivaju od strane bližih površina ako će one zauzimati isti
region ekrana. Dakle, dubinski algoritam sortiranja je
algoritam otklanjanja sakrivenih površina. Rastojanje
površine od posmatrača se mjeri sa z koordinatama tačaka
37
na površini, u odnosu na koordinatni sistem posmatranja.
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
38
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
To znači, tačka sa većom Zv koordinatom se može reći da
je bliža posmatraču. ( Medjutim u OpenGL tačka sa većom
vrijednošću Zv koordinate je dalje od posmatrača pošto
OpenGL koristi lijevoruki koordinatni sistem posmatrača (
vcs).
( Napomena :
z koordinata u odnosu na koordinatni
sistem posmatrača ( vcs) će se označiti sa Zv ) .
Dakle, samo je potrebno da poredimo Zv koordinate
površina koje treba nacrtati i prikazati površine u sekvenci
startujuči od površine sa najmanjom Zv koordinatom.
Poredjenje Zv koordinata izmedju dvaju površina bi bilo
jednostavno ako bi maksimalna Zv vrijednost jedne površine
bila manja od minimuma Zv vrijednosti druge površine.
Medjutim, u većini slučajeva, opseg Zv vrijednosti svih
39
tačaka na površini prekriva Zv opseg druge površine.
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Ove dvosmislene situacije se mogu izbjeći razdjelujući
svaku od površina u dva ili nekoliko komada sve dok Zv
opsezi se ne preklapaju. Postoji još jedan, jednostavan
način, da se prevazidje problem, kojeg je lakše i
implementirati. Kod ovog metoda, svaka površina objekata
se unaprijed konvertuje u skup malih trouglova tako da Zv
opseg svakog trougla se ne preklapa sa bilo kojim drugim, i
nakon toga svaki trougao se boji sa pridruženom bojom u
korektnoj sekvenci. Kako se veličine trouglova smanjuju,
postoji manja vjerovatnoća da Zv opsezi će se preklopiti.
Ova aproksimacija objekta ograničenog sa mnogo trouglova
se zove trijangulacija ili konverzija faceta. ( triangulation or
facet conversion).
40
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
z – Bafer metod
z- bafer metod je baziran na istom principu kao i algoritam
sortiranja po dubini, po tome što je bilo koji region ekrana
zaposjednut sa entitetom koji je najbliži posmatraču. Ovdje,
entiteti impliciraju tačke, krive ili površine. Ovaj metod
uključuje korištenje hardverske memorije koja se naziva zbafer koja pohranjuje, za svaki piksel, Zv vrijednost entiteta
čija projekcija je predstavljena sa pikselom( tako da je
potrebno u video RAM memoriji drzati i frame buffer i zbuffer). U z-bafferu na svakoj (x,y) koordinati piksela
prijekcione ravni se pohranjuje ,z koordinata entiteta koji se
procesira.
Zv vrijednost ( tj. koordinata u koordinatnom sistemu
posmatranja (vcs) je mjera rastojanja entiteta od
posmatrača. Zbog toga, z-bafer zahtjeva odredjenu kolićinu
memorijskog prostora koja je potrebna da pohrani toliko
realnih varijabli koliko ima piksela.
41
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Lica čiji su normalni vektori usmjereni od posmatrača su
nevidljiva, tako da samo lica čiji su normalni vektori
usmjereni prema posmatraču se skupljaju i projektuju na
ekran. Medjutim, za razliku od algoritma dubinskog
sortiranja, površine se projektuju u slučajnom redoslijedu.
Razlog će postati jasniji kako idemo kroz slijedeću
proceduru.
Prvo, svaka proizvoljna površina se projektuje, i memorijske
lokacije z- bafera koje odgovaraju pikselima pridruženim sa
projektovanom slikom se setuju sa Zv vrijednostima
odgovarajućih tačaka na površini,
42
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
predstavljenoj sa pikselima. U ovom trenutku, pikseli su
obojeni bojom te površine. Nakon toga se projektuje
slijedeća površina, i pridruženi pikseli se boje sa bojom ove
površine ako ovi pikseli nisu bili obojeni sa prethodnom
površinom. Ako se neki pikseli već bili obojeni, pohranjene
Zv vrijednosti ovih piksela se porede sa Zv vrijednostima
tačaka na tekučoj površini, predstavljenoj sa istim
pikselima. Ako pohranjene Zv vrijednosti piksela su veće od
njene tekuče vrijednosti ( tj. tačka na prethodnoj površini je
bliže nego ona na tekučoj površini ka posmatraču), onda je
boja piksela rezervisana. Inače, ona će biti obojena sa
bojom tekuče površine. Sve Zv vrijednosti piksela se
inicijaliziraju na vrijednosti rastojanja do udaljene ravni ( far
plane), od posmatrača tako da pikseli za prvu površinu se
automatski setuju na boju prve ravni. Ponavljanje iste
procedure za sve površine koje su uključene, će obojiti
svaki piksel na
43
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
ekranu sa bojom najbliže površine, kao što je pokazano na
narednim slikama:
Princip z-bafer metoda
44
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
Sumirajući prethodni opis, z-bafer metod se bazično koristi
za otklanjanje skrivenih površina, kao i metod dubinskog
sortiranja. Medjutim, crtanje linija bez skrivenih linija se
može takodjer generisati korištenjem z-bafer metoda sa
malim modifikacijama , kako slijedi:
Prvo, sve površine se projektuju na ekran bojenjem
pridruženih piksela se pozadinskom bojom ( background
color). U ovom koraku, z-bafer se postavlja sa korektnim
vrijednostima Zv kao i ranije. Dakle, ova operacija ima
efekat postavljanja Zv vrijednosti korektno, bez prikazivanja
površina. Nakon toga, granične ivice površina se projektuju
na ekran. Dok se ove ivice projektuju, Zv vrijednosti piksela
koji predstavljaju ivice se porede sa Zv vrijednostima već
postavljenim od strane površina, i samo pikseli sa
originalnim Zv vrijednostima se ažuriraju. Na ovaj način,
dijelovi graničnih ivica koji se zamagljeni od strane površina
45
OSNOVNI KONCEPTI GRAFIČKOG PROGRAMIRANJA
neće biti prikazani. Ova procedura daje korektno crtanje
linija – bez skrivenih linija. Medjutim, neke granične linije
mogu postati isuviše tanke pošto neki od piksela svake
granične linije mogu biti zauzeti od strane površina koje
dijele graničnu liniju. Mi možemo lako riješiti ovaj problem
pomjerajući čitav objekat bliže ka nama, u malim iznosima,
kada projektujemo granične linije.
46
Download

osnovni koncepti grafičkog programiranja