U toku rada shader-a se popunjavaju odrE?eni baferi, strukture u memoriji koje se koriste za kona?no iscrtavanje. U toku aplikacije WebGL kreira i popunjava tri vrste bafera koji zajedno ?ine Drawing Buffer, a to su: color, depth i stencil buffer

Color buffer

Color buffer je bafer u kom su sme?tene RGB ili RGBA vrednosti za svaki piksel na ekranu. Fragment shader ?e obezbediti boju za svaki piksel, ali zbog projekcije 3D objekata ina 2D ravan desi?e se da su neke ta?ke (razli?itih boja) preslikavaju na istu (x, y) koordinatu. Koja ?e boja biti na kraju iscrtana zavisi od depth buffer-a koji je opisan u nastavku.

Depth buffer

Kad su se u prvom primeru zadavala temena kvadrata svako temee je bilo odre?eno sa tri vrednosti. Tre?a vrednost u definiciji temena je takozvana Z-vrednost koja je u korelaciji je sa z koordinatom objekta u 3D sistemu. U primeru je iscrtavan 2D objekat pa je z vrednost postavljena na 0. Kod iscrtavanja 3D objekata sve 3D koordinate se preslikavaju na 2D ravan (ekran) i ova vrednost u?estvuje u modeliranju tog preslikavanja i kona?nom rezultatu slike.

Na osnovu ovih vrednosti popunjava se poseban bafer koji se zove depth buffer (nekad je referenciran i kao z-bafer) i koji sadr?i informaciju o udaljenosti ta?aka od kamere.

teapot image teapot depth buffer

Preuzeto sa unspecified.wordpress.com

Kada se 3D model preslika na 2D ravan, neke ta?ke ?e se preslikati na isto mesto. U tom slu?aju WebGL koristi vrednosti iz depth bafera kako bi utvrdio koju ta?ku od njih treba iscrtati. Zavisno od na?ina na koji se sprovodi ova provere (ponekad i jo? nekih vrednosti) kona?na boja piksela se upisuje u drawing buffer.

Da bi ova funkcionalnost bila omogu?ena potrebno je dati instrukciju WebGL-u da omogu?i omogu?ava ovakvo testiranje.

gl.enable(this.GL.DEPTH_TEST); 
                

Funkcija kojom se opisuje na?in provere se odre?uje pozivom posebne funkcije.

void depthFunc(GLenum func)
                

U nastavku je dat kratak opis ovih funkcija tako ?to je navedeno da li se nova vrednost na istoj poziciji upisuje ili ne.

NEVER
ne dolazi do promena
LESS
upisuje se ukoliko je nova depth vrednost manja nego postoje?a
EQUAL
upisuje se ukoliko je nova depth vrednost jednaka sa postoje?om
LEQUAL
upisuje se ukoliko je nova depth vrednost manja ili jednaka sa postoje?om
GREATER
upisuje se ukoliko je nova depth vrednost ve?a nego postoje?a
NOTEQUAL
upisuje se ukoliko je nova depth vrednost razli?ita postoje?e
GEQUAL
upisuje se ukoliko je nova depth vrednost ve?a ili jednaka sa postoje?om
ALWAYS
uvek se primenjuje nova vrednost

Ako je depth test omogu?en, inicijalna vrednost je LESS, ali ako depth test nije omogu?en iscrtavanje ?e se izvr?avati kao da je postavljena ALWAYS vrednost. U tom slu?aju fragmenti ?e se iscrtavati onim redom kojim se obra?uju ?to uglavnom nije po?eljan na?in u slu?ajevima realisti?nih prikaza 3D objekata.

Tako?e, ove treba napomenuti da se za inicijalizaciju vrednosti i color i depth bafera mo?e koristiti slede?a funkcija.

gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
                

rolex oysterdate precision 6694 review pre owned rolex datejust uk replica watches rolex 6062 for sale ulysse nardin perpetual calendar blue price in india fake watches cartier perfume baiser vole tag heuer bracelet replacement replica watches uk rolex daytona serial numbers tag heuer quartz review rolex replica uk cartier cleaning kit superocean chronograph 42 price replica watch

Stencil buffer

Moderni hardverski ure?aji omogu?avaju kori??enje stencil bafera koji se koriste kao takozvane maske. U njima su definisani delovi slike nad kojima se vr?i iscrtavanje, a nad kojima ne. Kori??enje ovakvih bafera znatno uti?e na optimizaciju performansi aplikacije.

Napredak

% pre?eno

Slede?e - Koordinatni sistemi

Slede?a lekcija