Note
Struttura
A Steroid V0.0
Paolo Cignoni
cignoni@iei.pi.cnr.it
http://vcg.iei.pi.cnr.it/~cignoni
31 ottobre 2001
A Steroid Step by Step
Partiamo dallo skeleton minimo glut e vediamo passo passo dove si arriva.
Primo problema
Rinominare il progetto e cambiare la display per fare vedere un astronavina
Problema:
Dove vanno a finire le cose disegnate?
Dove si disegna
In Opengl tre concetti
Viewport
ModelView Matrix
Projection Matrix
ViewPort
glViewPort dice in che porzione della finestra si disegna: default tutta la finestra
Ad essere piu’ precisi:
definisce la trasformazione affine che mappa da normalized device coords a window coords
Projection Matrix
Definisce il modo in cui lo spazio viene spiaccicato nello spazio 2d della finestra
Default una matrice identica
In pratica lo spazio tra (-1,-1) e (1,1) finisce nella finestra
E la Z?
Nello Z-buffer ovviamente…
Projection Matrix
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(left,right,bottom,top);
Nelle prossime lezioni vedremo anche
glFrustum
gluPerspective
ModelViewMatrix
Definisce il modo in cui ogni oggetto va a finire nel posto dove deve essere disegnato
Cambia per ogni oggetto!
ModelView Matrix
Si inizia con
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
E una sequenza di
glTranslate
glRotate
glScale ecc.
ModelView Matrix
L’ordine delle trasformazioni e’ IMPORTANTE!
Trucco: leggere la sequenza di trasformazioni all’incontrario e applicarle mentalmente allo spazio.
Visto che cambiano spesso e’ conveniente usare glPushMatrix e glPopMatrix per salvare lo stato della modelview matrix
Secondo Step
Facciamo muovere l’astronave
Facciamo una classe dell’astronave con
Metodo per disegnare
Stato fisico (posizione e velocita’)
Metodo per aggiornare lo stato.
Utilizziamo la idle per disegnare continuamente.
Esercizio 1 (***)
Asteroide Frattale3D
Scrivere la
class AstFract3D : public Ast
Il cui costruttore ha una procedura che genera una superficie frattale. Partire da un semplice solido (un ottaedro) con facce triangolari e sostituire ricorsivamente ogni triangolo con quattro triangoli piu’ piccoli. Al solito i nuovi vertici vengono spostati/perturbati di una piccola quantita’ casuale.
Attenzione i nuovi vertici sono sempre condivisi quindi si deve fare il perturbamento uguale per ogni edge della mesh (hint fare una rand che dipende dalle coordinate dei vertici dell’edge da splittare).
interessante sarebbe quella realizzare quanto sopra tramite una funzione Mesh::Fractalize(int recurs)...
Esercizio 2 (***)
Nuova Astronave con colore
Modificare la classe Mesh per aggiungere la gestione del colore per faccia, sia in loading (modificate il formato raw) che in rendering.
Disegnarsi un’astronave ben colorata. Suggerimenti:
Usare uno dei vari modellatori 3d (vedi alla pagina risorse) convertire in qualche formato ascii e cercare di convertire a mano il file risultante.
Modellarsi l’astronave a mano (carta e matita…)
Nota usate un numero basso (max 50) poligoni!!!
Esercizio 3 (***)
Strafe dell’astronave
Aggiungere all’astronave la possibilita’ di spostarsi lateralmente (strafe a là Doom o Quake): Premendo ALT + frecce laterali l’astronave deve iniziare ad accellerare lateralmente
Modificare la classe base ship per includere la gestione dello strafe e le funzioni callback glut per la gestione della tastiera.
Esercizio 4 (**)
Debugging
Ci sono una serie di errori (tutti involontari ma alcuni volontariamente non corretti) che vanno trovati e corretti.
Risorse
3D Modeller Freeware and Shareware
Ac3d (Win, Linux) http://www.comp.lancs.ac.uk/computing/users/andy/ac3dpov.html
Blender (Win, Linux) http://www.blender.nl/download/download.html
sPatch (Only Win) http://www.cableone.net/alyson/spatch.html
Extreme Wave (Win, Linux) http://agnews.tamu.edu/~jpalmer/ewave/#downloads
Rhino3d (Only Win)
http://www.rhino3d.com/ (Win)
Risorse
Links
http://www.povray.org/links/3D_Programs/Modelling_Programs/
http://sgic.linuxberg.com/x11html/gra_3d.html
http://www.opengl.org/Products/Applications/Modeling.html
http://www-personal.umich.edu/~jeffab/links/modellinks.html
3D Converters
3d Win (Win/Linux)
http://www.stmuc.com/thbaier/index.html
CrossRoads  (Win)
http://www.europa.com/~keithr/crossroads/
VRML2pov (Win/Linux)
http://www.chemicalgraphics.com/paul/vrml2pov/index.html