Hm. Asi je to najivni dotaz. S opengl si (jako zacatecnik) hraji jiz delsi dobu, ale trochu mi chybi jedna "cunarna" : jde zakazat zapis do z-bufferu?
tj. nakreslim si scenu (treba pevnou) vcetne z-bufferu a pak do ni budu pridavat dalsi veci, ale ty nesmi z-buffer aktualizovat. (ovsem musi ho brat v uvahu - nekreslit se za scenu a pod.)
Resenim by bylo udelat si pred kazdym kreslenim zalohu z-bufferu, nechat ho rw a pak ho po kazdem polygonu/skupine naprat zpet, ale to by mne co do rychlosti neuspokojilo :-)
Funkcia
void glDepthMask(
GLboolean flag
);
robi presne to, co potrebujes. Parameter flag nastavis na hodnotu GL_TRUE ak chces zapis do z-bufferu povolit, alebo GL_FALSE ak chces zapis zakazat.
Aktualny stav zistis volanim funkcie
void glGetBooleanv(
GLenum pname,
GLboolean *params
);
kde parameter pname nastavis na GL_DEPTH_WRITEMASK a pointer params nasmerujes na miesto v pamati, kam sa ma aktualny stav ulozit (napriklad na nejaku alokovanu premennu typu GLboolean). Stav moze nadobudnut hodnotu GL_TRUE alebo GL_FALSE. Vyznam je obdobny ako pri parametri flag funkcie glDepthMask.
Prednastavena hodnota je GL_TRUE, cize povoleny zapis.
Zakázání zápisu do Z-bufferu není žádní čuňárna, ale běžně se dělá například při vykreslování průhledných předmětů, které musí být vykresleny až poslední a ručně seřazené podle Z-ové vzdálenosti.
Techniku vypnutí Z-bufferu už byla popsána v předchozí odpovědi. Pokud chcete provádět další testy se Z-bufferem, můžete si zkusit měnit funkci pro porovnání hloubky uložené v Z-bufferu a fragmentu. Popsáno to bude v příští části (úterý).
Co se týče rychlosti, tak kopírování rastrových dat Z akcelerátoru DO PC je obecně velmi pomalé.