Vektorska grafika Slika kod vektorske grafike se formira pomoću geometrijskih objekata, kao što su tačke, linije, krive, poligoni, ili krive koje se temelje na matematičkim funkcijama. Ti se geometrijski objekti nazivaju primitivi.
Računarska grafika i animacija 2
Vektorska grafika Na primjer, za modeliranje kruga poluprečnika "r", potrebne su sljedeće informacije: Informacija o tome da se namjerava nacrtati krug (a ne neki drugi primitiv) Poluprečnik "r" Koordinate tačke za centar kruga Stil, debljina i boja linije Stil i boja unutrašnjosti kruga.
Računarska grafika i animacija 3
Vektorska grafika Prednosti ovakve definicije u odnosu na rastersku grafiku su: Minimalna količina informacija zahtijeva znatno manju veličinu datoteke u odnosu raster sliku (veličina ne zavisi od dimenzija slike) Može se neograničeno zumirati na dio kruga, a da rub kruga ostaje gladak. Kod rasterske slike sa zumiranjem dolazi do pojave "nazubljenosti" ruba, odnosno pikseli postaju vidljivi kao kvadrati. Parametri objekata ostaju pohranjeni i mogu se naknadno mijenjati. To znači da translacija, skaliranje, rotacija, promjena boje unutrašnjosti i sl. ne degradiraju kvalitet crteža.
Računarska grafika i animacija 4
Vektorska grafika Tipični objekti koji se koriste kao 2D primitivi obuhvataju: Duži (linije), Višestruke segmente povezanih linija (polyline), Poligone (pravougaonik, trougao, trapez i sl.), Krugove i elipse, Bézierove krive i tekst (različiti fontovi, gdje se svako slovo formira od Bézierovih krivih). Nekad se i rasterske slike koriste kao primitivi, a u relaciji s drugim objektima ponašaju se kao pravougaoni poligoni.
Računarska grafika i animacija 5
Vektorska grafika Vektorska grafika omogućava transformacije objekata kao što su: Translacija, Rotacija, Simetrično preslikavanje (mirror), Skaliranje, Kombinovanje primitiva u složenije objekte. Često se koriste tehnike kao što je odsijecanje linija do neke granice (trim), koso obaranje ivica (chamfer), obaranje ivica radijusom (fillet), te matematičke operacije nad likovima kao što su presjek, unija i razlika. Jednom kreirani objekti se mogu kopirati, od njih se mogu praviti višestruke pravilno raspoređene kopije (pattern), te koncentrične Računarska kopije (offset). grafika i animacija 6 Vektorska grafika - Tačka Tačka je svojstvo prostora (element prostora; osnovna gradivna nedjeljiva cjelina). Označavanje tačke zavisi o prostoru u kojem se ta tačka nalazi. Ono osnovno što određuje način označavanja tačke jest dimenzionalnost prostora. Svaka tačka označena je svojim koordinatama, i to s toliko koordinata kolika je dimenzija prostora. Tako će tačka u 2D prostoru biti označena pomoću dvije koordinate: x i y. U 3D prostoru tačka će biti označena pomoću tri koordinate: x, y i z. U nastavku ćemo tačke označavati kao uređene n-torke koordinata, npr. (x, y, z) Računarska grafika i animacija 7 Vektorska grafika
Računarska grafika i animacija 8
Vektorska grafika
Računarska grafika i animacija 9
Vektorska grafika
Računarska grafika i animacija 10
Vektorska grafika - Vektor Vektor ćemo promatrati kao usmjerenu dužinu. Vektor će nam obično služiti kao gradijent, tj. pokazatelj koji govori za koliko se nešto mijenja. Zapis vektora, isto kao i tačke zavisi o prostoru u kojem se taj vektor opisuje, te će imati onoliko komponenti kolika je dimenzionalnost prostora. Zbog toga ćemo vektore također zapisivati kao uređene n- torke, npr. = (x,y,z).
Računarska grafika i animacija 11
Vektorska grafika - Vektor
Računarska grafika i animacija 12
Vektorska grafika - Vektor
Računarska grafika i animacija 13
Vektorska grafika - Vektor
Računarska grafika i animacija 14
Vektorska grafika - Vektor Skalarni i vektorski proizvod dva su temeljna operatora linearne algebre, i kao takvi čine nezaobilazan alat računarske grafike. Skalarni proizvod je operacija koja kao rezultat množenja dvaju vektora daje skalar (broj). Npr. za vektore i može se skalarni proizvod definisati jednostavnim izrazom:
Gdje je θ ugao između vektora, a a i b njegovi iznosi.
Računarska grafika i animacija 15
Vektorska grafika - Vektor Vektorski proizvod je operacija koja kao rezultat množenja dvaju vektora (npr. vektora i ) daje treći vektor, smjera koji je okomit na smjerove vektora koje množimo, a orijentaciju mu određuje pravilo desne ruke. Rezultantni vektor piše se kao , a izos mu je:
Računarska grafika i animacija 16
Vektorska grafika - Vektor
Računarska grafika i animacija 17
Vektorska grafika - Interpolacija U računarskoj grafici često se koriste interpolacije. Primjerice, pri animaciji nekog objekta želimo brzinu kojom se objekt kreće smanjiti od početne do konačne u nekoliko koraka, ili pak želimo objekt pomaknuti od jedne pozicije do druge pozicije ali tako da se dobije dojam kontinuiranog kretanja i slično. U svim tim situacijama imamo zadanu početnu i konačnu vrijednost, i naš je zadatak pronaći niz međuvrijednosti. Ovisno o potrebama, interpolaciju možemo raditi na različite načine.
Vektorska grafika - Interpolacija Linearna interpolacija koristi se za interpolaciju između dvije vrijednosti koje smo označavali s x0 i x1. U praksi se, međutim, često javlja problem interpolacije između četiri vrijednosti, odnosno preciznije bi bilo reći između dva para vrijednosti. Primjer: Pravimo program za renderiranje 3D modela s potporom za ljepljenje tekstura na objekte. Kao teksturu smo uzeli sliku pepsi.png - to je slika dimenzija 100 × 400 koja prikazuje limenku pepsi-cole u 256 nijansi sive boje. Naša scena se sastoji od jednog valjka na koji je potrebno zalijepiti ovu teksturu kako konačni rezultat ne bi bio jednobojni valjak već valjak koji izgleda kao limenka pepsi-cole. Potom smo pokrenuli generiranje visokorezolucijskog prikaza naše scene. Prilikom renderiranja, program je utvrdio da slikovnom elementu ekrana na poziciji (352, 692) odgovara element teksture s koordinatama (29.75, 140.25). Postavlja se pitanje – koju ćemo vrijednost slikovnog elementa iz slike teksture uzeti za popunjavanje odabranog slikovnog elementa zaslona?
Računarska grafika i animacija 20
Vektorska grafika - Interpolacija Da su kojim slučajem koordinate u teksturi ispale cjelobrojne, primjerice (29, 140), mogli bismo bez razmišljanja uzeti vrijednost tog slikovnog elemenata. Međutim, to se nije dogodilo. Jedno moguće rješenje problema je postupiti na sljedeći način: zaokružimo dobivene koordinate (29.75, 140.25) → (30, 140) i očitajmo boju slikovnog elementa na tim koordinatama u teksturi. Nažalost, kako zaokruživanje tipično vodi do nazubljenog prikaza i niza drugih problema, bolje je rješenje boju konstruirati interpolacijom. Kako je x koordinata s kojom ulazimo u teksturu 29.75, nalazimo se između slikovnog elementa koji ima x = 29 i slikovnog elementa koji ima x = 30; isto tako, kako je y koordinata s kojom ulazimo u teksturu 140.25, nalazimo se između slikovnog elementa koji ima y = 140 i slikovnog elementa koji ima y = 141. Oko pogođene lokacije imamo dakle 4 slikovna elementa: (29, 140), (30, 140), (29, 141) i (30, 141). Za svaki od tih slikovnih elemenata u teksturi možemo pročitati boju (odnosno u našem slučaju gdje radimo s 256 nijansi sive, možemo pročitati pridruženi intenzitet sive).
Računarska grafika i animacija 21
Vektorska grafika - Interpolacija Ideja bilinearne interpolacije je sljedeća: Pogledajmo intenzitete lijevog i desnog slikovnog elementa za y = 140 i izračunajmo linearnu interpolaciju tog intenziteta. Označimo parametar kojim radimo interpolaciju po horizontali s u. Pri tome u = 0 odgovara intenzitetu lijevog slikovnog elementa, a u = 1 odgovara intenzitetu desnog slikovnog elementa. Konkretna vrijednost parametra u u primjeru je 0.75 (na tri smo četvrtine puta od 29. do 30. slikovnog elementa). Osim lijevog i desnog para slikovnih elemenata na y = 140, u teksturi imamo i lijevi i desni slikovni element na y = 141. Napravimo stoga linearnu interpolaciju intenziteta lijevog i desnog slikovnog elementa koje imamo za y = 141. Time smo dobili dvije interpolirane vrijednosti: jednu za y = 140 a drugu za y = 141.
Računarska grafika i animacija 22
Vektorska grafika - Interpolacija Da bismo dobili konačnu vrijednosti, sada trebamo napraviti linearnu interpolaciju između tih dviju vrijednosti promatrajući naš položaj na y-osi. Označimo s v parametar koji predstavlja interpolaciju po vertikali. Neka v = 0 odgovara interpoliranoj vrijednosti koju smo dobili za y = 140 te neka v = 1 odgovara interpoliranoj vrijednosti koju smo dobili za y = 141. U prosmatranom primjeru, v = 0.25 jer se nalazimo na jednoj četvrtini puta od y = 140 do y = 141. Konačna vrijednost je dakle linearna interpolacija između rezultata dviju linearnih interpolacija – stoga i naziv: bilinearna interpolacija Računarska grafika i animacija 23 Vektorska grafika - Interpolacija
Računarska grafika i animacija 24
Vektorska grafika - Transformacije Afine transformacije su transformacije koje čuvaju kolinearnost i omjere udaljenosti, i čine općenitiju kategoriju od linearnih transformacija. Čuvanje kolinearnosti ima za posljedicu da će tri različite tačke A, B i C koje su u originalnom prostoru kolinearne i nakon transformacije u tačke A′ , B′ i C′ ostati kolinearne (ležat će na istom pravcu). Drugo svojstvo nam govori i da će omjeri udaljenosti tih tačaka ostati nepromijenjeni, tj: d(A, B)/d(A, C) = d(A′ , B ′ )/d(A′ , C′ ), gdje je d(X, Y ) funkcija koja vraća udaljenost tačaka X i Y .
Računarska grafika i animacija 25
Vektorska grafika - Transformacije Afine transformacije čuvaju i paralelnost. Linije koje su u originalnom prostoru paralelne ostat će paralelne i nakon transformacije. Međutim, afine transformacije ne čuvaju uglove niti stvarne dužine. Naime, afinom transformacijom bilo koji trokut moguće je preslikati u bilo koji drugi trokut – posljedica je da se uglovi u trokutu kao niti dužine stranica ne moraju očuvati. Afine transformacije obuhvaćaju sve linearne transformacije kao i neke druge, npr. pomak.
Računarska grafika i animacija 26
Vektorska grafika - Transformacije Euklidske transformacije su posebna vrsta afinih transformacija. Euklidska transformacija je afina transformacija oblika E(v) = L(v)+p, gdje je L ortogonalna linearna transformacija. Euklidska transformacija kao posebna vrsta afine transformacije ima sve osobine afine transformacije. Dodatno, kako je E(u−v) = L(u−v) i kako je L ortogonalna linearna transformacija, E čuva dužine segmenata i uglove između dva linijska segmenta. Drugim riječima, pravougaoni trokut dužina stranica 9, 12 i 15 i nakon Euklidske transformacije ostat će pravougaoni, s upravo tim dužinama stranice.
Računarska grafika i animacija 27
Vektorska grafika - Transformacije Kako bi ove osobine bile zadovoljene, na opći oblik afine transformacije već smo postavili jedno ograničenje – L mora biti ortogonalna linearna transformacija. Postavljanjem daljnjih ograničenja na L i p dolazi se do tri moguće vrste Euklidske transformacije: Translacija Rotacija Refleksija
Računarska grafika i animacija 28
Vektorska grafika - Translacija Translacija je transformacija koja svakoj komponenti tačke u radnom prostoru dodaje određeni pomak. Tačka T translatira se u tačku T ′ . Postupak translacije može se opisati sljedećim jednačinama u radnom prostoru:
gdje su Tx i Ty komponente tačke T a T ′ 1 i T ′ 2
komponente tačke T ′.
Računarska grafika i animacija 29
Vektorska grafika - Transformacije
Računarska grafika i animacija 30
Vektorska grafika - Rotacija Rotacija je transformacija koja tačku rotira oko ishodišta za zadani ugao φ.
Računarska grafika i animacija 31
Vektorska grafika - Rotacija
Računarska grafika i animacija 32
Vektorska grafika - Skaliranje Skaliranje je transformacija koja "skalira" (rasteže ili steže) svaku komponentu tačke. Pri tome je skaliranje svake komponente određeno faktorom skaliranja, pri čemu faktori ne moraju biti isti za sve komponente. Ako je to slučaj, tada govorimo o neproporcionalnom skaliranju. Ako su faktori skaliranja jednaki za sve komponente, tada govorimo o proporcionalnom skaliranju.
Računarska grafika i animacija 33
Vektorska grafika - Skaliranje
Računarska grafika i animacija 34
Vektorska grafika - Skaliranje
Računarska grafika i animacija 35
Vektorska grafika - Smicanje Smicanje je "uzdužna" deformacija čije je djelovanje prikazano na slici na primjeru smicanja na kvadrat. Djelovanje smicanja sastoji se od deformacije uzduž osi x i deformacije uzduž osi y te se opisuje uglovima α i β.
Računarska grafika i animacija 36
Vektorska grafika - Smicanje
Računarska grafika i animacija 37
Vektorska grafika - Smicanje
Računarska grafika i animacija 38
Vektorska grafika Skaliranje, rotacija, refleksija, smicanje i translacija
Računarska grafika i animacija 39
Vektorska grafika - Bézier krive Nazvane su po Pierreu Bézieru koji ih je koristio u dizajnu automobila u Renaultu. Koriste se u računarskoj grafici za modelovanje glatkih krivih, animaciji za definisanje putanja po kojima se objekat kreće, tipografiji za specifikaciju oblika znakova. Bézier krive su glatke krive koje mogu biti određene uređenim skupom kontrolnih tačaka, prva i zadnja kontrolna tačka su krajnje tačke krive.
Računarska grafika i animacija 40
Vektorska grafika - Linearne Bézierove krive Bezierova kriva 1 stepena: Ako su nam date dvije kontrolne tačke P0 i P1, linearna Bezierova kriva je jednostavna ravna crta između te dvije tačke. Kriva je jednaka linearnoj interpolaciji i data pomoću:
Računarska grafika i animacija 41
Vektorska grafika - Kvadratne Bézierove krive Bézierova kriva 2 stepena: Kvadratna Bézierova kriva je putanja praćena funkcijom B(t), kontrolne tačke su P0, P1, i P2,
Kvadratna Bézierova kriva je i dio parabole
Računarska grafika i animacija 42
Vektorska grafika - Kubne Bézierove krive Bézierova kriva 3 stepena: Četiri kontrolne tačke P0, P1, P2 i P3 u ravni ili trodimenzionalnom prostoru definišu kubnu Bézierovu krivu.
Četiri kontrolne tačke: dvije krajnje tačke i dvije tačke
pravca. Zakrivljenost Bézier krive određuje se pomoću dužine, pravca i smjera duži pravca koje spajaju krajnje tačke i tačke pravca.
Računarska grafika i animacija 43
Vektorska grafika - Kubne Bézierove krive
Računarska grafika i animacija 44
Vektorska grafika Kombinovanjem segmenata Bézier krivih kreiraju se putanje (zatvorene i otvorene)
Računarska grafika i animacija 45
Vektorska grafika Otvorena (lijevo) i zatvorena (desno) putanja
Računarska grafika i animacija 46
Vektorska grafika Ako se dvije krive nadovezuju u nekoj tački i duži pravca u toj tački formiraju jednu duž, nadovezivanje će biti glatko. Ako to nije slučaj formiraće se ugaona tačka. Tačke u kojima se segmenti krive nadovezuju su čvorne tačke putanje.
Računarska grafika i animacija 47
Vektorska grafika Putanja mora imati boju i debljinu linije (stroke) da bi bila vidljiva. Za unutrašnjost zatvorene putanje se može definisati boja, gradijent i uzorak (pattern). Postoji “pravilo popunjavanja” za određivanje šta pripada unutrašnjosti putanje Pravilo popunjavanja (fill rule) je algoritam koji se koristi da se odredi koja strana putanje je unutrašnja za dati oblik
Računarska grafika i animacija 48
Vektorska grafika Linearno (gore) i radijalno (dole) gradijentno opunjavanje.
Računarska grafika i animacija 49
Vektorska grafika Popunjavanje kompleksnih oblika
Računarska grafika i animacija 50
Vektorska grafika Krive se obično konstruišu povezivanjem krajeva više manjih segmenata. Kontinuitet je pojam kojim se opisuju pravila o povezivanju pojedinih segmenata. C0 je kontinuitet linije (segmenti imaju samo zajedničku tačku), C1 je tangentni kontinuitet (segmenti imaju i zajednički smjer tangente; prvi izvod polinoma daje jednačinu tangente), C2 je kontinuitet drugog izvoda (i drugi izvod u tački spajanja je isti za oba segmenta, tako da tangente imaju isti intenzitet i smjer). Da bi se osigurao C2 kontinuitet, krive moraju biti najmanje trećeg reda i zbog toga se za modeliranje koriste kubni polinomi. Računarska grafika i animacija 51 Vektorska grafika
Računarska grafika i animacija 52
Vektorska grafika Primjeri standardnih vektorskih formata su: CGM (Computer Graphics Metafile), SVG (Scalable Vector Graphics), EPS (Encapsulated PostScript), SWF (Shockwave Flash), PDF (Portable Document Format), WMF/EMF (Windows Metafile/Enhanced Metafile), kao i brojni formati koji su nisu univerzalni, nego su vezani za komercijalni softver, kao što su: CDR (CorelDraw), DWG (AutoCAD), AI (Adobe Illustrator). Za pohranjivanje vektorske 3D grafike koriste se standardni univerzalni formati kao što su: IGES (Initial Graphics Exchange Specification), STEP (STandardized Exchange of Product), STL (StereoLiTography). Računarska grafika i animacija 53