La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

Informatica Grafica Modellazione Gerarchica1 Gerarchie di Oggetti l Tutti i sistemi avanzati di grafica (PHIGS, OpenGL, DirectDraw, …) permettono di definire.

Presentazioni simili


Presentazione sul tema: "Informatica Grafica Modellazione Gerarchica1 Gerarchie di Oggetti l Tutti i sistemi avanzati di grafica (PHIGS, OpenGL, DirectDraw, …) permettono di definire."— Transcript della presentazione:

1 Informatica Grafica Modellazione Gerarchica1 Gerarchie di Oggetti l Tutti i sistemi avanzati di grafica (PHIGS, OpenGL, DirectDraw, …) permettono di definire un modello come una gerarchia di oggetti. l 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

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

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

4 Informatica Grafica Modellazione Gerarchica4 Retained-Mode Graphics l OpenGL lavora in immediate-mode (eccetto le display lists): 1) definizione primitiva 2) visualizzazione 3) cancellazione primitiva l 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.

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

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

7 Informatica Grafica Modellazione Gerarchica7 Display List (2) l 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. l Una display list viene eseguita con il comando: glCallList(Gluint list), che esegue tutti i comandi memorizzati nella display list list. l Le display list possono contenere al loro interno altre display list in maniera gerarchica.

8 Informatica Grafica Modellazione Gerarchica8 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.

9 Informatica Grafica Modellazione Gerarchica9 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); glLoadIdentity(); glTranslatef(3.5, 0.0, -2.5); glScalef(0.75, 0.75, 0.75); glCallList(casa); glFlush(); }

10 Informatica Grafica Modellazione Gerarchica10 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.

11 Informatica Grafica Modellazione Gerarchica11 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(); }

12 Informatica Grafica Modellazione Gerarchica12 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(); }

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

14 Informatica Grafica Modellazione Gerarchica14 Braccio Robot Esempio di un semplicissimo braccio di robot snodato e ruotabile in 2 punti

15 Informatica Grafica Modellazione Gerarchica15 Programma Robot (1) #include #include 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; }

16 Informatica Grafica Modellazione Gerarchica16 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); glTranslatef (1.0, 0.0, 0.0);glPushMatrix(); glScalef (2.0, 0.4, 1.0);glutWireCube (1.0); glPopMatrix();glPopMatrix(); glutSwapBuffers();}

17 Informatica Grafica Modellazione Gerarchica17 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); }

18 Informatica Grafica Modellazione Gerarchica18 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(); break; case 'e': elbow = (elbow + 5) % 360; glutPostRedisplay(); break; case 'E': elbow = (elbow - 5) % 360; glutPostRedisplay(); break; case 27: exit(0); break; default: break;}}

19 Informatica Grafica Modellazione Gerarchica19 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

20 Informatica Grafica Modellazione Gerarchica20 Robot l Composizione delle parti:

21 Informatica Grafica Modellazione Gerarchica21 Attenzioni l Problemi: siccome ogni pezzo è nelle sue coordinate devo traslare e scalare. l Dove penso che unoperazione sia possibile in futuro metto una matrice da subito. Es.: rotazione della testa. l 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° sullasse delle Y.

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

23 Informatica Grafica Modellazione Gerarchica23 Comandi per Attributi l 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


Scaricare ppt "Informatica Grafica Modellazione Gerarchica1 Gerarchie di Oggetti l Tutti i sistemi avanzati di grafica (PHIGS, OpenGL, DirectDraw, …) permettono di definire."

Presentazioni simili


Annunci Google