Algoritmi za uklanjanje poligona
Slika 4. Podjela algoritama.
Odbacivanje stražnjih poligona
Ovo je osnovni oblik odbacivanja suvišnih poligona i dio je geometrijske faze grafičkog protočnog sustava. Ako normale nisu eksplicitno zadane u modelu, onda se određuju prema redoslijedu vrhova. Redoslijed vrhova (normala površine) nam odaje orijentaciju i omogućava odbacivanje onog poligona koji je okrenut prema natrag ovisno o kutu gledanja.
Odbacivanje poligona po projekcijskom volumenu
Algoritmi za odbacivanje poligona po projekcijskom volumenu se oslanjaju na činjenicu da je, ono što nije u vidokrugu kamere, nevidljivo tj. nepotrebno iscrtavati.
Projekcijski volumen je krnja piramida čiji vrh čini bližu, a baza dalju graničnu plohu. Ponekad se, za vrijednost dalje granične plohe, stavlja beskonačna vrijednost tako da se iscrta sve što je u vidokrugu. U tim slučajevima je tehnika razine detalja jako korisna.
Kada bi za svaki poligon u sceni radili proračune da li je u projekcijskom volumenu ili ne, onda bi bolje prošli da jednostavno sve poligone pošaljemo u protočni sustav. Iz ovog razloga koristimo obujmice i strukture za podjelu prostora.
Odbacivanje zaklonjenih poligona
Nakon odbacivanja stražnjih poligona i poligona koji nisu u projekcijskom volumenu, još uvijek imamo velik broj zaklonjenih poligona koje nije potrebno iscrtavati. Algoritmi za odbacivanje zaklonjenih poligona se brinu o tom problemu.Ove algoritme dijelimo na one koji odbacuju poligone u odnosu na točku gledanja i one koje to rade ovisno o dijelu scene (regije) u kojem se promatrač nalazi.
Algoritmi regije računaju vidljivost iz svih dijelova mape. Gdje god se promatrač nalazi, aplikacija ima listu čvorova potencijalno vidljivih iz te pozicije (engl. PVS – Potentially Visible Set). To se računa u fazi pretprocesiranja i stoga ovi algoritmi nisu povoljni za dinamičke scene.
Algoritmi točke gledanja računaju vidljive poligone on-line. Pogodni su za dinamičke scene jer nemaju unaprijed određeni PVS.
Kada govorimo o odbacivanju poligona pomoću sklopovlja, prvo naiđemo na pojam Z-spremnika. Kada neki objekt iscrtamo na ekran pomoću grafičke kartice, dubina iscrtanog slikovnog elementa se spremi u Z-spremnik. Ako se neki drugi objekt mora iscrtati u istom slikovnom elementu, Z-spremnik će usporediti dubinu novog slikovnog elementa s dubinom spremljenom u Z-spremniku i iscrtat će onog bližeg promatraču, a odbaciti onog daljeg. Bliža vrijednost se sprema u Z-spremnik. Ovo odbacivanje se događa u rasterskoj fazi grafičkog protočnog sustava.
Postoji još jedna mogućnost kada se radi o sklopovskoj pomoći pri odbacivanju poligona, a to su sklopovski upiti o zaklanjanju (engl. hardware occlusion queries).
Premda se oba načina oslanjaju na sklopovlje, postoji velika razlika između odbacivanja pomoću Z-spremnika i upita o zaklanjanju. Odbacivanje pomoću upita o zaklanjanju radi u geometrijskoj fazi protočnog sustava, dok Z-spremnik odbacuje poligone u rasterskoj fazi.
Oba načina zahtijevaju od programera da sortira objekte od naprijed prema natrag (front-to-back). Kod odbacivanja pomoću upita o zaklanjanju postoji problem usklađivanja centralnog procesora i grafičkog procesora. Normalan način je da CPU i GPU rade paralelno. Kada CPU izda naredbu GPU-u, ne čeka da ovaj završi nego se naredbe spremaju u red što dozvoljava glavnom procesoru da nastavi s radom. GPU izvršava naredbe kada je spreman. Kod upita o zaklanjanju GPU treba reći CPU-u koliko slikovnih elemenata je iscrtano na zaslon što znači da ih prvo treba iscrtati. Sada CPU mora čekati dok GPU ne završi sa iscrtavanjem. GPU, kod upita o zaklanjanju, ne iscrtava ništa na zaslon jer je iscrtavanje onesposobljeno, no vraća broj vidljivih slikovnih elemenata tj. onih koji bi bili vidljivi da su iscrtani na zaslon.