[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