Algoritmus z-buffer

z Wikipédie, slobodnej encyklopédie
Skočit na navigaci Skočit na vyhledávání

Algoritmus z-buffer je algoritmus používaný v počítačovej 3D grafike. Algoritmus je jednoduchý na implementáciu, no veľmi náročný na pamäť – používa až dva buffre.

Podstata algoritmu[upraviť | upraviť zdroj]

  1. Priestorový objekt O so stenami Si*, odlíšenými farebne, alebo úrovňou intenzity tej istej farby premietneme ortogonálne do priemetne v rovine obrazovky počítača. Steny Si* ohraničujúce objekt O sa pritom premietnu do plôch – mnohouholníkov Si na obrazovke počítača. Ich vrcholy Vi* = [xi, yi, zi] sa premietnu do vrcholov Vi = [xi, yi] ((xi, yi) sú pixle) obrazovkových mnohouholníkov Si
  2. Na obrazovke Si vytvoríme ľubovoľnú pixlovú množinu M ohraničujúcu množinu U Si (môže to byť sama množina U Si, jej konvexný obal, ohraničujúci min-max box, ľubovoľne ohraničené okno) a na nej sú definované dva buffre: z-buffer zb(x, y) a refresh-buffer r(x, y) pre každý pixel (x, y) є M. z-buffer inicializujeme na hodnotu - ∞ (dostatočne malé záporné číslo, ktoré v priebehu výpočtov nemožno dosiahnuť) a refresh-buffer na číslo reprezentujúce farbu, alebo intenzitu pozadia. Teda pre každé (x, y) є M : zb(x, y) = - ∞ a r(x, y) = fp (farba pozadia)
  3. Utvoríme si ľubovoľné poradie plôch Si (zoznam Z)(priemety stien Si*) napr. S1, S2, ... a postupne ich spracúvame: začneme plochou S1: Rozložíme ju do rastra R1 a pre každý pixel (x, y) є R1 určíme číslo z(x, y) – hodnotu z-buffra v pixly (x, y) a porovnávame ju so zb(x, y). Ak z(x, y) > zb(x, y), položíme zb(x, y) = z(x, y)(nová hodnota) a do refresh-buffra vložíme ako novú hodnotu v pozícii (x, y) číslo farby (intenzity) steny S1* nad pixlom (x, y). Ak neplatí z(x, y) > zb(x, y) neurobíme nič, prejdeme na ďalší pixel. Ak túto procedúru prevedieme pre všetky pixle (x, y) є R1, prejdeme k ďalšej ploche S2 a urobíme na jej rastrovom rozklade R2 tie isté operácie ako na R1. Po ich realizácii prejdeme opäť k ďalšej ploche S3 ... atď. Po spracovaní všetkých plôch Si obsahuje z-buffer zb(x, y) hodnoty z-ových súradníc pixlov viditeľných plôch (sú najväčšie, ich pixle sú najbližšie k pozorovateľovi a preto sú viditeľné z pozorovacieho miesta). V refresh-buffri sa zasa nachádzajú čísla farieb bodov z tých plôch, ktoré sú najvyššie nad príslušnými pixlami. Ak teda jednotlivé pixle týmito farbami zafarbíme získame obraz, ktorý vidí pozorovateľ zhora. Pri pozorovaní scény zdola sa prirodzene situácia zmení.