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
• Registrare 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:
• Modo 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
• Modo differito (retained mode)
Display list - client server
• Modo 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 3.4.2 Angel - pag.99-102)
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
Scarica

Display list e scen graph - Università degli Studi di Milano