Display list e scene graph Daniele Marini Dipartimento di Informatica e Comunicazione
Display List Per poter gestire eventi e interazione è necessario tener traccia della struttura dati grafica generata dal programma e modificata dalla interazione È più difficile cancellare che disegnare!
Display list - origini Origine nei sistemi grafici pre-workstation display memory diplay file display listRegistrare in una memoria dedicata (display memory) del display processor le istruzioni a basso livello (nella forma di diplay file o display list) per generare il disegno sul monitor Si distingueva tra monitor a memoria (storage) e monitor refresh (raster) Negli storage la DL poteva essere rimossa, nei refresh la DL doveva venire attraversata a ≈ 50 Hz
Display list - client server Oggi il display processor è un server grafico e il programma applicativo può essere in esecuzione su un client Il bottleneck non è tra host e DP, ma tra server e client - due modalità di display: immediate modeModo immediato (immediate mode)- la primitiva grafica viene spedita al server al momento in cui è definita, e non se ne conserva memoria; per ridisegnarla il programma deve eseguire nuovamente l’istruzione che genera la primitiva retained modeModo differito (retained mode)
Display list - client server retained modeModo differito (retained mode) - la descrizione della primitiva viene posta in una display list che risiede nel server grafico, la DL viene attraversata su richiesta del client per ridisegnare la figura Vantaggi: »minor traffico di rete »Il client sfrutta le performance grafiche del server »Si tiene memoria della figura per successive modifiche e interazione Svantaggi: »Costo di memoria
OGL e Display list Creazione: glNewList, glEndList #define BOX 1 /* definisce un quadrato, attribuisce il nome BOX e il numero 1 */ glNewList(BOX, GL_COMPILE); glBegin(GL_POLYGON); glColor3f(1.0, 0.0, 0.0); glVertex2f(-1.0, -1.0); glVertex2f(1.0, -1.0); glVertex2f(1.0, 1.0); glVertex2f(-1.0, 1.0); glEnd(); glEndList;
GL_COMPILE flag - indica al sistema di inviare la display list al server ma di non visualizzare la struttura BOX GL_COMPILE_AND_EXECUTE il display è immediato Per disegnare la struttura si esegue la funzione: glCallList(BOX); Cambiando attributi alla struttura o modificando i parametri di window, viewport, o di proiezione ed eseguendo la glCallList la figura viene disegnata modificata
La display list viene usata in modo massiccio per programmi di modellazione geometrica, per trasformare la geometria degli oggetti si usano matrici, attributi e trasformazioni possono essere nidificate con una gestione a stack: glPushAttrib(GL_ALL_ATTRIB_BITS); glPushMatrix(); e recuperati con: glPopAttrib(); glPopMatrix(); Si possono gestire più liste contemporaneamente: glGenLists(number); permette di creare liste con identificatori consecutivi, restituendo il primo intero di number disponibile, sono consecutivi corrispondenti a label non ancora usate; glCallLists permette di eseguire, visualizzandole contemporaneamente, tutte le liste definite (es. gestione del testo con display list, paragrafo Angel - pag )
Scene graph Una scena complessa può essere descritta da un grafo (es. un albero) ad ogni nodo del grafo sono associate trasformazioni e proprietà di apparenza degli oggetti della scena