1. INTRODUZIONE ALLA COMPUTER GRAPHICS
  2. La computer graphics e le sue applicazioni

La computer graphics è il settore dellíinformatica che riguarda líimpiego del calcolatore nel campo della grafica, e quindi lo studio di tecniche di rappresentazione delle informazioni atte a migliorare la comunicazione tra uomo e macchina.

Oggi, in seguito allíincredibile sviluppo della tecnologia hardware e software, siamo in grado di generare, raccogliere, e in seguito elaborare, informazioni in un campo di vastità prima impensabili. Con líaumento del volume delle informazioni, sorge il problema di trasferirle dalla macchina allíuomo in modo al tempo stesso efficiente ed efficace. La computer graphics è orientata direttamente alla soluzione di questo problema: la grafica consente di comunicare tramite figure, schemi e diagrammi e offre uníalternativa stimolante alle stringhe di simboli della tastiera; un grafico può sostituire uníenorme tabella di numeri, e permette a chi lo legge di notarne gli elementi fondamentali e le caratteristiche in modo immediato. Dare al calcolatore la possibilità di esprimere i suoi dati in forma grafica significa dunque aumentare enormemente la capacità di fornire informazioni allíutente.

La computer graphics costituisce uno dei campi dellíinformatica moderna più ricchi di applicazioni. La maggior parte del software che oggi gira su personal computer e workstation utilizza interfacce grafiche basate su sistemi desktop-window, che consentono di gestire simultaneamente diverse attività, di selezionare articoli di un menu, icone, e oggetti sullo schermo. Altre applicazioni molto comuni riguardano la creazione di schemi e diagrammi a due e tre dimensioni per la visualizzazione e la descrizione di funzioni e modelli matematici, fisici ed economici; la produzione di mappe per qualsiasi tipo di informazione geografica; la visualizzazione e líanalisi dei dati generati negli esami di medicina diagnostica (quali ad esempio le tomografie assiali computerizzate, TAC); i sistemi di progettazione assistita dal calcolatore (CAD, dallíinglese Computer Aided Design), per disegnare parti meccaniche, planimetrie di edifici, circuiti stampati.

La computer graphics gioca un ruolo sempre più importante anche nei settori, in rapida espansione, dei sistemi multimediali e dei dispositivi di simulazione e animazione di visualizzazioni scientifiche e ingegneristiche (ad esempio le visualizzazioni di reazioni chimiche e nucleari, di deformazioni di strutture meccaniche sottoposte a diverse sollecitazioni, di sistemi fisiologici), ed è diventata persino uno strumento essenziale in alcune forme di intrattenimento (videogiochi, effetti speciali nei film, etc.).

  1. Lo sviluppo della computer graphics

Diamo ora un rapido sguardo allo sviluppo della computer graphics. Ciò ci consentirà di introdurre alcuni degli aspetti e delle problematiche principali di questo settore di ricerca, che saranno poi ripresi e affrontati più in dettaglio nel seguito.

La computer graphics è un settore piuttosto giovane dellíinformatica, soprattutto se ne consideriamo la diffusione. Infatti, fino ai primi anni ë80, essa costituiva un piccolo campo, estremamente specializzato. Le ragioni di questo fatto sono da ricercarsi sia nel costo elevato delle tecnologie hardware, che nella scarsa disponibilità di programmi applicativi. Solo grazie al notevole progresso tecnologico degli ultimi anni, che ha consentito líimmissione sul mercato di terminali grafici e di programmi applicativi di costo accessibile, la computer graphics si è progressivamente diffusa, al punto di diventare il mezzo più comune di interazione tra uomo e macchina.

Le origini della computer graphics si potrebbero far coincidere con i primi tentativi di utilizzare i tubi a raggi catodici (in breve CRT, dallíinglese cathode ray tube), utilizzati nei comuni apparecchi televisivi, come dispositivi di output grafico. Informalmente, un tubo a raggi catodici è un dispositivo in grado di trasformare segnali elettrici in immagini: esso utilizza i campi elettrici per generare fasci di elettroni ad alta velocità, che, opportunamente indirizzati e deviati, vanno a colpire uno schermo rivestito di materiale fosforescente provocando emissione di luce.

Il primo calcolatore dotato di un CRT come dispositivo di output grafico è stato Whirlwind I, progettato e divenuto operativo nel 1950 presso il Massachusetts Institute of Technology (MIT). Successivamente, nel corso degli anni sessanta, i dispositivi di output grafico sono apparsi anche sul mercato. Da allora il CRT ha mantenuto un ruolo dominante come tecnologia di output (più per il costo relativamente basso e la disponibilità che per una effettiva superiorità tecnologica) e le sue proprietà e limitazioni hanno avuto un effetto profondo sugli sviluppi della computer graphics. Solo il recente sviluppo delle tecnologie dello stato solido potrebbe ridurre, a lungo termine, il ruolo dominante del CRT.

I primi dispositivi di output grafico entrati in commercio negli anni sessanta, e rimasti in uso fino alla metà degli anni ottanta, erano basati sul concetto di grafica vettoriale (dove il termine vettoriale è da intendersi come sinonimo di lineare). La caratteristica principale di questi dispositivi è che il fascio di elettroni, che va a colpire il rivestimento fosforescente del CRT, può muoversi direttamente da una posizione allíaltra, secondo líordine arbitrario dei comandi di display. Chiaramente, annullando líintensità del fascio, questo può essere spostato in una nuova posizione, senza modificare líimmagine visibile. Questa tecnica, chiamata random scan (scansione casuale), è rimasta in uso fino agli anni settanta, quando hanno cominciato a diffondersi i sistemi di grafica raster, basati sulla tecnologia televisiva.

Nella grafica raster, ogni immagine è rappresentata tramite una matrice, chiamata appunto raster, di elementi, o pixel, ciascuno dei quali corrisponde ad una piccola area dellíimmagine. Anziché trattare con linee e punti, posizionati casualmente sulla superficie di visualizzazione del CRT, líelaborazione delle immagini è dunque basata su matrici di pixel che rappresentano líintera area dello schermo. Un CRT a scansione raster percorre, con il suo fascio di elettroni, la matrice di pixel; la scansione dellíimmagine viene fatta sequenzialmente, e líintensità del fascio di elettroni viene regolata in modo da riflettere líintensità di ciascun pixel.

La tecnologia raster ha consentito líintroduzione del colore, realizzato controllando tre fasci di elettroni, relativi ai tre colori primari rosso, verde e blu, così come specificato in corrispondenza di ciascun pixel.

Eí evidente che la tecnologia raster richiede la disponibilità di memorie di capacità elevata: intere griglie, diciamo di 1024 linee di 1024 pixel ciascuna, devono infatti essere memorizzate esplicitamente. Nella grafica vettoriale vi è invece una minore necessità di memoria: per visualizzare una linea è sufficiente memorizzarne gli estremi.

Negli anni ottanta lo spettacolare progresso della tecnologia a semiconduttori, che ha reso disponibili multiprocessori e memorie a basso costo, ha consentito la creazione e la diffusione di interfacce grafiche per personal computer basate sulla tecnologia raster. La progressiva diminuzione dei costi, ha dunque contribuito fortemente alla diffusione dei sistemi raster, al punto che oggi essi rappresentano la tecnologia hardware dominante. Più in generale, il progresso tecnologico degli ultimi ventíanni, ha contribuito moltissimo anche alla crescita e allo sviluppo della computer graphics, che da disciplina altamente specializzata e costosa, è diventata un mezzo standard di interazione con il calcolatore, accessibile a milioni di utenti. Oggi sono in circolazione sottosistemi di pochi chip in grado di visualizzare in tempo reale animazioni tridimensionali, con immagini a colori di oggetti complessi, tipicamente descritti da migliaia di poligoni. Questi sottosistemi possono essere aggiunti non solo alle workstation, ma anche ai personal computer. Inoltre, anche applicazioni quali il photorealistic rendering di oggetti su display raster, considerate fino a poco tempo fa irrealizzabili, fanno oggi parte dello stato dellíarte di questa disciplina.

Anche le tecnologie di input si sono fortemente sviluppate nel corso degli ultimi anni. Oggi, la quasi totalità dei sistemi grafici affianca alla tastiera almeno un altro dispositivo di input grafico: mouse, joystick o data tablet (tavoletta magnetica), solo per citare i più comuni. Questi dispositivi forniscono informazioni di tipo posizionale al sistema, e consentono allíutente di specificare operazioni e comunicare informazioni con un uso della tastiera ridotto al minimo.

Il progresso dei dispositivi hardware, ha infine determinato, in modo del tutto naturale, uníevoluzione delle applicazioni software. Siamo così passati dai pacchetti software di basso livello, forniti dalle industrie per i propri dispositivi di display, agli attuali pacchetti applicativi di alto livello, progettati per essere indipendenti da qualsiasi periferica grafica di input e output, e dunque con una portabilità simile a quella dei linguaggi di programmazione di alto livello (quali FORTRAN, Pascal, o C).

La necessità di sviluppare degli standard grafici, emersa per la prima volta verso la metà degli anni settanta, ha portato nel 1977 alla specificazione del primo sistema grafico tridimensionale, il cosiddetto Core Graphic System (in breve, CORE), prodotto da un gruppo di professionisti afferenti alla Association for Computing Machinery (ACM), poi successivamente ridefinito nel 1979. Il primo pacchetto grafico ufficialmente standardizzato è stato il Graphical Kernel System (GKS), una versione ripulita ed elaborata di CORE, però ristretta alla grafica bidimensionale, standardizzato dallíANSI (American National Standards Institute) nel 1985. Successivamente, nel 1988, uníestensione tridimensionale di GKS, GKS-3D, è diventata uno standard ufficiale, così come un altro sistema grafico ancora più complesso, il PHIGS (Programmerís Hierarchical Interactive Graphics System), trasformato nel 1992 nello standard PHIGS PLUS, un sistema in grado di gestire lo pseudorealistic rendering di oggetti sui display raster.

Oltre agli standard ufficiali, promulgati dalle associazioni internazionali o professionali, sono oggi in circolazione anche standard grafici industriali, sviluppati e commercializzati da compagnie industriali o consorzi di università ed industrie. Tra i più noti, ricordiamo Adobeís PostScript, Silicon Graphicsí OpenGL, Ithaca Softwareís HOOPS, ed il MIT-led X-Consortiumís X Window System. Gli standard industriali sono quelli sicuramente più importanti dal punto di vista commerciale, poiché possono essere aggiornati molto più rapidamente rispetto agli standard ufficiali.

  1. I sistemi grafici interattivi

Il settore della computer graphics che riguarda in modo diretto la progettazione di sistemi grafici che consentono allíutente di interagire con il computer, è chiamato computer graphics interattiva. Con il termine interattiva si vuole distinguere questo settore da altri rami della computer graphics in cui le immagini sono invece generate tramite plotter digitali, film recorder, stampanti, o comunque dispositivi che generano immagini permanenti. Certamente anche questi dispositivi risultano estremamente utili; tuttavia essi non possono essere realmente utilizzati per comunicare con un computer. Al contrario, un computer provvisto di un display è in grado di modificare velocemente le immagini generate, e dunque può rispondere in modo tempestivo alle sollecitazioni dellíutente; in questo modo utente e computer possono effettivamente comunicare tra loro. Le immagini non sono statiche, bensì dinamiche: gli oggetti possono essere mossi, ruotati, ingranditi, possono cambiare forma e colore. Il display di un computer presenta inoltre il vantaggio di permettere di elaborare e costruire immagini di oggetti non solo del mondo reale, ma anche di oggetti astratti, sintetici e di dati che non presentano uníinerente geometria.

Vediamo allora come descrivere, ad alto livello, un sistema grafico interattivo. A livello hardware, un computer riceve dati da un dispositivo di input, e invia delle immagini ad un display. Il software ha tre componenti. La prima, il programma applicativo, è responsabile della creazione e dellíaggiornamento, sulla base delle interazioni con líutente, dei dati o degli oggetti da raffigurare sullo schermo, che sono memorizzati nella seconda componente, il modello applicativo. Il programma applicativo produce le immagini inviando alla terza componente, il sistema grafico, una serie di comandi grafici di output che contengono sia una descrizione geometrica dettagliata di cosa deve essere visualizzato, che gli attributi che specificano come gli oggetti dovranno apparire. Infine, il sistema grafico produce le immagini, e trasferisce líinput dellíutente al programma applicativo.

Il sistema grafico agisce dunque da intermediario tra il programma applicativo ed il display hardware. Esso non solo trasforma gli oggetti descritti nel modello in immagini, ma anche le azioni dellíutente in input per il programma che, di conseguenza, modificherà il modello.

Figura 1.1 Organizzazione concettuale di un sistema grafico interattivo

Il compito principale di chi progetta un programma grafico interattivo è quello di specificare quali classi di dati e oggetti sono da generare e rappresentare graficamente, ed il modo col quale líutente ed il programma applicativo possono interagire per creare e modificare il modello e la sua rappresentazione visuale. Il maggior carico del lavoro di programmazione consiste dunque nella creazione del modello e nella gestione delle interazioni con líutente, piuttosto che nellíeffettiva creazione di immagini, che è invece un compito svolto dal sistema grafico.

Il modello applicativo cattura tutti i dati e gli oggetti, insieme alle relazioni che intercorrono tra essi, rilevanti per i compiti di visualizzazione ed interazione del programma applicativo. Esso dipende dallíapplicazione specifica, ed è creato in modo pressoché indipendente dal particolare dispositivo di display. Un modello di dati può essere rudimentale come un vettore di dati puntuali, o sofisticato quanto una lista con puntatori che rappresenta un database relazionale per la memorizzazione di un insieme di relazioni. Esso memorizza tipicamente le descrizioni di alcune primitive grafiche (punti, linee, curve e poligoni in 2 o 3 dimensioni, poliedri e superfici in 3 dimensioni) che definiscono la forma delle componenti dellíoggetto, insieme ai suoi attributi, ovvero stile grafico delle linee, colore, struttura delle superfici, e alle relazioni di connettività e posizionamento dei dati che descrivono come mettere insieme le varie componenti.

Il modello è creato dal programma applicativo sia come risultato di una precedente computazione, che come parte di una sessione interattiva nella quale líutente, tramite il dispositivo di display, guida passo per passo il processo di costruzione scegliendo componenti e proprietà geometriche e non geometriche dei dati.

Líutente può chiedere in qualsiasi momento al programma applicativo di mostrare una rappresentazione visuale del modello creato fino a quel punto. Il programma deve pertanto convertire una descrizione della porzione del modello da visualizzare, dalla rappresentazione interna della sua geometria in procedure o comandi utilizzabili dal sistema grafico per creare líimmagine. Questo processo di conversione avviene in due fasi. Per prima cosa il programma estrae dal database che memorizza il modello, la porzione da visualizzare, utilizzando qualche criterio di selezione. Quindi, i dati estratti ed i loro attributi sono convertiti in un formato inviabile al sistema grafico. I dati estratti dal database devono essere di tipo geometrico, oppure devono essere convertiti in dati geometrici; inoltre essi possono essere descritti al sistema grafico in termini sia di primitive che il sistema può immediatamente visualizzare, che degli attributi che controllano líaspetto delle primitive. Le primitive visualizzate solitamente coincidono con quelle memorizzate nel modello.

Il sistema grafico consiste tipicamente di un insieme di subroutine di output, corrispondenti a primitive, attributi ed altri elementi, raccolte in una libreria grafica che può essere chiamata dai linguaggi di programmazione di alto livello quali C, Pascal o LISP. La libreria grafica costituisce dunque líinterfaccia tra programma applicativo e sistema grafico: il programma specifica le primitive geometriche e gli attributi alle subroutine, e quindi le subroutine guidano il dispositivo di display, e producono líimmagine. In questo modo, il programma rimane separato dai dettagli sia hardware che software dellíimplementazione della libreria grafica

Vediamo ora come vengono gestite le interazioni tra utente e sistema. Il programma applicativo tipicamente risponde alle interazioni dellíutente in uno tra due modi possibili. Se líazione dellíutente richiede esclusivamente un aggiornamento dello schermo (ad esempio evidenziare un oggetto selezionato o rendere disponibile un nuovo menu) il programma deve solo aggiornare il suo stato interno e chiamare le subroutine della libreria grafica per aggiornare lo schermo, senza dover modificare il database in cui è memorizzato il modello. Al contrario, se líazione dellíutente ha lo scopo di modificare il modello (ad esempio aggiungendo o cancellando una componente) il programma deve prima aggiornare il modello, e successivamente chiamare la libreria per modificare il display, sulla base del nuovo modello. A questo proposito, è importante sottolineare che nessuna variazione significativa di un oggetto sul display può avvenire senza una corrispondente variazione del modello. Lo schermo rappresenta infatti una sorta di finestra sul computer, nel senso che líutente non manipola uníimmagine, ma piuttosto il modello che vi sta dietro. Il sistema grafico non è responsabile della costruzione e delle modifiche del modello, sia in fase iniziale che in risposta alle interazioni dellíutente; il suo unico compito è quello di creare immagini dalle descrizioni geometriche e di trasferire i dati immessi dallíutente.

Questo modo di gestire le interazioni, chiamato event-driven loop, ha una natura strettamente sequenziale, basata sullíalternanza delle azioni dellíutente e delle reazioni del computer. Negli sviluppi futuri si prevede di superare questa limitazione, passando progressivamente a sistemi paralleli, che consentono di gestire input e output simultanei, utilizzando canali multipli di comunicazione.