Informatica Grafica Modellazione Gerarchica1 Gerarchie di Oggetti l Tutti i sistemi avanzati di...

23
Modellazione Gerarchica 1 Informatica Grafica 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

Transcript of Informatica Grafica Modellazione Gerarchica1 Gerarchie di Oggetti l Tutti i sistemi avanzati di...

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

Modellazione Gerarchica 1Informatica Grafica

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

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

Modellazione Gerarchica 2Informatica Grafica

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.

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

Modellazione Gerarchica 3Informatica Grafica

Modelli Gerarchici Ogni oggetto è composto da altri oggetti più semplici.

Esempio robot con struttura a DAG (a) od albero (b):

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

Modellazione Gerarchica 4Informatica Grafica

Retained-Mode Graphics OpenGL lavora in immediate-mode (eccetto le

display lists):1) definizione primitiva2) visualizzazione3) 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.

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

Modellazione Gerarchica 5Informatica Grafica

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

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

Modellazione Gerarchica 6Informatica Grafica

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 eGL_COMPILE_AND_EXECUTE.

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

Modellazione Gerarchica 7Informatica Grafica

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.

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

Modellazione Gerarchica 8Informatica Grafica

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.

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

Modellazione Gerarchica 9Informatica Grafica

Programmavoid 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();

}

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

Modellazione Gerarchica 10Informatica Grafica

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.

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

Modellazione Gerarchica 11Informatica Grafica

Programma OpenGLvoid 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();

}

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

Modellazione Gerarchica 12Informatica Grafica

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();

}

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

Modellazione Gerarchica 13Informatica Grafica

(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.

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

Modellazione Gerarchica 14Informatica Grafica

Braccio Robot

Esempio di un semplicissimo braccio di robot snodato e ruotabile in 2 punti

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

Modellazione Gerarchica 15Informatica Grafica

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;

}

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

Modellazione Gerarchica 16Informatica Grafica

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(); }

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

Modellazione Gerarchica 17Informatica Grafica

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);}

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

Modellazione Gerarchica 18Informatica Grafica

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; } }

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

Modellazione Gerarchica 19Informatica Grafica

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

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

Modellazione Gerarchica 20Informatica Grafica

Robot

Composizione delle parti:

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

Modellazione Gerarchica 21Informatica Grafica

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.

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

Modellazione Gerarchica 22Informatica Grafica

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.

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

Modellazione Gerarchica 23Informatica Grafica

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