Una delle cose più eccitanti da fare con la grafica
al computer è disegnare immagini in movimento. Che tu sia un
ingegnere che vuole osservare un componente meccanico in tutti i
lati, o un pilota che vuole imparare a far volare un aeroplano usando
una simulazione, o semplicemente un appassionato; l'animazione è una
parte importante della computer grafica. Al cinema il movimento viene
ottenuto mediante una sequenza di immagini proiettate per un
ventiquattresimo di secondo sullo schermo. Ogni immagine viene posta
dietro l'obiettivo, il diaframma si apre e l'immagine vine mostrata;
il diaframma si richiude temporaneamente, e la pellicola viene fatta
avanzare di un fotogramma, quindi il fotogramma vien proiettato e
così via. Se si osservano 24 immagini al secondo, il cervello umano
provvede ad amalgamarle in un'unica sequenza animata. Di fatto i
proiettori moderni mostrano un numero doppio di fotogrammi (48) al
secondo per ridurre l'evanescenza. Le immagini in computer grafica
sono solitamente rinfrescate alla velocità di 60 - 76 fotogrammi al
secondo, il limite massimo è dio 120 fotogrammi al secondo. Ma per
il tempo di risposta dell'occhio umano, superare questo limite non
produce alcun effetto visibile. La ragione per cui i film funzionano
è che ogni immagine è completa quando viene proiettata.
Traducendolo in pseudo-linguaggio, si può scrivere:
apri_finestra();
per (i=0; i < 1000; i++)
{
azzera_finestra();
disegna_fotogramma();
aspetta_tempo_1_24esimo_secondo();
}
Se si aggiunge al sistema il tempo per pulire lo
schermo e disegnare un'immagine, questo programma può dare dei
risultati non graditi in quanto si avvicinano pericolosamente a 1/24
di secondo. Gli oggetti visibili per 1/24 di secondo che presentano
un'immagine solida in teoria, ma quando vengono disegnati dal
computer possono apparire come spettri, in quanto il computer non fa
in tempo ad azzerare l'immagine presente per sostituirla con
un'altra. La maggior parte delle applicazioni OpenbGL consente il
doppio buffering, via hardware o software, in modo da ridurre i tempi
morti. Così mentre un'immagine viene mostrata, la successiva viene
creata in memoria ed i due buffer sono scambiati di posto al termine
della proiezione della prima immagine. Pertanto i due buffer lavorano
in parallelo alternandosi nella proiezione, è come avere due
proiettori contemporanei che proiettano lo stesso film alternandone i
fotogrammi. Una versione modificata del programma si scrive in questo
modo:
apri_finestra_in
doppio_buffer();
per (i=0; i < 1000; i++)
{
azzera_finestra();
disegna_fotogramma();
scambia_i_buffer();
}
Nessun commento:
Posta un commento