Gerarchie di Oggetti Tutti i sistemi avanzati di grafica (PHIGS, OpenGL, DirectDraw, …) permettono di definire un modello come una gerarchia di oggetti.

Slides:



Advertisements
Presentazioni simili
Programmazione ad oggetti
Advertisements

Esercitazioni If nidificati
Type Checking (1° parte)
Metodologie di Programmazione = decomposizione basata su astrazioni
GLUT & OpenGL Ing. Tommaso Coviello Politecnico di Bari
Fondamenti di Informatica Prof. Cantone
DATAWAREHOUSE - Microstrategy
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
OpenGL Libreria grafica composta da circa 150 comandi. Realizzata in vari linguaggi (noi useremo quella in C). Sviluppato dalla Silicon Graphics. Originariamente.
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
3 D.
Texture Mapping.
1 Programmazione ad oggetti in Java E.Mumolo, DEEI
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.
Costruzione di Interfacce Lezione 6 Esercitazione Trasformazioni
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 prove.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Sistemi Multimediali II Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2004/05 Lezione.
Computer Graphics Marco Tarini Università dellInsubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 prove generali.
Costruzione di Interfacce Lezione 5 Trasformazioni Affini
1 Costruzione di Interfacce Primi passi in OpenGL
Matrici di Proiezione Prospettica
Costruzione di Interfacce Lezione 20 Qt + Opengl
1 Costruzione di Interfacce Primi passi in OpenGL
Introduzione al linguaggio C++ 5 lezioni
eliana minicozzi linguaggi1a.a lezione2
INFORMATICA GRAFICA – SSD ING-INF/05 Sistemi di elaborazione delle informazioni a.a. 2007/2008 Esercitazione OpenGL.
INFORMATICA GRAFICA – SSD ING-INF/05 Sistemi di elaborazione delle informazioni a.a. 2007/2008 Argomenti avanzati OpenGL Graphics.
INFORMATICA GRAFICA – SSD ING-INF/05 Sistemi di elaborazione delle informazioni a.a. 2006/2007 LEZIONE PRATICA OpenGL Graphics LEZIONE PRATICA OpenGL Graphics.
Struttura dei sistemi operativi (panoramica)
Interazione utente-programma
Snake 2D Snake 2D Esame: Elementi Grafica Digitale Anno accademico: 2005/06 Studente: Gianluca Racano Docente: Matjaž Hmeljak.
Open Inventor Open Inventor e un object oriented 3D toolkit cioè una libreria di oggetti e metodi per la creazione di applicazioni grafiche interattive.
A.A. 2010/2011Ambienti di Programmazione per il Software di Base1 (Es. – 6) Ambienti di Programmazione per il Software di Base Le Stringhe in C Input.
Lezione IX Laboratorio di Programmazione. Le Classi Una classe C++ è definita come segue: class Nomeclasse { private: // metodi e attrib. visibili solo.
DBMS ( Database Management System)
1 Programmazione grafica: lInterazione Daniele Marini.
1 Gestione della Window Daniele Marini. 2 Definire una Window: GLUT o altro WM /* Standard GLUT initialization */ glutInit(&argc,argv); glutInitDisplayMode.
Lavorare con le matrici in OGL
Elementi di programmazione ad oggetti a. a. 2009/2010 Corso di Laurea Magistrale in Ingegneria Elettronica Docente: Mauro Mazzieri, Dipartimento di Ingegneria.
Gerarchie Nella lezione precedente abbiamo imparato creare una gerarchia di oggetti usando i gruppi (edit>group)
CODIFICA Da flow-chart a C++.
Corso di tecniche della modellazione digitale computer 3D A.A. 2010/2011 docente Arch. Emilio Di Gristina 04.
Creazione progetto in C++/DEV
Prof.ssa Chiara Petrioli -- Fondamenti di programmazione, a.a. 2009/2010 Corso di Fondamenti di programmazione a.a. 2009/2010 Prof.ssa Chiara Petrioli.
Primitive grafiche e interazione Daniele Marini Corso Di Programmazione Grafica e Laboratorio.
Display list e scene graph Daniele Marini Dipartimento di Informatica e Comunicazione.
Trasformazioni in OGL Daniele Marini.
Open Inventor Open Inventor è un object oriented 3D toolkit, cioè una libreria di oggetti e metodi per la creazione di applicazioni grafiche interattive.
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.
Sistemi di riferimento
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
Display list e picking Daniele Marini Corso Di Programmazione Grafica e Laboratorio.
Primitive OpenGL Corso di Programmazione Grafica e Laboratorio Daniele Marini.
1 Programmazione grafica: l’Interazione Daniele Marini.
Introduzione. Introduzione Un’applet Java: Una applet ("applicazioncina") è una applicazione non autonoma, ma pensata per far parte di una pagina Internet.
Lezione 1 Panoramica sui paradigmi di programmazione
Prof.ssa Chiara Petrioli -- corso di programmazione 1, a.a. 2006/2007 Corso di Programmazione 1 a.a.2006/2007 Prof.ssa Chiara Petrioli Corso di Laurea.
Computer Graphics Marco Tarini Università dell’Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2006/07 Lezione.
Università di Torino – Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a prof. Viviana Bono Blocco 7 – Array.
Computer Graphics Marco Tarini Università dell’Insubria Facoltà di Scienze MFN di Varese Corso di Laurea in Informatica Anno Accademico 2005/06 Lezione.
Fondamenti di Informatica II Ingegneria Informatica (A-I) Prof. M.T. PAZIENZA a.a – 3° ciclo.
Lezione X Laboratorio di Programmazione. Struttura di un programma Definizione classe e specifica (parziale) classe.hclasse.cpp main.cpp Specifica metodi.
1 Metodologie di Programmazione = decomposizione basata su astrazioni.
Ese 1 e 3 (del 6 Aprile 2005). Primo Ese Si identifichino gli errori che il compilatore segnalerebbe per il seguente programma Tipi Legami tra dichiarazioni.
Transcript della presentazione:

Gerarchie di Oggetti Tutti i sistemi avanzati di grafica (PHIGS, OpenGL, DirectDraw, …) permettono di definire un modello come una gerarchia di oggetti. Il libro usa come riferimento il sistema SPHIGS (Simplified PHIGS), noi useremo OpenGL. Una gerarchia è una collezione di oggetti organizzata in una struttura ad albero o DAG Modellazione Gerarchica

Modellazione Geometrica Per rappresentare i nostri oggetti useremo un modello geometrico. Utile a rappresentare: Organizzazioni nello spazio e forma di componenti Connessioni e topologia degli oggetti Valori e proprietà dei componenti I modelli spesso hanno struttura gerarchica legata alla loro costruzione bottom-up o top-down. Modellazione Gerarchica 2

Modelli Gerarchici Ogni oggetto è composto da altri oggetti più semplici. Esempio robot con struttura a DAG (a) od albero (b): Modellazione Gerarchica

Retained-Mode Graphics OpenGL lavora in immediate-mode (eccetto le display lists): 1) definizione primitiva 2) visualizzazione 3) cancellazione primitiva Molti altri sistemi (PHIGS, OpenInventor, …) tengono traccia (in un database interno) di tutte le primitive (retained-mode). Questo permette modifiche ed aggiornamenti successivi che sono meno immediati con OpenGL. Modellazione Gerarchica 6

Modelli Gerarchici in OpenGL Modelli gerarchici si modellano in OpenGL usando la matrice GL_MODELVIEW, il suo stack e (spesso) le display lists. Ogni oggetto semplice viene modellato nelle sue coordinate e poi immesso nel disegno complessivo applicandogli una serie di trasformazioni. Permette di riutilizzare una stessa primitiva in più parti del modello Modellazione Gerarchica

Display List (1) Gruppo di comandi OpenGL memorizzati per essere usati in seguito. Utili sia per efficienza che per poter riutilizzare gli oggetti. Comandi fondamentali: int glGenLists(GLsizei range) Alloca range indici di display list void glNewList(GLuint list, GLenum mode) Specifica l’inizio di una lista. Tutti i comandi fino a glEndList() finiscono nella display list. 2 mode possibili: GL_COMPILE e GL_COMPILE_AND_EXECUTE. Modellazione Gerarchica

Display List (2) I comandi in una display lists non possono essere modificati, poiche la display list viene “compilata” per efficienza. Nella lista vengono memorizzati solo i valori delle espressioni. Una display list viene eseguita con il comando: glCallList(Gluint list), che esegue tutti i comandi memorizzati nella display list list. Le display list possono contenere al loro interno altre display list in maniera gerarchica. Modellazione Gerarchica

Strada con 3 Case Diverse Vogliamo disegnare un modello dove abbiamo 3 case. Assumiamo di avere creato, nella funzione init, una display list casa che disegna la casa 1. Modellazione Gerarchica

Programma void display( void ) { glCallList(casa); glLoadIdentity(); glTranslatef(8.0, 0.0, 0.0); glRotatef(90.0, 0.0, 1.0, 0.0); glScale3f(2.0, 3.0, 1.0); glCallList(casa); glTranslatef(3.5, 0.0, -2.5); glScalef(0.75, 0.75, 0.75); glFlush(); } Modellazione Gerarchica

Strutture a 3 Livelli Se vogliamo avere le tre case con un camino possiamo usare display list gerarchiche Assumiamo di avere creato, nella funzione init, anche una display list camino che disegna il caminetto. Modellazione Gerarchica

Programma OpenGL void display( void ) { GLuint casaEcamino = glGenLists(1); glNewList(casaEcamino, GL_COMPILE); glCallList(casa); glTranslatef(0.25, 2.0, -2.0); glScalef(0.25, 0.25, 0.25); glCallList(camino); glEndList(); glCallList(casaEcamino); glLoadIdentity(); glTranslatef(8.0, 0.0, 0.0); glRotatef(90.0, 0.0, 1.0, 0.0); glScalef(2.0, 3.0, 1.0); glCallList(casaEcamino); glLoadIdentity(); glTranslatef(3.5, 0.0, -2.5); glScalef(0.75, 0.75, 0.75); glCallList(casaEcamino); glFlush(); } Modellazione Gerarchica

Nuovo Programma // Senza usare ulteriori display lists. void disegna_casa () { glCallList(casa); glTranslatef(0.25, 2.0, -2.0); glRotatef(-90.0, 0.0, 1.0, 0.0); glScalef(0.25, 0.25, 0.25); glCallList(camino); } void display( void ) { disegna_casa(); glTranslatef(8.0, 0.0, 0.0); glRotatef(90.0, 0.0, 1.0, 0.0); glScalef(2.0, 3.0, 1.0); disegna_casa(); glTranslatef(3.5, 0.0, -2.5); glScalef(0.75, 0.75, 0.75); disegna_casa(); glFlush(); } Modellazione Gerarchica

(S)vantaggi uso display list Era possibile disegnare lo stesso oggetto senza usare alcuna display list. Le display list sono efficienti, ma non possono essere modificate. Molto utili per disegnare parti non modificabili di un disegno, ma non per parti in movimento. Per disegnare oggetti che si congiungono, useremo spesso le operazioni sullo stack della matrice MODELVIEW. Modellazione Gerarchica

Braccio Robot Esempio di un semplicissimo braccio di robot snodato e ruotabile in 2 punti Modellazione Gerarchica

Programma Robot (1) #include <GL/glut.h> #include <stdlib.h> static int shoulder = 0, elbow = 0; int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize (500, 500); glutInitWindowPosition (100, 100); glutCreateWindow (argv[0]); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } Modellazione Gerarchica

Programma Robot (2) void init(void) { glClearColor (0.0, 0.0, 0.0, 0.0); glShadeModel (GL_FLAT); } void display(void) { glClear (GL_COLOR_BUFFER_BIT); glPushMatrix(); glTranslatef (-1.0, 0.0, 0.0); glRotatef ((GLfloat) shoulder, 0.0, 0.0, 1.0); glTranslatef (1.0, 0.0, 0.0); glPushMatrix(); glScalef (2.0, 0.4, 1.0); glutWireCube (1.0); glPopMatrix(); glTranslatef (1.0, 0.0, 0.0); glRotatef ((GLfloat) elbow, 0.0, 0.0, 1.0); glPopMatrix(); glPopMatrix(); glutSwapBuffers(); } Modellazione Gerarchica

Programma Robot (3) void reshape (int w, int h) { glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); gluPerspective(65.0, (GLfloat) w/(GLfloat) h, 1.0, 20.0); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glTranslatef (0.0, 0.0, -5.0); } Modellazione Gerarchica

Programma Robot (4) void keyboard (unsigned char key, int x, int y) { switch (key) { case 's': shoulder = (shoulder + 5) % 360; glutPostRedisplay(); break; case 'S': shoulder = (shoulder - 5) % 360; glutPostRedisplay(); case 'e': elbow = (elbow + 5) % 360; glutPostRedisplay(); case 'E': elbow = (elbow - 5) % 360; glutPostRedisplay(); case 27: exit(0); break; default: break; } } Modellazione Gerarchica

Robot Completo Costruiamo un modello di robot composto da: - Tronco - Testa (rotabile sul collo) - 2 Braccia con mano (rotabili sulla spalla) - Pollice indipendente per ogni mano Modellazione Gerarchica

Robot Composizione delle parti: Modellazione Gerarchica

Attenzioni Problemi: siccome ogni pezzo è nelle sue coordinate devo traslare e scalare. Dove penso che un’operazione sia possibile in futuro metto una matrice da subito. Es.: rotazione della testa. Nota: il pollice opponibile è dalla stessa parte, ed alla stessa distanza nelle due braccia. Per avere la simmetria il sinistro deve essere ruotato di 180° sull’asse delle Y. Modellazione Gerarchica 24

Gestione Attributi Determinati dinamicamente durante la visita. Ogni specifica di un attributo ha valore per tutto il programma, a meno di una riassegnazione. In OpenGL è possibile, allo stesso modo delle matrici, salvare gli attributi in uno stack per poi recuperarli. Modellazione Gerarchica 29

Comandi per Attributi I comandi per salvare e recuperare i valori degli attributi sono: void glPushAttrib(GLbitfield mask); void glPopAttrib(void); Ci sono oltre 20 mask diverse che servono a specificare diversi insiemi di attributi. Esempio: GL_COLOR_BUFFER_BIT, GL_ALL_ATTRIB_BIT Modellazione Gerarchica 29