|
|
|
Paolo Cignoni |
|
cignoni@iei.pi.cnr.it |
|
http://vcg.iei.pi.cnr.it/~cignoni |
|
|
|
31 ottobre 2001 |
|
|
|
|
Partiamo dallo skeleton minimo glut e vediamo
passo passo dove si arriva. |
|
|
|
|
Rinominare il progetto e cambiare la display per
fare vedere un astronavina |
|
Problema: |
|
Dove vanno a finire le cose disegnate? |
|
|
|
|
In Opengl tre concetti |
|
Viewport |
|
ModelView Matrix |
|
Projection Matrix |
|
|
|
|
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 |
|
|
|
|
|
|
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… |
|
|
|
|
|
|
|
|
glMatrixMode(GL_PROJECTION); |
|
glLoadIdentity(); |
|
glOrtho(left,right,bottom,top); |
|
|
|
Nelle prossime lezioni vedremo anche |
|
glFrustum |
|
gluPerspective |
|
|
|
|
|
|
Definisce il modo in cui ogni oggetto va a
finire nel posto dove deve essere disegnato |
|
Cambia per ogni oggetto! |
|
|
|
|
|
|
|
Si inizia con |
|
glMatrixMode(GL_MODELVIEW); |
|
glLoadIdentity(); |
|
E una sequenza di |
|
glTranslate |
|
glRotate |
|
glScale ecc. |
|
|
|
|
|
|
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 |
|
|
|
|
|
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. |
|
|
|
|
|
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)... |
|
|
|
|
|
|
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!!! |
|
|
|
|
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. |
|
|
|
|
Debugging |
|
Ci sono una serie di errori (tutti involontari
ma alcuni volontariamente non corretti) che vanno trovati e corretti. |
|
|
|
|
|
|
|
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) |
|
|
|
|
|
|
|
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 |
|
|
|