Professional Documents
Culture Documents
Određivanje Tačke Na Bézier
Određivanje Tačke Na Bézier
Jednostavan nain reavanja problema odreivanja take C(u) na Bzier-ovoj krivoj za neko u je zamena u u jednaini krive, ali ovaj nain je numeriki nestabilan - dolazi do greke pri raunanju Bernstein-ovih polinoma. Oznaimo kontrolne take na sledei nain: P0 sa 00, P1 sa 01, ... , Pi sa 0i, ... , Pn sa 0n, gde prva cifra oznaava broj iteracije (ovde je 0, a kasnije e biti 1,2,3 itd.). Osnovna ideja de Casteljau-ovog algoritma je izbor take C na dui AB takve da C deli du AB u odnosu u:1-u. Kako se u kree od 0 do 1, taka C data sa A + u(B - A) = (1 - u)A + uB jeste taka dui AB koja je deli u traenom odnosu.
De Casteljau-ov algoritam:
Pretpostavimo da elimo da odredimo taku C(u), gde je u u intervalu [0,1]. Poinjemo od poligonalne linije 00-01-02-03-...-0n i koristei prethodnu formulu nalazimo taku 1i koja deli du odreenu takama 0i i 0(i+1) u odnosu u:1-u. Na ovaj nain dobijamo n taaka 10, 11, 12, ...., 1(n-1) koje definiu novu poligonalnu liniju sastavljenu od n - 1 dui. Primenjujui prethodni postupak na novu poligonalnu liniju dobijamo i drugu liniju od n - 1 taaka 20, 21, ... , 2(n-2) i n - 2 dui. Ponavljajui ovaj proces n puta, dobijamo jednu taku n0. De Casteljau je dokazao da je upravo to taka C(u) na krivoj koja odgovara u.
Primer: Na slici je predstavljena kriva 5. stepena. Odredimo za u=0.4 take 10 na dui 00-01, 11 na dui 01-02, ... , i 14 na 04-05, takve da dele odgovarajue dui u odnosu 0.4 : 0.6, tj. 2:3. Neka je 20 taka koja u zadatom odnosu deli du 10-11. Slino, izaberimo taku 21 na dui 11-12, 22 na dui 12-13 i 23 na 13-14. Tako smo dobili i treu poligonalnu liniju
odreenu takama 20, 21, 22 i 23. Ova linija ima 4 temena i 3 dui. Nastavljajui ovaj postupak dobiemo poligonalnu liniju sa tri temena 30, 31 i 32. Iz etvrte poligonalne linije dobijamo petu sa dve take 40 i 41. Poslednja iteracija daje teme 50 koje odgovara taki C(0.4) na krivoj.
Implementacija
Uzimajui u obzir prethodno izloenu interpretaciju de Casteljau-ovog algoritma, izraunavanje se vri po principu prikazanom na slici:
Prvo, sve kontrolne take rasporedimo u kolonu. Iz poetne kolone 0 izraunavamo kolonu 1; iz kolone 1 dobijamo kolonu 2 i tako dalje. Konano, nakon n iteracija dobijamo jednu taku n0 i to je traena taka krive. Naredni algoritam sumira prethodnu diskusiju. Kao ulazne podatke uzima niz P od n+1 kontrolne take i u izmeu 0 i 1, a vraa taku na Bzier-ovoj krivoj C(u). Ulaz: niz P[0:n] od n+1 taaka i realni broj u iz [0,1] Izlaz: taka na krivoj, C(u) Pomone promenljive: niz taaka Q[0:n]
for i := 0 to n do Q[i] := P[i]; // save input for k := 1 to n do for i := 0 to n - k do Q[i] := (1 - u)Q[i] + u Q[i + 1]; return Q[0];
Rekurzija
Prethodno izraunavanje moe se izvriti rekurzivno. Stavimo da P0,j budu kontrolne take Pj, za j = 0, 1, ..., n, tj. P0,j je j-ti lan u koloni 0. Na sledei nain raunamo j u koloni i:
Preciznije, vrednost Pi,j je zbir (1-u)Pi-1,j (gore levo) i uPi-1,j+1 (dole levo). Krajnji rezultat (i.e., taka na krivoj) je Pn,0. Koristei ovu ideju, formiramo rekurzivnu proceduru:
function deCasteljau(i,j) begin if i = 0 then return P0,j else return (1-u)*deCasteljau(i-1,j) + u*deCasteljau(i-1,j+1) end
Iako procedura deluje jednostavno i kratko, veoma je neefikasna. Da bi izraunali Pn,0, pozivamo funkciju deCasteljau(n,0), a ona se u else delu poziva jo dva puta. Problem je u tome to se skoro sve funkcije za raunanje Pi,j pozivaju vie od jednom.
Koliko je to loe? Sloenost ovog izraunavanja istovetna je sloenosti izraunavanja n-tog lana Fibonacci-jevog niza.
function Fibonacci(n) begin if n = 0 or n = 1 then return 1 else return Fibonacci(n-1) + Fibonacci(n-2) end
Broj poziva funkcije Fibonacci(n) eksponencijalno raste! Zbog toga, rekurzivna verzija Casteljau-ovog algoritma nije pogodna za direktnu implementaciju! konstrukcija krivih ... pomeranje kontrolnih taaka ... odreivanje take na krivoj ... podela krive na dva dela ... poveavanje stepena kriv
Osnovna svojstva Bzier-ovih krivih: 1. Stepen Bzier-ove krive definisane sa n+1 kontrolnih taaka je n: U svakoj baznoj funkciji stepen od u je i + (n - i) = n. Stoga, stepen krive je n. 2. C(u) prolazi kroz take P0 i Pn: Jednostavnim raunom moe sa proveriti da kriva prolazi kroz prvu i poslednju kontrolnu taku.
3. Nenegativnost: Primetimo da se u nalazi u intervalu [0,1], pa su sve bazne funkcije nenegativne. 4. Svojstvo konveksnog omotaa: Bzier-ova kriva odreena sa datih n + 1 kontrolnih taaka lei unutar konveksnog omotaa tih taaka. Na slici je prikazana Bzier-ova kriva 10. stepena, a konveksni omota njenih 11 kontrolnih taaka oznaen je sivom
bojom. itava kriva lei unutar konveksnog omotaa, osim dve krajnje take koje su na rubu.
5. Svojstvo manje varijacije: Za krivu u ravni, ovo svojstvo znai da ni jedna prava ne preseca Bzier-ovu krivu vie puta nego to see kontrolnu poligonalnu liniju.
Na slici, uta linija preseca krivu 3 puta i poligonalnu liniju 7 puta; zelena linija see kkrivu 5, a poligonalnu liniju 7 puta; a plava linija ima po dve presene take i sa krivom i sa poligonalnom linijom. Ovo svojstvo nam govori da je kontrolna poligonalna linija kompleksnija od krive koju odreuje. Naime, poligonalna linija se ee uvre i skree, nego to je to sluaj sa Bzier-ovom krivom. 6. Afina invarijantnost: Rezultat primene afinih transformacija na Bzier-ovu krivu je kriva koja moe biti konstruisana na osnovu slika kontrolnih taaka pri zadatim transformacijama. Dakle, kada elimo da primenimo afine transformacije na Bzier-ovu krivu, jednostavno ih primenimo na kontrolne take (to je znatno lake), a traenu krivu formiramo na osnovu novih, izmenjenih kontrolnih taaka.
Nova promenljiva u definisana je na intervalu [0,1] i njenom zamenom u baznim funkcijama Bn,i(u) dobijamo:
Kako je nova kriva odreena takama P0, P1,..., Pk+v,..., Pn, njena jednaina D(u) je:
Kako samo k-ti sabirak koristi razliitu kontrolnu taku Pk + v, posle sreivanja izraza, dobijamo da se nova kriva predstavlja kao zbir poetne krive i dodatnog lana Bn,k(u)v. Dakle: Taka u na novoj krivoj dobijena je translacijom odgovarajue take u na poetnoj krivoj u pravcu v na rastojanju |Bn,k(u)v| Preciznije, za dato u, imamo taku C(u) na poetnoj, taku D(u) na novoj krivoj i D(u) = C(u) + Bn,k(u)v. Kako v odreuje pravac pomeranja, D(u) je rezultat pomeranja take C(u) u tom istom pravcu. Duina pomeraja je, naravno, intenzitet vektora Bn,k(u)v, pa kada Bn,k(u) dostie maksimum, promena iz C(u) u D(u) je najvea. Na slici su date Bzier-ove krive 8. stepena definisane sa 9 kontrolnih taaka. Poetna kriva oznaena je crnom bojom. Ako pomerimo kontrolnu taku 3 na novu poziciju, crna kriva se menja u crvenu. Na svakoj krivoj oznaena je taka koja odgovara vrednosti parametra u=0.5. Pomeranje take C(0.5) u taku D(0.5) vri se u istom pravcu kao pomeranje kontrolne take na novu poziciju.
Kako je Bn,k(u) razliito od nule na otvorenom intervalu (0,1), Bn,k(u)v nije nula vektor na (0,1). Ovo znai da se, osim krajnjih taaka C(0) i C(1), sve take poetne krive pomeraju na nove pozicije. Promena pozicija kontrolnih taaka menja oblik Bzier-ove krive globalno. konstrukcija krivih ... pomeranje kontrolnih taaka ... odreivanje take na krivoj ... podela krive na dva dela ... poveavanje
Ako paljivo uporedimo ove dve slike, uoiemo da se leva poligonalna linija sastoji iz taaka P00 = P0, P10, P20, P30, P40, P50 i P60 = C(u), dok je desna poligonalna linija
odreena takama P60 = C(u), P51, P42, P33, P24, P15 i P06 = P6. Na narednim slikama prikazan je nain izbora ovih kontrolnih taaka.
Za dato u, potrebno je n iteracija da se izrauna C(u). U procesu raunanja, moemo pamtiti prvu i poslednju taku u svakoj koloni i na kraju skup prvih (odnosno poslednjih) taaka odreuje deo poetne krive definisan na [0,u] (odnosno [u,1]). Stoga, u sledeoj trougaonoj shemi gornja ivica u pravcu strelica i donja ivica u suprotnom pravcu odreuju kontrolne take prve i druge podeone krive respektivno.
Primetimo da je du odreena takama 50 i 51 tangenta na krivu u taki 60, pa je poslednja du poligonalne linije leve krive (npr. od take 50 do take 60) je tangenta na levu krivu, a du poligonalne linije desne krive (npr. izmeu taaka 60 i 51) je tangenta na desnu krivu.
nezadovoljavajui. Tada se moemo fokusirati na promenu samo neodgovarajueg dela. Krivu moemo deliti proizvoljan broj puta, ali treba imati na umu da, ako elimo da se podeoni segmenti krive glatko spajaju, granine take i njihove dve susedne take moraju biti kolinearne. konstrukcija krivih ... pomeranje kontrolnih taaka ... odreivanje take na krivoj ... podela krive na dva dela ... poveavanje step
Svaka du poetne poligonalne linije sadri tano jednu novu kontrolnu taku. Preciznije, du Pi-1Pi sadri novu kontrolnu taku Qi. Iz formule za raunanje novih kontrolnih taaka, vidimo da Qi deli du Pi-1Pi u odnosu 1 - i/(n+1):i/(n+1). Za razliku od de Casteljau-ovog algoritma, ovaj odnos nije konstantan, ve zavisi od vrednosti i. Ipak, raun je veoma slian onom iz de Casteljau-ovog algoritma. Kada dobijemo skup kontrolnih taaka, poetni skup moe biti odbaen. Kako svaka du poetne poligonalne linije sadri novu kontrolnu taku, proces zamene starog skupa novim moe se posmatrati kao odsecanje uglova u poetnim kontrolnim takama. Sledea slika ilustruje ovaj efekat odsecanja uglova. Na njoj je prikazana Bzier-ova kriva 4. stepena, ije su kontrolne take oznaene crvenim kvadratima, a
kontrolna poligonalna linija plavom isprekidanom linijom. U levoj tabeli prikazan je odnos na svakoj dui poetne poligonalne linije. i 1 - i/(n+1) 1 2 3 4 0.8 0.6 0.4 0.2
Primetimo da se stepen krive moe poveavati dok god to sistem dozvoljava, pri emu se sa poveanjem broja kontrolnih taaka poligonalna linija pribliava krivoj. Na sledeim slikama predstavljeno je poveanje stepena poetne krive 6. stepena sa 7 kontrolnih taaka na 7, 8, 10, 15 i 29. Kao to se moe primetiti sa slika, oblik krive ostaje nepromenjen sa poveanjem stepena, ali se poligonalna linija sve vie probliava krivoj.
konstrukcija krivih ... pomeranje kontrolnih taaka ... odreivanje take na krivoj ... podela krive na dva dela ... poveavanje stepena krive ... Bzier-ov
Osnovna namjena programa za sjenanje geometrije je stvaranje novih grafikih primitiva ili uklanjanje ve postojeih. Standardne primitive koje moe primati su
toka, linija i trokut, uz mogunost i prosljeivanja informacija o neposrednom susjedstvu. Unificirani model programa za sjenanje, poznat i pod nazivom model 4.0, koristi dosljedan skup instrukcija za sve tipove programa. Takoer, svi tipovi programa imaju gotovo iste mogunosti: itanje iz tekstura, meuspremnika podataka i obavljanje istog skupa aritmetikih instrukcija. Meutim, skup instrukcija nije identian izmeu razliitih tipova. Na primjer, samo programi za sjenanje fragmenata mogu itati teksture s implicitnim koordinatama, samo programi za sjenanje geometrije mogu emitirati dodatne primitive itd. Raniji modeli 1.x su koristili potpuno razliite instrukcije za programe za sjenanje vrhova i fragmenata, dok se sa kasnijim verzijama (2.x i 3.0) razlika sve vie smanjivala, pribliavajui se tako sadanjem unificiranom modelu. Kada grafiko sklopovlje podrava unificirani model, onda je obino dizajnirano tako da procesorske jedinice za izvravanje programa za sjenanje mogu izvoditi bilo koji tip programa. Takva arhitektura se naziva unificirana arhitektura (engl. Unified Shader Architecture), te ima veliku prednost u brzini izvoenja nad sklopovljem koje ne implementira unificiranu arhitekturu. Prednost dolazi od mogunosti dinamikog organiziranja i balansiranja optereenja izmeu procesorskih jedinica. Na primjer, ako imamo nekoliko prolaza koji koriste samo programe za sjenanje vrhova i fragmenata, tada moemo svim procesorskim jedinicama dodijeliti odreene zadae, iskoritavajui tako sve dostupne resurse, dok bi u sluaju zasebnih arhitektura dio procesorskih jedinica za izvoenje programa za sjenanje geometrije ostao besposlen. Dobar primjer su takoer scene koje su iznimno zahtjevne za jednu vrstu programa, dok su ostali trivijalni, pa se u skladu tome rasporeuje broj jedinica koje rade na kojim vrstama programa. Unato tome, sklopovlje ne mora nuno implementirati unificiranu arhitekturu da bi moglo podravati unificirani model programa za sjenanje i obrnuto.
koji tip primitive je ogranien samo na neposredne susjede, a i tada mi moramo u programu generirati i proslijediti tu informaciju. Tako neto esto zahtjeva ili mijenjanje naina uitavanja i prikazivanja modela u memoriji, ili dinamiko generiranje informacija o susjednim vrhovima, to moe usporiti program, a i stavlja vie optereenja na procesor. Takoer, do informacija o novonastaloj geometriji ne moemo doi do idueg prolaza. Zbog ovih gore navedenih razloga, implementacija metode koju predlae Fleischer u svom radu (Fleischer et al, 1995) bi bila prekompleksna i neefikasna. Prvenstveno zbog potrebe da stanica ima informacije o svim svojim susjednim stanicama i njihovom trenutanom stupnju i nainu razvoja, a potom i zbog kompleksnosti novonastale geometrije. Iako su se unato ovim problemima programi za sjenanje geometrije uz neke pomone i zaobilazne metode koristili za vrlo irok raspon problema, uvoenje novih vrsta programa za sjenanje i teselaciju u DirectX-u 11 eliminira potrebu koritenja programa za sjenanje geometrije kao programa ija je primarna namjena generiranje nove geometrije. Ovime se problem generiranja nove geometrije prebacuje na programe za sjenanje ljuske (engl. hull shaders), programe za sjenanje podruja (engl. domain shaders) i programe za teselaciju (engl. tesselator). U tom sluaju najei tip uporabe programa za sjenanje geometrije nee biti generiranje, ve uklanjanje geometrije za npr. mijenjanje razine detalja prikaza. Generiranje geometrije u programima za sjenanje geometrije e biti ogranieno na specifine primjene za koje nisu potrebne dodatne informacije, poput generiranja tokastih sliica (engl. point sprite).
Ovim nainom izbjegli smo potrebu esterostrukog prolaza kroz scenu, koji je dosad bio uobiajeni nain preslikavanja s kocke, a samim time i smanjili broj poziva API funkcija est puta. Postoje optimizacije gore navedenog algoritma, koje ga jo dodatno ubrzavaju koristei instanciranje geometrije, no postupak u osnovi ostaje isti.
Implementacija
Kao demonstraciju navedenih tehnika i mogunosti primjene programa za sjenanje geometrije, za potrebe ovog rada implementirana su dva programa. Kao osnovno polazite su izabrane metode koje predlae Fleischer u svom radu (Fleischer et al, 1995), uz modifikacije koje su uzimale u obzir ogranienja programa za sjenanje geometrije, te potrebu da se program izvodi u realnom vremenu. Za razliku od predloenih metoda, koje samo za generiranje potrebne geometrije trebaju od od nekoliko sekundi pa do nekoliko sati, ovisno o tipu stanica, metode razvijene za potrebu ovog rada moraju generirati i izraunati projekciju cijele scene unutar 40100ms. Zbog toga je kompleksnost nove stanine geometrije koja se generira za zadani model smanjena na razinu koja omoguava izvoenje u realnom vremenu na dananjem grafikom sklopovlju.
Generiranje bodlji
Originalna ideja je vrlo jednostavna, izabrati sluajne nakupine trokuta na povrini modela kojima susjedi nemaju ve generirane bodlje, te za svaku od njih izvriti program koji simulira rast bodlji sa odreenim parametrima. Prva bitnija promjena koja je napravljena s obzirom na originalnu zamisao je da se ne izabiru pojedine primitive za koje se program izvrava, ve se izvrava za sve primitive. Razlog tomu je da dohvaanje informacije o susjedima i ve generiranoj geometriji u tom prolazu kroz scenu zahtjeva znaajnije promjene u samom uitavanju i prikazu modela u memoriji, te implementaciju programa za sjenanje geometrije koja podrava povratnu vezu transformacija (engl. transform feedback) to nadilazi okvire ovog rada. Druga znaajna promjena je u generiranju teksture za novu geometriju. Dok se u originalnoj metodi boja pojedinih vrhova generira ovisno o parametrima i proteklom vremenu simulacije ponaanja stanica, ovdje se uzima modifikacija Worleyeve metode generiranja staninih tekstura. Dakle, na generiranu Worleyevu teksturu, dodajemo ili oduzimamo dodatni intenzitet koji ovisi o udaljenosti ostalih vrhova poetnog poligona od vrha bodlje. Da bi se naglasila razlika, izabiremo boju koja je razliita od boje koritene za prvobitno generiranu teksturu.
Originalni model iscrtan bez dodatnih programa za sjenanje geometrije. Kugla je teksturirana obinom Worleyevom teksturom:
Generiranje dlake
Originalni Fleischerov prijedlog postupka pomou kojeg se generira dlaka se razlikuje od ostalih postupaka samo u programima koji se koriste za simulaciju rasta stanica. Razlika je ponovno u tome da se rast novih stanica ne simulira izvodei programe koji oponaaju ponaanje stanice, ve da se cijela stanica generira u jednom prolazu. Poto je u ovom sluaju stanica oblika linije, kao zamjenu sam izabrao Bezierove krivulje. Bezierove krivulje su odabrane jer iako nisu raunski prezahtjevne, jo uvijek omoguavaju prilino fleksibilno modeliranje krivulje, to nam pomae u postizanju prirodnog izgleda zakrivljene dlake.
Bezierove krivulje
Bezierove krivulje su parametarske krivulje koje se esto koriste u raunalnoj grafici i ostalim srodnim poljima raunalnih znanosti. Generalizacija Bezierovih krivulja na vie dimenzije su Bezierove povrine. U vektorskoj grafici, Bezierove krivulje se koriste za modeliranje glatkih krivulja kojima moemo proizvoljno mijenjati veliinu. esto se koriste i u vremenskoj domeni, naroito za animacije i dizajniranje suelja. Na primjer, Bezierova krivulja se moe koristiti da odredi brzinu objekta u razliitim trenucima u vremenu, to kao posljedicu ima rezultat prirodnijeg gibanja pri micanju objekta s jednog mjesta na drugo, nego da samo postavimo brzinu na fiksni iznos. Popularizirao ih je 1962. francuski ininjer Pierre Bezier, koji ih je koristio za dizajniranje automobila. Razvijene su 1959. kada je Paul de Casteljau pronaao Casteljauov algoritam koji je rekurzivnom metodom izraunavao vrijednosti polinoma u Bernsteinovom obliku. Iako je algoritam sporiji nego izravni pristup, numeriki je stabilniji.
Implementacija u GLSL-u
Funkcije za izraunavanje krivulje implementirane su kao dio programa za sjenanja geometrije, jer za svaku ulaznu primitivu moramo generirati jednu ili vie Bezierovih krivulja. Postupak je podijeljen u tri logike cjeline. Prva je implementirana u funkciji evaluateBezierPosition koja kao parametre prima etverodimenzionalni vektor koordinata kontrolnih toaka v i vrijeme t, a vraa koordinate izraunate toke. Sama implementacija funkcije je sljedea: Druga funkcija koju smo implementirali je funkcija za raunanje tangente u odreenoj toci Bezierove krivulje. Naziv funkcije je evaluateBezierTangent, prima iste parametre kao evaluateBezierPosition, a vraa vektor tangente. Raunanje vektora smjera tangente je jednostavno raunanje prve derivacije: Zadnja funkcija je emit_bezier koja dijeli krivulju na eljeni broj segmenata, u ovom sluaju 8, i potom alje segmente funkciji za transformaciju koja ih proslijeuje programu za sjenanje fragmenata. Parametri koje prima su kontrolne toke. Na sljedeim slikama moemo vidjeti usporedbu rezultata sa samo pokrenutim programom koji uitava i iscrtava model, i identinog programa sa ukljuenim programima za sjenanje.
Glavni program
Zbog odreenih zahtjeva ovog dijela rada u odnosu na dio koji se bavio samo programima za sjenanje vrhova i fragmenata, za ovaj dio je napravljen zaseban i puno kompleksniji glavni program. Takoer, implementirana je mogunost uitavanja Milkshape3D modela. Kako ovaj program sadri mnogo veu koliinu koda, nastala je potreba da ga se napravi u duhu objektno orijentiranog programiranja zbog lakeg snalaenja. Druga bitnija razlika je da je ovaj program implementiran koristei samo Win32 API i nativne OpenGL 3.2 funkcije, dakle uklonili smo potrebu za zastarjelim GLUT i GLEW bibliotekama, te ARB ekstenzijama. Dijagram razreda projekta:
Razred Model implementiran je kao apstraktni razred, to nam olakava posao ako budemo imali potrebu dodavati uitavanje razliitih tipova modela. Ako elimo napraviti nekoliko prolazaka kroz scenu sa razliitim programima za sjenanje, samo trebamo napraviti eljeni broj instanci razreda Shader i svakoj doznaiti eljene programe. Isto tako, razred Shader se lako moe nadograditi da prihvaa nove tipove programa za sjenanje, poput programa za sjenanje ljuske i povrine koji su dio novog modela 5.0. Jedine potekoe su bile rezultat toga da je OpenGL suelje zamrznuto na verziju 1.1 na svim verzijama Windowsa, i standardne .h i .lib datoteke koje dolaze sa Microsoftovim prevoditeljima nisu aurirane od 1995. Rjeenje je koritenje novih glext.h, wglext.h i gl3.h zaglavnih datoteka koje se mogu nai na slubenoj stranici OpenGL-a, a definiraju sve nove simbole i funkcije. Potom da bi
pristupili novim OpenGL funkcijama, moramo deklarirati pokazivae na te funkcije na sljedei nain:
#include <GL/gl.h> #include <GL/glext.h> #include <GL/wglext.h> extern PFNGLACTIVETEXTUREPROC glActiveTexture; PFNGLACTIVETEXTUREPROC glActiveTexture;
to je zapravo pixell?
Pixel (picture element) je najmanji dio prikaza slike na ekranu s kojim se moe manipulirati. Svaki je pixel oznaen svojom adresom - koja zapravo predstavlja njegov toni poloaj u reetki pixela koja ini prikaz na vaem ekranu. Ukoliko se govori o pixelu u kontekstu ispisa ili fotografije - tada je on najmanji gradivni element svakog ispisa. Finoa detalja to ih neki ureaj ili fotografija moe prikazati naziva se razluivou.
Iako in nije u meunarodnom sustavu (SI) jedinica, u nastavku e se koristiti in kao referentna mjerna jedinica duljine i to zato jer se u svim uputama za koritenje i specifikacijama elektronikih ureaja moemo susresti upravo s ovom mjernom jedinicom. (Jedan in=2,54 cm).
Pixel i monitor
Razluivost monitora (tj. finoa detalja to ih on moe prikazati) iskazuje se u ukupnom broju pixela to ih je on u stanju prikazati u liniji koja je debela samo jedan pixel. Izbroje li se pixeli u toj liniji, i to za jednu takvu horizontalnu liniju i jednu vertikalnu moe se generirati sljedei izraz: broj pixela u horizontali x broj pixela u vertikali. Kad se to zapie brojem, za neki monitor e se dobiti npr. izraz: 1024x768. Ovaj izraz znai da imamo monitor koji neku sliku moe prikazati sa ukupno 1024 pixela horizontalno i 768 pixela vertikalno. to su ovi brojevi vei (naravno za istu veliinu monitora) to je detaljnost prikaza (razluivost) monitora vea. Problem sa ovakvim iskazivanjem razluivosti pojavi se kad se uzme u obzir da postoje monitori razliitih veliina. Jasno je da nikako nije isto prikazati sliku u razluivosti 1024X768 pixela na monitoru irine npr. 1 metar i monitoru irine 10 centimetara. Naime, ako 1024 toaka morate nanizati jednu do druge u jednu liniju, a istovremeno vam je njezina duljina tono odreena (odreuju ju fizike dimenzije monitora) tada e se te toke morati smanjiti ili poveati da bi se mogla popuniti linija. Ako je linija horizontale ekrana duga 10 cm morat e se smanjiti dimenzija toaka ako ih se npr. u tu liniju eli smjestiti 1024. Ukoliko pak duljina horizontale iznosi 1m, tada e se morati poveati dimenzija toakaako ih u tu duljinu mora stati npr. tono 1024. (ista stvar vrijedi i za popunjavanje vertikalne duljine monitora). Poveanje toaka zapravo e naruiti razluivost monitora. Prethodno reeno zapravo znai da iskazivanje razluivosti na nain ukupnog broja toaka (pixela) nije najpouzdanije, jer sa istom rezluivou moe poveavanjem monitora dobiti loija slika. Zato je puno pouzdaniji nain izraavanja razluivosti onaj preko gustoe pixela. Ako npr. monitor ima razluivost od 85 PPI (pixels per inch), tada je podatak puno upotrebljiviji od onog 1024X768. Podatak o gustoi pixela potpuno je neovisan o veliini monitora na kojem e se prikazivati slika. Koliko god monitor imao ina, podatak od 85 PPI jasno govori da e on po jednom svom inu (priblino 2, 54 cm) prikazati 85 pixela. Razluivost dananjih monitora, izraena u gustoi pixela, kree se od 67-130 PPI, i naravno raste.
Pixel i printer
Kvaliteta printera esto se izraava prikazujui koliko toaka (pixela) printer moe isprintati na jednom inchu. Zamislite da pixele niete poput perli na konac, jedan do drugogUkoliko bi ovaj posao umjesto vas radio printer koji bi umjesto nizanja perli na konac, nizao toke na papir, eljeli biste da na jedan inch u jednoj liniju uspije stisnuti to vie toaka (pixela). Zato? Zato jer bi to znailo da e u tom jednom inu moi prikazati vie detalja. Dobar laserski printer moi e na jedan inu stisnuti i do 1200 toaka (razluivost 1200 DPI) - to znai i da bi se na ispisu neeg to ste gledali na monitoru mogli pronai detalji koji se tamo nisu vidjeli. Ukoliko je naime razluivost monitora 85 DPI, a gledate fotografiju vrlo visoke kvalitete, koju zatim isprintate na printeru koji printa do razluivosti od ak 1200 DPI - printer e prikazati detalje koje monitor nije mogao (jer njegova razluivost viestruko nadilazi onu monitora).
Pixel i fotografija
Pria sa pixelima u fotografiji vrlo je slina onoj o monitorima. U fotografiji pixel ponovno oznaava razluivost, ali se zna i koristiti kao mjera veliine neke fotografije. Ukoliko oznaava razluivost, tada se pixelima slino kao i kod monitora pokazuje kvaliteta fotografije Naprimjer, 12 megapixelna fotografija je fotografija visoke razluivosti, do veliine od 12 megapiksela dolo se mnoenjem broja pixela u horizontali i veritkali (npr .4000 pixela x 3000 pixela, u standardnom 4x3 formatu). I u ovoj prii se susreemo sa problemom poveanja. Naime ukoliko bi fotografiju razvili na format jumbo plakata, tada bi se ponovno morala poveati veliina toaka, u odnosu na fotografiju dimenzija npr. 9x13 cm, jer se i u jednu i u drugu horizontalnu dimenziju smjeta tono 4000 toaka. Ovo poveanje pixela oitovalo bi se kao "zrnatost" na plakatu. Zbog toga se pri printanju fotografija koristi gustoa pixela od 300 DPI - jer ona predstavlja zadovoljavajuu kvalitetu ispisa. Ovime je na neki nain u vezu dovedena kvaliteta i veliina fotografija. Naime, ukoliko se eli isprintati neka fotografija na format papira veliine A4, u rezoluciji 300 DPI, fotografija mora imati razluivost od 6 mega pixela. Ovakvi razmjeri postoje za sve dimenzije fotografija. Jednostavan nain za odreivanje koju fotografiju moete razviti do koje maksimalne veliine je da njezine dimenzije izraene u pixelima podijelite sa 300. Na ovaj e se nain dobiti njezina maksimalna veliina u inima (npr., ako obje dimenzije fotografije u razluivosti 1504x1000 podijelimo sa 300, zakljuit emo da ju moemo razviti do dimenzije: 5x3,3 ina tj. 12,7x8,3 cm).