[Linux-Biella] openGL animations (e SDL)
Daniele (Mastro)
daniele.bilug a gmail.com
Ven 7 Dic 2007 01:13:51 CET
Paul TT ha scritto:
> vorrei prendere lo screenshot dello schermo e spostarlo linearmente
> verso l'alto, rimpicciolendolo piano piano....
ok
praticamente hai un rettangolo su cui applichi una texture..
questo sai farlo?
cmq penso tu possa trovare il codice facilemte.. è l'esempio base :D
riguardo l'animazione..
come te la cavi con le matrici e i vettori? :P
in sostanza ti basta qualche variabile (una per regolare la velocità con
cui si rimpicciolisce) e una per regolare la velocità di spostamento
quindi avrai un vettore direzione (che indica dove andrai a spostare il
tuo rettangolo/quadrato)
dici a opengl che vuoi agire sulla matrice del modello
glMatrixMode( GL_MODELVIEW );
quindi carichi la matrice identità (nessuna trasformazione)
poi su questa applichi rispettivamente una scalatura e una traslazione
NOTA BENE: questo è solo un modo :)
il metodo per traslare è:
glTranslate(xTranslation, yTranslation, zTranslation)
i parametri devono essere float se ben ricordo
per scalare
glScale(xAxis, yAxis, zAxis)
per ruotare (se ti serve)
glRotate(angle, xAxis, yAxis, zAxis)
qui per capire come avviene la rotazione...
xAxis, y, z definiscono un vettore (che dev'essere unitario mi pare, ma
potrei sbagliarmi) il modello viene fatto ruotare intorno a tale vettore
la direzione di rotazione positiva la ottieni con la regola della mano
destra
se il tuo pollice punta nella direzione del vettore l'angolo è positivo
nella direzione con cui si chiude la tua mano :)
occhio che l'ordine con cui applichi le trasformazioni conta :)
un altro modo è usare una matrice 4x4 per definire la trasformazione in
una botta...
una matrice identità non cambia nulla
l'ultima colonna (prime 3 righe) ti permette di traslare
modificando i primi 3 coefficienti sulla diagonale puoi scalare a piacimento
la rotazione è un po' più incasinata da fare a mano :)
qualunque metodo tu scelga tutto ciò va fatto nella funzione che
"disegna" la scena...
prima applichi le trasformazioni e poi disegni il tuo solito rettangolo
con le texture
per creare l'animazione un metodo semplice è aggiornare le tue variabili
all'inizio o alla fine della tua scena e quindi dopo tutti i disegni
aggiungere un
glutPostRedisplay();
che rilancia automaticamente il ridisegnamento della scena con i nuovi
valori...
--
Iscritto alla ML del BiLUG da Lun 27 Mar 2006 21:39:26 CEST
Utilizzatore di Linux dal Luglio 2006
blog: http://natonelbronx.wordpress.com/
Daniele
Maggiori informazioni sulla lista
Linux