Display list e picking Daniele Marini Corso Di Programmazione Grafica e Laboratorio.

Slides:



Advertisements
Presentazioni simili
Università degli Studi di Napoli "Federico II" - a.a. 2002/2003 Le TD nei processi di apprendimento: strategie di apprendimento collaborativo supportate.
Advertisements

MODULO 3 – ELABORAZIONE TESTI
Che cosè? Che cosè? Che cosè? Che cosè? Come creare una pagina… Come creare una pagina… Come creare una pagina… Come creare una pagina… inserire testi,immagini,tabelle…
GLUT & OpenGL Ing. Tommaso Coviello Politecnico di Bari
Funzioni definite dall’utente
Gerarchie di Oggetti Tutti i sistemi avanzati di grafica (PHIGS, OpenGL, DirectDraw, …) permettono di definire un modello come una gerarchia di oggetti.
Corso di Informatica grafica 1 Introduzione Quando si rappresentano modelli di oggetti 3D costituiti da facce poligonali secondo delle proiezioni alcune.
Allocazione dinamica della memoria
Costruzione di Interfacce Lezione 6 Esercitazione Trasformazioni
1 Costruzione di Interfacce Primi passi in OpenGL
Matrici di Proiezione Prospettica
1 Costruzione di Interfacce Primi passi in OpenGL
BPR: BUSINESS PROCESS REENGINEERING
Struttura dei sistemi operativi (panoramica)
memoria gestita staticamente:
Snake 2D Snake 2D Esame: Elementi Grafica Digitale Anno accademico: 2005/06 Studente: Gianluca Racano Docente: Matjaž Hmeljak.
I File.
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
1 Programmazione grafica: lInterazione Daniele Marini.
1 Superfici nascoste Daniele Marini. 2 Ray casting adatto a CSG o superfici parametriche dipende dal punto di vista è una sorta di campionamento spaziale.
1 Effetti impressionistici Daniele Marini. 2 Tecniche discrete di manipolazione del frame buffer: –Texture mapping –Antialiasing –Compositing –Alpha blending.
Lavorare con le matrici in OGL
LOCALIZZAZIONE SATELLITARE GEOREFENRENZIATA. OBIETTIVI Gestire il database cartografico al fine di poter visualizzare la posizione dei mezzi localizzati,
Lezione 17 Esercitazione InDesign
Alcune strategie per Word
Struttura dell’applicazione
Moodle International Conference Roma -21/22 ottobre Moodle come strumento per il Combat Teaching Tommasi Marco Università degli Studi di Udine.
Cosa è una applicazione distribuita?
Il metodo fotogrammetrico
Lo sviluppo top down Le funzioni
Primitive grafiche e interazione Daniele Marini Corso Di Programmazione Grafica e Laboratorio.
Display list e scene graph Daniele Marini Dipartimento di Informatica e Comunicazione.
Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica.
Trasformazioni in OGL Daniele Marini.
Anno accademico 2007/20081 Università degli studi di Roma Tre Progettazione e Realizzazione di un Ambiente per la Configurazione Avanzata di Reti Virtuali.
BIOINFO3 - Lezione 111 CGI-BIN CGI-BIN sono chiamati i programmi la cui esecuzione può essere richiesta attraverso il WEB. Il server web (httpd) della.
Presentazione best practices Tribunale Ordinario di Campobasso Potenziamento dei sistemi di comunicazione finalizzati a far crescere la customer satisfaction.
Superfici nascoste Daniele Marini.
File e Funzioni Si possono distinguere tre tipi di file che vengono utilizzati in MATLAB: M-file: hanno estensione .m e in essi vengono memorizzati i.
Complessità di un algoritmo
Corso Di Programmazione Grafica aa 2007/2008
Texturing Daniele Marini Corso Di Programmazione Grafica aa2007/2008.
Antialiasing parzialmente tratto da: Han-Wei Shen Daniele Marini Corso Di Programmazione Grafica aa2007/2008.
Corso di Programmazione Grafica e Laboratorio Daniele Marini
Corso di Programmazione Grafica e Laboratorio Introduzione a OpenGL Prof. Daniele Marini.
Trasformazioni in OGL Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.
Architettura di OGL e pipe-line Daniele Marini Corso Di Programmazione Grafica.
Primitive grafiche e interazione Daniele Marini Davide Gadia Marco Ronchetti Davide Selmo Corso Di Programmazione Grafica aa2005/2006.
Primitive grafiche e interazione Daniele Marini Corso Di Programmazione Grafica e Laboratorio.
Picking - OpenGL Disegno della scena (display) Impostazione parametri selezione Ripristino parametri Loop Selezione.
Display list e scene graph Daniele Marini Dipartimento di Informatica e Comunicazione.
Corso di Programmazione Grafica e Laboratorio Daniele Marini
Controllare la prospettiva
Architettura di OGL e pipe-line Daniele Marini Davide Gadia Davide Selmo Corso Di Programmazione Grafica aa2005/2006.
Corso di Programmazione Grafica e Laboratorio Prof. Daniele Marini.
Display list e scene graph Daniele Marini Dipartimento di Informatica e Comunicazione.
Primitive OpenGL Corso di Programmazione Grafica e Laboratorio Daniele Marini.
Controllare le proiezioni Daniele Marini Corso Di Programmazione Grafica aa 2007/2008.
1 Programmazione grafica: l’Interazione Daniele Marini.
Ottimizzazione della scena: culling (decimazione) Daniele Marini.
Ottimizzazione della scena: culling (decimazione) Daniele Marini Corso di Programmazione Grafica per il Tempo Reale.
LABVIEW Sommario Che cosa è uno strumento virtuale (VI) creato con LABVIEW Parti di un VI: pannello frontale diagramma a blocchi Confronto tra il principio.
Fondamenti di Informatica 2 Ingegneria Informatica Docente: Giovanni Macchia a.a
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Interazione col DB Per interagire con una base dati da una pagina PHP occorre procedere come segue: Eseguire la connessione al DBMS MySQL in ascolto;
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
1 Laboratorio di Programmazione di Sistema - C Susanna Pelagatti Ricevimento: Me ,
Elaborazione Testi Elementi di Base
SQLite. Introduzione a SQLite Oltre alla possibilità di memorizzare informazioni persistenti attraverso Preferences e files, Android mette a disposizione.
Gestire la navigazione. Creare un’app multi Controller La quasi totalità delle app è suddivisa in più ViewControllers, ognuno con specifiche funzionalità.
Transcript della presentazione:

Display list e picking Daniele Marini Corso Di Programmazione Grafica e Laboratorio

Programmazione Grafica aa2007/20082 Disegnare e cancellare Il problema più complesso nel disegno interattivo è cancellare Tenere memoria di quanto disegnato Due soluzioni: –Display list –Hit list

Programmazione Grafica aa2007/20083 Display list Separare la costruzione del disegno dalle istruzioni per eseguirlo a monitor Il display processor all’origine conteneva una lista di istruzioni elementari per tracciare linee In un’architettura client-sever la display list consente di sgravare il client dal compito di disegnare, affidato al server grafico

Programmazione Grafica aa2007/20084 Due modalità di esecuzione Immediate mode appena il programma esegue una istruzione che definisce una primitiva, essa viene inviata al server grafico per disegno immediato Retained mode la descrizione della primitiva viene inviata e memorizzata nella display list, ma verrà tracciata solo al momento voluto

Programmazione Grafica aa2007/20085 Funzioni fondamentali La display list viene trattata come le altre primitive: 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); glEnd(); glEndList();

Programmazione Grafica aa2007/20086 Flag Il flag GL_COMPILE indica al sistema di spedire la lista al server ma di non disegnarne il contenuto, retained mode Immediate mode: GL_COMPILE_AND_EXECUTE Quando si desidera tracciare il disegno si chiama la funzione glCallList(BOX) Se si desiderano gestire più liste si può generarne il numero in modo automatico: glGenLists(number) Per eseguire tutte le display list: glCallLists()

Programmazione Grafica aa2007/20087 Picking Selezionare un elemento grafico sul monitor In origine, con le light pen l’esistenza della display list permetteva di risalire all’oggetto puntato rilevando l’istante di tempo durante il ridisegno della scena in cui il segnale di interrupt della light pen veniva rilevato, mettendolo in corrispondenza con il contenuto della display list

Programmazione Grafica aa2007/20088 Oggi? Nei sistemi attuali la primitiva grafica ha subito numerose operazioni prima di venire convertita in pixel Per risalire all’oggetto cui il pixel appartiene ci sono varie soluzioni: –Boundig box (allineate agli assi) –Back buffer –Selection

Programmazione Grafica aa2007/20089 Bounding box Chiamati anche extents È il più piccolo rettangolo che contiene l’oggetto Mettere in relazione il rettangolo nello spazio immagine con il rettangolo nello spazio mondo di cui è la proiezione Occorre mantenere una struttura dati in memoria che associa extents con oggetti

Programmazione Grafica aa2007/ Back buffer Usando il double buffering si mantengono due buffer: il front buffer contiene il disegno visualizzato, nel back buffer si ridisegna la scena per il picking e si interroga: –Si disegna un oggetto nel back buffer con un colore di picking –Si rileva la posizione del mouse sul piano immagine –Si legge il contenuto di colore del back buffer con glReadPixels() –Si cerca in una tavola di colori di picking l’oggetto con il colore letto

Programmazione Grafica aa2007/ Selection In OGL è difficile ripercorre all’indietro la pipeline di rendering per identificare l’oggetto che si desidera individuare È perciò disponibile una modalità di rendering chiamata selection mode Questo richiede un extra rendering ogni volta che eseguiamo il picking

Programmazione Grafica aa2007/ Volume di clipping OGL permette di conservare informazione su un volume di clipping specifico di ciascun oggetto, diverso dal volume di clipping complessivo La funzione glRenderMode offre tre opzioni: –GL_RENDER, rendering normale nel color buffer –GL_SELECT, modalità di selezione –GL_FEEDBACK, per ottenere una lista degli oggetti renderizzati

Programmazione Grafica aa2007/ Selezione Quando si entra in modalità selection e si renderizza una scena ogni primitiva che entra nel volume di clipping genera un messaggio di hit che è memorizzato in un buffer chiamato name stack Per identificare un array contenente il dato selezionato si usa la funzione glSelectBuffer

Programmazione Grafica aa2007/ Name stack Per la gestione del name stack ci sono le funzioni: –glSelectBuffer per specificare l’array in cui raccogliere i dati –glInitNames per inizializzare il nome dello stack –glPushName e glPopoName per inserire e togliere nomi nello stack –glLoadName per cambiare il nome dell’elemento che si trova in cima allo stack

Programmazione Grafica aa2007/ Gestione Prima di rendere un oggetto si carica il suo nome nel name stack Lo stack va inizializzato con: –glInitNames(); glPushName(0); La modalità di selezione viene modificata nella callback del mouse Quando si ritorna al modo di rendering la glRenderMode restituisce il numero di hit che sono stati processati e si esamina la hit list

Programmazione Grafica aa2007/ Gestione Se vogliamo selezionare gli oggetti in una regione occorre ridefinire una finestra di clipping entro la quale ridisegnare gli oggetti selezionati Nella mouse callback si modifica anche il volume di clipping per ottenere gli hit nella regione considerata

Programmazione Grafica aa2007/ Esempio La funzione gluPickMatrix(x,y,w,h,*vp) permette di creare una nuova matrice di proiezione centrata in x,y di ampiezza w,h relativa alla viewport vp I parametri sono restituiti dalla callback mouse quando indichiamo la posizione del cursore sul monitor

Programmazione Grafica aa2007/ Mouse callback #define N 2 /*area sensibile attorno al cursore void mouse(int button, int state, in x, int y); { Gluint nameBuffer[SIZE]; Glint hits; Glint viewport[4]; if (button==GLUT_LEFT_BUTTON && state==GLUT_DOWN) {glInitNames(); glPushNames(0); glSelectBuffer(SIZE,nameBuffer); glGetInteger(GL_VIEWPORT, viewport); glMatrixMode(GL_PROJECTION); glPushMatrix(); glLoadIdentity();

Programmazione Grafica aa2007/ /*area di selezione NxN attorno al cursore, flipping della y gluPickMatrix((Gldouble)x,(Gldouble)(viewport[3]-y, N,N,viewport); gluOrtho2D(xmin,xmax,ymin,ymax) /*window di clipping della reshape draw_objects(GL_SELECT); glMatrixMode(GL_PROJECTION); /*recupera la matrice di vista glPopMatrix(); glFlush(); /*ritorna al rendering normale con gli hits hits=glRenderMode(GL_RENDER); process_hits(hits, nameBuffer); glutPostRedisplay(); } void display(); { glClear(GL_COLOR_BUFFER_BIT); draw_objects(GL_RENDER); glFLush(); }