OpenGL Rendering Pipeline

La rendering pipeline è il percorso che devono seguire i dati grezzi forniti dal programma client prima di essere visualizzati sullo schermo.

Durante questo percorso le informazioni vengono elaborate, trasformate e combinate in base ai valori dei parametri interni di OpenGL.  
I dati in input sono principalmente di due tipi:
- Coordinate spaziali, cioè vertici e punti
- Immagini, pixels e bitmap



Inizialmente questi due tipi di informazioni seguono un percorso differente ma infine vengono combinati per formare l'immagine, memorizzata nel framebuffer, che sarà poi visualizzata.
L'operazione Display List che si vede tra i due flussi principali non è obbligatoria e non influisce sulla visualizzazione dell'immagine bensì sulle prestazioni. Grazie alle Display List, infatti, si possono salvare una serie di valori pre-elaborati in modo da saltare alcuni passi della pipeline e velocizzare il lavoro.

Seguendo il percorso dei Vertex Data notiamo che passano per Evaluators, in questo nodo vengono eseguite delle operazioni solo su gli oggetti definiti come curve quali Bezier curve e NURBS. Le curve sono descritte da alcuni Control points sui i quali vengono eseguite calcoli di derivazione per trovare i vari vertici che le compongono.
Il passo successivo (Per-Vertex Operation) è senza dubbio quello più pesante dal punto di vista delle operazioni, infatti qui le coordinate di tutti i vertex vengono sottoposte alle matrici di trasformazione che hanno il compito di eseguire traslazioni, rotazioni e ridimensionamenti. Oltre alle coordinate dei vertici si devono calcolare le posizioni delle texture e gli effetti derivanti dall'illuminazione.
Nel passo successivo, Primitive Assembly, viene eseguito il clipping dei poligoni nascosti, il calcolo delle profondità ed si eseguono le operazioni relative alla proiezione in prospettiva (se attivata).

Per quanto riguarda il percorso delle immagini innanzitutto vengono attivate le procedure di unpacking dai vari buffer di memoria indicati dal programma client, poi le immagini vengono ruotate, ridimensionate e passate alla texture assembly o direttamente alla fase di rasterization. Nella texture assembly si presta particolare attenzione ai calcoli per il texture mapping.

Infine i due flussi si combinano nel processo detto di rasterization e sia i vertici sia le immagini vengono trasformati in fragments, ognuno dei quali rappresenta un pixel del framebuffer. Qui vengono riempiti i poligoni ed eseguite le operazioni di antialiasing, ad ogni fragments viene associato un colore e una profondità.
Prima che i fragments vengano scritti sul framebuffer viene eseguita su di essi la copia dei pixel delle texture, che in base ai parametri adottati possono sovrascrivere o modificare i colori dei poligoni, ed inoltre vengono eseguiti i test in base ai parametri di trasparenza e in base ai valori contenuti nello stencil buffer e nel depth buffer.

Quando, dopo tutte le operazioni di disegno, il framebuffer è finalmente completo esso viene copiato nella memoria video e verrà visualizzato sullo schermo.      

Privacy Policy