OpenGL Buffers

OpenGL utilizza diversi buffer per mantenere in memoria le informazioni riguardanti i pixel dell'area di rendering.
I buffer differiscono tra loro per il tipo di informazioni che contengono o per la loro posizione.
L'insieme di tutti i buffer si definisce OpenGL Frame Buffer.

Il ruolo svolto dai buffer in OpenGL e' essenziale, a secondo del loro ruolo essi memorizzano  particolari informazioni su ogni pixel del frame che si sta renderizzando.
I buffer messi a disposizone da OpenGL sono:

Color Buffer - Contiene le informazioni riguardanti il colore dei pixel
Depth Buffer o Z Buffer - Contiene informazioni riguardo la profondità dei pixel
Stencil Buffer - Contiene le informazioni per eventuali mask da applicare
Accumulation Buffer - E' un buffer dove è possibile accumulare le immagini per ottenere effetti speciali
Auxiliary Buffer - Sono dei buffer colore ausiliari che possono essere utilizzati come "aree di lavoro"

Le applicazioni non sono costrette ad utilizzare tutti i buffer disponibili, infatti ogni programma OpenGL prima di iniziare qualsiasi operazione di rendering si occupa di selezionare e attivare un Frame Buffer adatto alle proprie esigenze.

Color Buffer
Il buffer del colore è senza dubbio il più importante, esso è indispensabile dato che memorizza il colore di ogni pixel del frame. OpenGL mette a disposizione due tipi di color buffer:
- RGBA
- Index

La modalità più diffusa è quella RGBA dato che consente di memorizzare le informazioni di colore per ogni componente (Red, Green, Blue e Alpha), essa consente un maggiore numero di colori e la possibilità di creare effetti speciali altrimenti impossibili con le vecchia modalità Index.
Normalmente la dimensione del color buffer è di 32 bit, 8 bit (un byte dunque) per ognuna delle componenti.
E' però possibile creare buffer non simmetrici o addirittura privi di un canale (a volte il canale Alpha viene impostato a 0 bit se non si necessita di effettuare trasparenze o effetti simili).
E' possibile richiedere a OpenGL più di un color buffer, specificando l'opzione Double Buffer e/o Stereo Buffer.
Quando chiediamo ad OpenGL un double buffer essa crea due buffer colore, uno principale (Front buffer) e uno nascosto (Back buffer). Le operazioni di disegno avvengono sul back buffer invisibile all'utente, quando il frame è completo il due buffer vengono swappati trasformando il back buffer nel buffer principale visualizzato a schermo e il front buffer nel buffer nascosto.
Specificando l'opzione Stereo Buffer invece OpenGL ci offre due buffer principali denominati buffer sinistro e buffer destro che consentono di creare una immagine simile a quella creata dalla sovrapposizione della vista dell'occhio sinistro e dell'occhio destro.
Specificando entrambe le opzioni si arriva a disporre fino a 4 buffer colore (left front, right front, left back, right back).

Depth Buffer o Z Buffer
E' il buffer della profondità, ad ogni pixel è associata una determinata profondità che naturalmente dipende dalla sua posizione all'interno della scena. Un pixel appartenente ad un oggetto molto lontano un alto valore di profondità mentre un oggetto molto vicino alla "camera" avrà un valore molto basso.
Questo buffer è indispensabile per visualizzare gli oggetti in base alla distanza dal punto di vista invece che in base all'ordine nel quale vengono disegnati.
Di norma tutte le applicazioni OpenGL utilizzano il Depth Buffer e la sua dimensione è di solito di 16 bits con evidentemente 2^16 livelli di profondità.

Stencil Buffer
Lo Stencil buffer permette di renderizzare sul frame buffer attraverso una maschera che ci consente di disegnare solo su alcune porzioni del frame.
Per creare una maschera dobbiamo renderizzare sullo stencil buffer, per ogni pixel che andremo a modificare verrà memorizzato un 1. Renderizzando sempre sullo stesso frame un nuovo oggetto possiamo indicare di modificare un pixel solo se il valore relativo al dato pixel nello stencil buffer è uguale 1 ovvero appartenente alla maschera.
In questo modo il nuovo oggetto verrà renderizzato solo all'interno dell'area precedentemente delimitata.
In base alla dimensione in bit dello stencil buffer è possibile creare diversi strati di maschere.
Viene utilizzato per le ombre realistiche, riflessioni, filtri, rendering all'interno
di forme irregolari.

Accumulation Buffer
L'accumulation buffer è utilizzato per ottenere effetti speciali mediante l'accumulazione di diverse immagini, permette di ottenere quello che in fotografia è conosciuto come sovra-esposizione.
L'accumulation buffer di norma ha un numero di bit per canale doppio rispetto a quello del color buffer ed è piuttosto lento dato che raramente è supportato direttamente in hardware.
Viene utilizzato per soft shadows, motion blur, effetto depth field etc.

Privacy Policy