SlideShare une entreprise Scribd logo
1  sur  7
Télécharger pour lire hors ligne
Principi di Computer Graphics: progetto finale

                                  Michele Donadoni                                     Cristina Di Risio
                                 Universit` di Trento
                                          a                                           Universit` di Trento
                                                                                               a
                          michele.donadoni@studenti.unitn.it                          dirisio@disi.unitn.it
                                               Raffaele De Amicis, Giuseppe Conti

1     Introduzione

   Relazione per l’esame finale del corso di Principi di Computer Graphics. Il progetto prevede l’implementazione del
famoso gioco “Arkanoid” con le seguenti varianti:
      - tre dimensioni anzich` due;
                             e
      - possibilit` di giocare in due giocatori collegati alla stessa rete.
                  a
    Maggiori dettagli sulle regole del gioco sono mostrate nella successiva sotto-sezione.

1.1     Notazioni e funzionamento

    Nella relazione utilizziamo le seguenti definizioni:
      - box: contenitore esterno in cui si svolge il gioco;
      - base: piattaforma mobile posta nella parte inferiore del box ad un’altezza prestabilita;
      - mattoncini: blocchi (tipicamente collocati nella met` superiore del box) che devono essere colpiti dalla pallina;
                                                            a
      - mattoncino-bonus: cubetto che compare colpendo un tipo particolare di mattoncino e si sposta verso il basso.
    L’applicazione prevede sia l’utilizzo di un solo giocatore, sia quello con due giocatori (figura 1).
L’utente pu` regolare la visuale del gioco in due modi: con l’utilizzo del mouse oppure con la tastiera (utilizzando i tasti con
             o
le lettere: E, S, D, F, A e Z).
La base si muove tramite tastiera (freccie).




                                               Figure 1: Selezione della modalit` di gioco
                                                                                a
Esistono quattro tipi di mattoncini, differenziati in base al colore:
   1. grigio: indistruttibili;
   2. rossi : sparisono quando vengono colpiti;
   3. blu : quando vengono colpiti diventano rossi;

   4. gialli : quando vengono colpiti viene lasciato cadere un mattoncino-bonus che, se viene intercettato dalla base, fornisce
      un bonus.




                                          Figure 2: Esempio di schermata dell’applicazione


                                                         `
   Nella modalit` di gioco con due giocatori lo scenario e il seguente:
                a
    - entrambi i giocatori contribuiscono ad un unico punteggio finale;
                           `
    - il numero delle vite e lo stesso;
    - le due basi sono collate su livelli di altezza differenti;
    - si utilizza un’unica pallina, con cui entrambi i giocatori possono interagire;
    - solamente l’utente “Server” pu` iniziare una nuova partita e scegliere il livello del gioco;
                                    o
    - qualunque giocatore pu` mettere in pausa il gioco. Il gioco rimane in pausa finch` lo stesso utente che lo ha interrotto,
                             o                                                        e
      decide di riprenderlo;



Punteggio
Il giocatore vince una partita quando nel box non sono presenti mattoncini non industruttibili. Ogni volta che la pallina tocca
la faccia inferiore del box, il giocatore perde una vita e finch` ha almeno una vita pu` continuare il gioco senza che venga
                                                                  e                        o
ripristinata la situazione iniziale del mattoncini. In ogni partita ci sono a disposizione 10 vite.
Ogni volta che la pallina colpisce un mattoncino, il punteggio di quella partita aumenta di 10 punti.

Grafica
                                                      `
Poich` in tre dimensioni, con lo sfondo omogeneo, non e semplice individuare la direzione della pallina, per facilitare
       e
l’utilizzo del gioco sono stati introdotti:
- una traccia (“impronta”) lasciata dalla pallina quando rimbalza su una parete (di breve durata);
      - un effetto sonoro ogni volta che la pallina tocca una parete;
      - una proiezione circolare della pallina sulla parete inferiore del box, che assume diverse dimensioni in base alla lon-
        tananza della pallina da terra.

2     Implementazione

2.1     Stack e matrici

                                               `
    Il cento del nostro sistema di riferimento e posizionato nel centro della faccia inferiore del box. Ad eccezione dei movi-
menti eseguti per cambiare la visuale del box (da eseguire con il mouse), tutti gli altri movimenti vengono eseguiti senza
l’utilizzo delle librerie jogl per ruotare o traslare il sistema di assi cartesiani, ma tramite l’utilizzo delle nostre apposite
matrici.
    Uno stack salva le matrici che utilizziamo, salvandole nel preciso ordine di inserimento, in modo tale da rendere possibile
la rimozione delle ultime matrici inserite.
Per identificare un punto tridimensionale utilizziamo un vettore (chiamato tupla) che memorizza le coordinate x, y e z pi` un
                                                                                                                           u
quarto valore (=1) che serve per effettuare operazioni con le matrici di dimensioni 4 × 4.
Sotto riportiamo le matrici, dipendenti dai parametri forniti input:

Matrice di traslazione
                                                      `
La matrice di traslazione rispetto ai valori x, y e z e la seguente:

                                                                             
                                                           1 0         0    0
                                                          0 1         0    0 
                                                                             
                                                          0 0         1    0 
                                                           x y         z    1


Matrici di rotazione
Sotto riportiamo le matrici di rotazione dell’angolo α (in radianti) rispetto all’asse x, y e z rispettivamente:

                                                                                         
              1    0       0   0                    cos(α) 0 −sin(α) 0      cos(α) sin(α) 0 0
             0 cos(α) sin(α) 0  
                                                    0   1    0    0   −sin(α) cos(α) 0 0 
                                                                                            
             0 −sin(α) cos(α) 0                  sin(α) 0 cos(α) 0        0      0   1 0 
              0    0       0   1                       0   0    0    1         0      0   0 1


Matrice di “scaling”
Anche se non la utilizziamo nel codice, abbiamo definito anche la matrice per scalare il sistema di riferimento rispetto agli
angoli αx , αy , αz :

                                                                              
                                                       αx      0       0     0
                                                      0       αy      0     0 
                                                                              
                                                      0       0       αz    0 
                                                        0      0       0     1


Operazioni con le matrici
Per ottenere un’unica matrice composta da tutte le matrici presenti nello stack vengono moltiplicate le matrici tutte partendo
dall’ultima inserita.
Sia A una matrice e P un punto con coordinate riferite al sistema di riferimento rappresentato dalla matrice A; per conoscere
le coordinate assolute di P si moltiplica la matrice A per il vettore rappresentante il punto P .


2.2     Traiettoria della pallina

    La pallina parte da una determinata altezza con un’angolazione casuale rivolta verso l’alto (in modo da concede pi` tempo
                                                                                                                          u
all’utente). Ogni volta che la pallina intercetta una parete del box, deve cambiare la sua traiettoria, secondo le leggi fisiche di
riflessione. Alla pallina non viene applica nessuna forza di attrito, n` di gravit` .
                                                                       e         a
                              `
La posizione della pallina e caratterizzata da una propria matrice: il centro del sistema rappresentato da tale matrice costitu-
isce il centro della pallina.
La pallina si muove tramite traslazioni sull’asse delle x e rotazioni sugli assi y o z. L’ampiezza dell’angolo di rotazione
dipende dall’angolo di impatto con la parete e dal tipo di parete (frontale, superiore, laterale, ecc...).
                                                                `
Quando la pallina intercetta uno spigolo, la nuova direzione e casuale (entro un certo range dipendente dallo spigolo) poich`    e
ora l’impatto non avviene contro un’unica parete, ma tocca due o pi` pareti del box.
                                                                       u

    Sia P = (x, y, z) il punto in cui la pallina intercetta una parete del box (le coordinate di P sono assolute). Nel momento
dell’impatto, il sistema di riferimento della pallina ha un’angolazione di αy sull’asse y e αz sull’asse z (l’angolo rispetto
all’asse x e sempre nullo).
           `
Per sapere come ruotare il sitema di riferimento della pallina, in modo tale da ottenere un rimbalzo sulla parete, vengono
seguite le seguenti regole:
      • se la parete intercettata e laterale (destra o sinistra): il sistema di riferimento dovr` avere un’angolo αy = 180 − αy ;
                                  `                                                             a
      • se la parete intercettata e posteriore o anteriore: il sistema di riferimento dovr` avere un’angolo αy = −αy ;
                                  `                                                       a
      • se la parete intercettata e quella superiore: il sistema di riferimento dovr` avere un’angolo αz = −αz .
                                  `                                                 a
Gli angoli αy e αz sono sempre espressi in gradi e considerati con valori compresi tra 0 e 360. Quindi il nuovo sistema di
riferimento per la pallina sar` composto dalle seguenti matrici (nell’esatto ordine):
                              a
      - aggiunta di una matrice di traslazione di x, y, z rispettivamente sull’asse x, y, z;
      - aggiunta di una matrice di rotazione rispetto all’asse y di αy ;
      - aggiunta di una matrice di rotazione rispetto all’asse z di αz ;

2.3     Movimento della base

            `
   La base e libera di muoversi all’interno del box ad un’altezza prefissata.
La base mantiene sempre una posizione in cui i suoi lati siano paralleli con quelli del box (figura 3).
                                                                                                  `
Le freccie sulla tastiera determinano il movimento della base: la direzione “diritto” per la base e rappresentata dal punto di
vista dell’utente in quel preciso momento (figura 4).




        Figure 3: Esempio di posizione corretta dalla base rispetto al box. Per la base sono ammesse solo traslazioni, non rotazioni.
Figure 4: In questa visuale, premendo la freccia “su”, la base si sposta nella direzione indicata dalla freccia rossa.



2.4 Mattoncini

             `                                                          `
    Il gioco e suddiviso in livelli di diversa difficolt` . Ogni livello e caratterizzato da una diversa collocazione dei mattoncini
                                                       a
all’interno del box. Per ogni livello un file determina la posizione dei mattoncini.
Sia n × n × n il numero massimo di mattoncini non sovrapposti collocati all’interno del box. Rappresentiamo tali mattoncini
tramite una matrice di interi di dimensione n × n × n: in questo modo ogni mattoncino e identificato tramite una precisa
                                                                                                  `
posizione nella matrice. Il mattoncino collocato nell’angolo in basso a sinistra, affiancato alla parete posteriore assume la
posizione 0, 0, 0 nella matrice. Mentre il mattoncino nella posizione n, n, n e collocato nell’angolo in alto a destra adiacente
                                                                                   `
alla parete frontale.
Ogni volta che la pallina intercetta un mattoncino viene solo modificato l’elemento della matrice che rappresenta tale mat-
toncino.
Ad ogni mattoncino, quindi, viene associato un valore intero memorizzato nella matrice che identifica lo stato del mattoncino
stesso. I valori che rappresentano un mattoncino possono essere i seguenti:
   • 0 se il mattoncino NON viene visualizzato;
   • 1 se il mattoncino e rosso (se viene colpito passa a 0);
                        `

   • 2 se il mattoncino e blu (se viene colpito passa a 1)
                        `

   • 3 se il mattoncino e grigio (indistruttibile) (il valore non potr` mai cambiare)
                        `                                             a
   • 4 se il mattoncino e giallo (se viene colpito passa a 0 e lascia cadere un cubetto-bonus che aumenta il numero di vite)
                        `

   • 5 se il mattoncino e giallo (se viene colpito passa a 0 e lascia cadere un cubetto-bonus che diminuisce la velocit` )
                        `                                                                                              a
    Per la rappresentazione dei mattoncini utilizziamo il metodo della matrice perch` ottimizza il passaggio di informazioni
                                                                                          e
                                                              `
tra client e server: infatti la situazione di tutti i cubetti e rappresentata in un’unica matrice tridimensionale. In questo modo
evitiamo di avere tante matrici di trasformazioni quanti sono i mattoncini visualizzati, rendendo molto pi` veloce lo scambio
                                                                                                              u
di informazioni (utilizziamo un’unica matrice).

2.4.1   Livelli
L’applicazione consente di aggiungere nuovi livelli, aggiungendo solamente un file di descrizione nell’apposita cartella.
Il file di descrizione contiene informazioni riguadanti lo stato di tutti i mattoncini e deve essere strutturato nel seguente modo:
deve contenere n × n (n rappresenta il numero massimo di mattoncini non sovrapposti lungo un lato del box) righe separate
dal carattere ‘#’ ogni n righe; ogni riga deve contenere n numeri (tra 0 e 4) rappresentanti lo stato che si desidera assegnare
al mattoncino in quella posizione.
Il primo carattere del file rappresenter` , quindi, il mattoncino nella posizione 0, 0, 0 della matrice, mentre l’ultimo carattere
                                        a
rappresenter` il mattoncino nella posizione n, n, n.
              a
Sia n = 3, un esempio di file e il seguente:
                             `

   000
   000
   000
   #
   111
   131
   111
   #
   222
   232
   222

Questo file produrr` un livello (rappresentato in figura 5) in cui il primo terzo (partendo dalla faccia inferiore del box) non
                    a
contiene mattoncini visualizzati, il secondo terzo contiene mattoncini rossi eccetto un mattoncino grigio (indistruttibile) al
centro e l’ultimo terzo contiene mattoncini blu con al centro un mattoncino grigio.




                   Figure 5: Situazione dei mattoncini generati dall’esempio di file proposto nella sotto-sezione Livelli.



2.5 Bonus

   Nel gioco abbiamo introdotto alcuni eventi che mirano a premiare la bravura del giocatore e ad aumentare la difficolt` del
                                                                                                                       a
livello. Ad esempio all’aumentare del punteggio aumenter` automaticamente la velocit` della pallina. Tale evento serve per
                                                          a                             a
aumentare la difficolt` del livello poich` render` meno semplice l’intercettazione della pallina con la base.
                     a                  e       a

   ´                                                                `
   E possibile anche ottenere dei bonus. Per ottenere un bonus e necessario colpire con la pallina un mattoncino di colore
giallo e intercettare con la base il cubetto lampeggiante che verr` lasciato cadere dal mattoncino colpito.
                                                                  a
Esistono due tipi di bonus in base al tipo di cubetto-bonus che si intercetta:
      - bonus vita: il numero delle vite viene incrementato di un’unit` ;
                                                                      a
      - bonus velocit` : la velocit` della pallina viene diminuita (rendendo pi` semplica il gioco).
                     a             a                                           u

2.6     Client-Server

                                                                          `
   Nella modalit` di gioco per due giocatori usiamo il seguente criterio: e possibile utilizzare l’applicazione su due macchine
                 a
diverse, una macchina rappresenta il da Server e l’altra il Client.
Poich` la situazione del gioco, nello stesso momento, deve essere la stessa sulla due macchine, tutte le operazioni tra matrici
      e
vengono eseguite solamente dal server e il client riceve soltanto le matrici gi` calcolate (da utilizzare per disegnare i vari
                                                                                 a
componenti).
Quindi nelle funzioni “display” degli oggetti non vengono mai calcolate matrici di trasformazione. Il client, ad ogni iter-
azione, riceve una matrice per ogni oggetto (base, pallina, traccie) gi` calcolata dal server e informazioni per sapere che
                                                                           a
mattonici visualizzare e come disegnarli. Il client invia poi al server le informazioni relative alle sue mosse.

3    Struttura dell’applicazione

    L’applicazione pu` essere avviata in tre diverse modalit` :
                     o                                      a
    • client: e composta dalla classe Client che si occupa di richiedere al server la matrici di traformazione degli oggetti da
              `
      disegnare e di inviare al server gli spostamenti effettuati.
    • server: e composta dalla classe Server che si occupa di inviare al client le matrici di trasformazione degli oggetti e
              `
      di calcolarle tramite la classe Manager. La classe Manager calcola gli spostamenti della pallina, che comprendono i
      cambi di direzione, gli angoli di riflessione sulle pareti, il rimbalzo sulle basi, l’impatto con i mattoncini, la gestione
      dell’eventuale mattoncino-bonus il variare della velocit` , la traccia lasciata sulla parete, l’impatto con il pavimento e il
                                                                  a
      controllo della vita persa o della partita persa. La classe Manager calcola inoltre lo spostamento della base, controllando
      che la base stessa non esca dal box e se intercetta i mattoncini-bonus.
    • giocatore singolo: si comporta come il server, ad eccezione della parte riguardante la rete e la computazione degli
      eventi del client che non sono presenti nella modalit` singola.
                                                           a
   Tutte e tre le modalit` sono costituite dalla classe GlRender. Tale classe si occupa della visualizzazione dei vari oggetti
                         a
grafici. La parte in cui vengono visualizzati gli oggetti grafici implementa gli ascoltatori del mouse e della tastiera. Gli eventi
di queste periferiche vengono gestiti e salvati nella classe MovementStatus dalla quale la varie modalit` di gioco leggono i
                                                                                                           a
movimenti da eseguire.

                                                    `
   Nella nostra applicazione ogni oggetto grafico e costituito da una diversa classe. Ognuna di queste classi contiene le
propriet` dell’oggetto, come ad esempio il colore e i punti che la compongono, e il metodo display che permette di disegnare
        a
l’oggetto. Per garantire che ciascuna di queste classi implementi il metodo display, abbiamo creato l’interfaccia Drawable
che viene estesa da ogni oggetto grafico.
Le classi di oggetti grafici sono le seguenti:
     - Base: per la base;
     - Bonus: per i mattoncini-bonus;
     - Box: per disegnare gli spigoli del box;
     - Cube: per i mattoncini;

     - Floor: per la griglia sulla faccia inferiore del box;
     - Impronta: per la traccia della pallina lasciata sulla parete;
     - Pallina: per la pallina e la sua proiezione a terra.

Contenu connexe

En vedette

Knowledge Management
Knowledge ManagementKnowledge Management
Knowledge ManagementYaw Chooi Fun
 
Internet In Biblioteca
Internet In BibliotecaInternet In Biblioteca
Internet In Bibliotecaeziotarantino
 
Indicizzare nel mondo digitale
Indicizzare nel mondo digitaleIndicizzare nel mondo digitale
Indicizzare nel mondo digitaleMichele Santoro
 
Carla Petri. Ricerche e dati di attività sul GAP dei Servizi per le Dipendenze
Carla Petri. Ricerche e dati di attività sul GAP dei Servizi per le DipendenzeCarla Petri. Ricerche e dati di attività sul GAP dei Servizi per le Dipendenze
Carla Petri. Ricerche e dati di attività sul GAP dei Servizi per le DipendenzeInformalcol
 
Informatica - uso di excel
Informatica - uso di excelInformatica - uso di excel
Informatica - uso di excelDario
 

En vedette (7)

Knowledge Management
Knowledge ManagementKnowledge Management
Knowledge Management
 
Tesi_Adamou
Tesi_AdamouTesi_Adamou
Tesi_Adamou
 
Internet In Biblioteca
Internet In BibliotecaInternet In Biblioteca
Internet In Biblioteca
 
Indicizzare nel mondo digitale
Indicizzare nel mondo digitaleIndicizzare nel mondo digitale
Indicizzare nel mondo digitale
 
Carla Petri. Ricerche e dati di attività sul GAP dei Servizi per le Dipendenze
Carla Petri. Ricerche e dati di attività sul GAP dei Servizi per le DipendenzeCarla Petri. Ricerche e dati di attività sul GAP dei Servizi per le Dipendenze
Carla Petri. Ricerche e dati di attività sul GAP dei Servizi per le Dipendenze
 
Informatica - uso di excel
Informatica - uso di excelInformatica - uso di excel
Informatica - uso di excel
 
metadatacopyright
metadatacopyrightmetadatacopyright
metadatacopyright
 

Plus de graphitech

A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationgraphitech
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationgraphitech
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationgraphitech
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationgraphitech
 
Rescue Mission
Rescue MissionRescue Mission
Rescue Missiongraphitech
 
Rescue Mission
Rescue MissionRescue Mission
Rescue Missiongraphitech
 
Mashup - Sustainability
Mashup - SustainabilityMashup - Sustainability
Mashup - Sustainabilitygraphitech
 
Mashup - Sustainability
Mashup - SustainabilityMashup - Sustainability
Mashup - Sustainabilitygraphitech
 
Multiple Screens
Multiple ScreensMultiple Screens
Multiple Screensgraphitech
 
Multiple Screens
Multiple ScreensMultiple Screens
Multiple Screensgraphitech
 
Graph Matching
Graph MatchingGraph Matching
Graph Matchinggraphitech
 
Shape Analysis
Shape AnalysisShape Analysis
Shape Analysisgraphitech
 
Human Interaction Library
Human Interaction LibraryHuman Interaction Library
Human Interaction Librarygraphitech
 
Human Interaction Library
Human Interaction LibraryHuman Interaction Library
Human Interaction Librarygraphitech
 
WebCams Mapping on Nasa World Wind
WebCams Mapping on Nasa World WindWebCams Mapping on Nasa World Wind
WebCams Mapping on Nasa World Windgraphitech
 
Street Builder
Street BuilderStreet Builder
Street Buildergraphitech
 
Street Builder
Street BuilderStreet Builder
Street Buildergraphitech
 
Live Video in World Wind
Live Video in World WindLive Video in World Wind
Live Video in World Windgraphitech
 
Live Video in World Wind
Live Video in World WindLive Video in World Wind
Live Video in World Windgraphitech
 
Terrain Modification
Terrain ModificationTerrain Modification
Terrain Modificationgraphitech
 

Plus de graphitech (20)

A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolation
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolation
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolation
 
A graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolationA graphic library and an application for simple curve manipolation
A graphic library and an application for simple curve manipolation
 
Rescue Mission
Rescue MissionRescue Mission
Rescue Mission
 
Rescue Mission
Rescue MissionRescue Mission
Rescue Mission
 
Mashup - Sustainability
Mashup - SustainabilityMashup - Sustainability
Mashup - Sustainability
 
Mashup - Sustainability
Mashup - SustainabilityMashup - Sustainability
Mashup - Sustainability
 
Multiple Screens
Multiple ScreensMultiple Screens
Multiple Screens
 
Multiple Screens
Multiple ScreensMultiple Screens
Multiple Screens
 
Graph Matching
Graph MatchingGraph Matching
Graph Matching
 
Shape Analysis
Shape AnalysisShape Analysis
Shape Analysis
 
Human Interaction Library
Human Interaction LibraryHuman Interaction Library
Human Interaction Library
 
Human Interaction Library
Human Interaction LibraryHuman Interaction Library
Human Interaction Library
 
WebCams Mapping on Nasa World Wind
WebCams Mapping on Nasa World WindWebCams Mapping on Nasa World Wind
WebCams Mapping on Nasa World Wind
 
Street Builder
Street BuilderStreet Builder
Street Builder
 
Street Builder
Street BuilderStreet Builder
Street Builder
 
Live Video in World Wind
Live Video in World WindLive Video in World Wind
Live Video in World Wind
 
Live Video in World Wind
Live Video in World WindLive Video in World Wind
Live Video in World Wind
 
Terrain Modification
Terrain ModificationTerrain Modification
Terrain Modification
 

Dernier

Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxOrianaOcchino
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaStefano Lariccia
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieVincenzoPantalena1
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaRafael Figueredo
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaPierLuigi Albini
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativovaleriodinoia35
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaStefano Lariccia
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiorevaleriodinoia35
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldivaleriodinoia35
 

Dernier (9)

Storia dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptxStoria dell’Inghilterra nell’Età Moderna.pptx
Storia dell’Inghilterra nell’Età Moderna.pptx
 
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia RomanaXIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
XIII Lezione - Arabo G.Rammo @ Libera Accademia Romana
 
La seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medieLa seconda guerra mondiale per licei e scuole medie
La seconda guerra mondiale per licei e scuole medie
 
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla CresimaIL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
IL CHIAMATO ALLA CONVERSIONE - catechesi per candidati alla Cresima
 
Ticonzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza culturaTiconzero news 148.pdf aprile 2024 Terza cultura
Ticonzero news 148.pdf aprile 2024 Terza cultura
 
Corso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativoCorso di digitalizzazione e reti per segretario amministrativo
Corso di digitalizzazione e reti per segretario amministrativo
 
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia RomanaXI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
XI Lezione - Arabo LAR Giath Rammo @ Libera Accademia Romana
 
Esperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superioreEsperimenti_laboratorio di fisica per la scuola superiore
Esperimenti_laboratorio di fisica per la scuola superiore
 
lezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldilezione di fisica_I moti nel piano_Amaldi
lezione di fisica_I moti nel piano_Amaldi
 

Arkanoid 3D MultiPlayer

  • 1. Principi di Computer Graphics: progetto finale Michele Donadoni Cristina Di Risio Universit` di Trento a Universit` di Trento a michele.donadoni@studenti.unitn.it dirisio@disi.unitn.it Raffaele De Amicis, Giuseppe Conti 1 Introduzione Relazione per l’esame finale del corso di Principi di Computer Graphics. Il progetto prevede l’implementazione del famoso gioco “Arkanoid” con le seguenti varianti: - tre dimensioni anzich` due; e - possibilit` di giocare in due giocatori collegati alla stessa rete. a Maggiori dettagli sulle regole del gioco sono mostrate nella successiva sotto-sezione. 1.1 Notazioni e funzionamento Nella relazione utilizziamo le seguenti definizioni: - box: contenitore esterno in cui si svolge il gioco; - base: piattaforma mobile posta nella parte inferiore del box ad un’altezza prestabilita; - mattoncini: blocchi (tipicamente collocati nella met` superiore del box) che devono essere colpiti dalla pallina; a - mattoncino-bonus: cubetto che compare colpendo un tipo particolare di mattoncino e si sposta verso il basso. L’applicazione prevede sia l’utilizzo di un solo giocatore, sia quello con due giocatori (figura 1). L’utente pu` regolare la visuale del gioco in due modi: con l’utilizzo del mouse oppure con la tastiera (utilizzando i tasti con o le lettere: E, S, D, F, A e Z). La base si muove tramite tastiera (freccie). Figure 1: Selezione della modalit` di gioco a
  • 2. Esistono quattro tipi di mattoncini, differenziati in base al colore: 1. grigio: indistruttibili; 2. rossi : sparisono quando vengono colpiti; 3. blu : quando vengono colpiti diventano rossi; 4. gialli : quando vengono colpiti viene lasciato cadere un mattoncino-bonus che, se viene intercettato dalla base, fornisce un bonus. Figure 2: Esempio di schermata dell’applicazione ` Nella modalit` di gioco con due giocatori lo scenario e il seguente: a - entrambi i giocatori contribuiscono ad un unico punteggio finale; ` - il numero delle vite e lo stesso; - le due basi sono collate su livelli di altezza differenti; - si utilizza un’unica pallina, con cui entrambi i giocatori possono interagire; - solamente l’utente “Server” pu` iniziare una nuova partita e scegliere il livello del gioco; o - qualunque giocatore pu` mettere in pausa il gioco. Il gioco rimane in pausa finch` lo stesso utente che lo ha interrotto, o e decide di riprenderlo; Punteggio Il giocatore vince una partita quando nel box non sono presenti mattoncini non industruttibili. Ogni volta che la pallina tocca la faccia inferiore del box, il giocatore perde una vita e finch` ha almeno una vita pu` continuare il gioco senza che venga e o ripristinata la situazione iniziale del mattoncini. In ogni partita ci sono a disposizione 10 vite. Ogni volta che la pallina colpisce un mattoncino, il punteggio di quella partita aumenta di 10 punti. Grafica ` Poich` in tre dimensioni, con lo sfondo omogeneo, non e semplice individuare la direzione della pallina, per facilitare e l’utilizzo del gioco sono stati introdotti:
  • 3. - una traccia (“impronta”) lasciata dalla pallina quando rimbalza su una parete (di breve durata); - un effetto sonoro ogni volta che la pallina tocca una parete; - una proiezione circolare della pallina sulla parete inferiore del box, che assume diverse dimensioni in base alla lon- tananza della pallina da terra. 2 Implementazione 2.1 Stack e matrici ` Il cento del nostro sistema di riferimento e posizionato nel centro della faccia inferiore del box. Ad eccezione dei movi- menti eseguti per cambiare la visuale del box (da eseguire con il mouse), tutti gli altri movimenti vengono eseguiti senza l’utilizzo delle librerie jogl per ruotare o traslare il sistema di assi cartesiani, ma tramite l’utilizzo delle nostre apposite matrici. Uno stack salva le matrici che utilizziamo, salvandole nel preciso ordine di inserimento, in modo tale da rendere possibile la rimozione delle ultime matrici inserite. Per identificare un punto tridimensionale utilizziamo un vettore (chiamato tupla) che memorizza le coordinate x, y e z pi` un u quarto valore (=1) che serve per effettuare operazioni con le matrici di dimensioni 4 × 4. Sotto riportiamo le matrici, dipendenti dai parametri forniti input: Matrice di traslazione ` La matrice di traslazione rispetto ai valori x, y e z e la seguente:   1 0 0 0  0 1 0 0     0 0 1 0  x y z 1 Matrici di rotazione Sotto riportiamo le matrici di rotazione dell’angolo α (in radianti) rispetto all’asse x, y e z rispettivamente:      1 0 0 0 cos(α) 0 −sin(α) 0 cos(α) sin(α) 0 0  0 cos(α) sin(α) 0     0 1 0 0   −sin(α) cos(α) 0 0      0 −sin(α) cos(α) 0   sin(α) 0 cos(α) 0   0 0 1 0  0 0 0 1 0 0 0 1 0 0 0 1 Matrice di “scaling” Anche se non la utilizziamo nel codice, abbiamo definito anche la matrice per scalare il sistema di riferimento rispetto agli angoli αx , αy , αz :   αx 0 0 0  0 αy 0 0     0 0 αz 0  0 0 0 1 Operazioni con le matrici Per ottenere un’unica matrice composta da tutte le matrici presenti nello stack vengono moltiplicate le matrici tutte partendo dall’ultima inserita.
  • 4. Sia A una matrice e P un punto con coordinate riferite al sistema di riferimento rappresentato dalla matrice A; per conoscere le coordinate assolute di P si moltiplica la matrice A per il vettore rappresentante il punto P . 2.2 Traiettoria della pallina La pallina parte da una determinata altezza con un’angolazione casuale rivolta verso l’alto (in modo da concede pi` tempo u all’utente). Ogni volta che la pallina intercetta una parete del box, deve cambiare la sua traiettoria, secondo le leggi fisiche di riflessione. Alla pallina non viene applica nessuna forza di attrito, n` di gravit` . e a ` La posizione della pallina e caratterizzata da una propria matrice: il centro del sistema rappresentato da tale matrice costitu- isce il centro della pallina. La pallina si muove tramite traslazioni sull’asse delle x e rotazioni sugli assi y o z. L’ampiezza dell’angolo di rotazione dipende dall’angolo di impatto con la parete e dal tipo di parete (frontale, superiore, laterale, ecc...). ` Quando la pallina intercetta uno spigolo, la nuova direzione e casuale (entro un certo range dipendente dallo spigolo) poich` e ora l’impatto non avviene contro un’unica parete, ma tocca due o pi` pareti del box. u Sia P = (x, y, z) il punto in cui la pallina intercetta una parete del box (le coordinate di P sono assolute). Nel momento dell’impatto, il sistema di riferimento della pallina ha un’angolazione di αy sull’asse y e αz sull’asse z (l’angolo rispetto all’asse x e sempre nullo). ` Per sapere come ruotare il sitema di riferimento della pallina, in modo tale da ottenere un rimbalzo sulla parete, vengono seguite le seguenti regole: • se la parete intercettata e laterale (destra o sinistra): il sistema di riferimento dovr` avere un’angolo αy = 180 − αy ; ` a • se la parete intercettata e posteriore o anteriore: il sistema di riferimento dovr` avere un’angolo αy = −αy ; ` a • se la parete intercettata e quella superiore: il sistema di riferimento dovr` avere un’angolo αz = −αz . ` a Gli angoli αy e αz sono sempre espressi in gradi e considerati con valori compresi tra 0 e 360. Quindi il nuovo sistema di riferimento per la pallina sar` composto dalle seguenti matrici (nell’esatto ordine): a - aggiunta di una matrice di traslazione di x, y, z rispettivamente sull’asse x, y, z; - aggiunta di una matrice di rotazione rispetto all’asse y di αy ; - aggiunta di una matrice di rotazione rispetto all’asse z di αz ; 2.3 Movimento della base ` La base e libera di muoversi all’interno del box ad un’altezza prefissata. La base mantiene sempre una posizione in cui i suoi lati siano paralleli con quelli del box (figura 3). ` Le freccie sulla tastiera determinano il movimento della base: la direzione “diritto” per la base e rappresentata dal punto di vista dell’utente in quel preciso momento (figura 4). Figure 3: Esempio di posizione corretta dalla base rispetto al box. Per la base sono ammesse solo traslazioni, non rotazioni.
  • 5. Figure 4: In questa visuale, premendo la freccia “su”, la base si sposta nella direzione indicata dalla freccia rossa. 2.4 Mattoncini ` ` Il gioco e suddiviso in livelli di diversa difficolt` . Ogni livello e caratterizzato da una diversa collocazione dei mattoncini a all’interno del box. Per ogni livello un file determina la posizione dei mattoncini. Sia n × n × n il numero massimo di mattoncini non sovrapposti collocati all’interno del box. Rappresentiamo tali mattoncini tramite una matrice di interi di dimensione n × n × n: in questo modo ogni mattoncino e identificato tramite una precisa ` posizione nella matrice. Il mattoncino collocato nell’angolo in basso a sinistra, affiancato alla parete posteriore assume la posizione 0, 0, 0 nella matrice. Mentre il mattoncino nella posizione n, n, n e collocato nell’angolo in alto a destra adiacente ` alla parete frontale. Ogni volta che la pallina intercetta un mattoncino viene solo modificato l’elemento della matrice che rappresenta tale mat- toncino. Ad ogni mattoncino, quindi, viene associato un valore intero memorizzato nella matrice che identifica lo stato del mattoncino stesso. I valori che rappresentano un mattoncino possono essere i seguenti: • 0 se il mattoncino NON viene visualizzato; • 1 se il mattoncino e rosso (se viene colpito passa a 0); ` • 2 se il mattoncino e blu (se viene colpito passa a 1) ` • 3 se il mattoncino e grigio (indistruttibile) (il valore non potr` mai cambiare) ` a • 4 se il mattoncino e giallo (se viene colpito passa a 0 e lascia cadere un cubetto-bonus che aumenta il numero di vite) ` • 5 se il mattoncino e giallo (se viene colpito passa a 0 e lascia cadere un cubetto-bonus che diminuisce la velocit` ) ` a Per la rappresentazione dei mattoncini utilizziamo il metodo della matrice perch` ottimizza il passaggio di informazioni e ` tra client e server: infatti la situazione di tutti i cubetti e rappresentata in un’unica matrice tridimensionale. In questo modo evitiamo di avere tante matrici di trasformazioni quanti sono i mattoncini visualizzati, rendendo molto pi` veloce lo scambio u di informazioni (utilizziamo un’unica matrice). 2.4.1 Livelli L’applicazione consente di aggiungere nuovi livelli, aggiungendo solamente un file di descrizione nell’apposita cartella. Il file di descrizione contiene informazioni riguadanti lo stato di tutti i mattoncini e deve essere strutturato nel seguente modo: deve contenere n × n (n rappresenta il numero massimo di mattoncini non sovrapposti lungo un lato del box) righe separate dal carattere ‘#’ ogni n righe; ogni riga deve contenere n numeri (tra 0 e 4) rappresentanti lo stato che si desidera assegnare al mattoncino in quella posizione. Il primo carattere del file rappresenter` , quindi, il mattoncino nella posizione 0, 0, 0 della matrice, mentre l’ultimo carattere a rappresenter` il mattoncino nella posizione n, n, n. a
  • 6. Sia n = 3, un esempio di file e il seguente: ` 000 000 000 # 111 131 111 # 222 232 222 Questo file produrr` un livello (rappresentato in figura 5) in cui il primo terzo (partendo dalla faccia inferiore del box) non a contiene mattoncini visualizzati, il secondo terzo contiene mattoncini rossi eccetto un mattoncino grigio (indistruttibile) al centro e l’ultimo terzo contiene mattoncini blu con al centro un mattoncino grigio. Figure 5: Situazione dei mattoncini generati dall’esempio di file proposto nella sotto-sezione Livelli. 2.5 Bonus Nel gioco abbiamo introdotto alcuni eventi che mirano a premiare la bravura del giocatore e ad aumentare la difficolt` del a livello. Ad esempio all’aumentare del punteggio aumenter` automaticamente la velocit` della pallina. Tale evento serve per a a aumentare la difficolt` del livello poich` render` meno semplice l’intercettazione della pallina con la base. a e a ´ ` E possibile anche ottenere dei bonus. Per ottenere un bonus e necessario colpire con la pallina un mattoncino di colore giallo e intercettare con la base il cubetto lampeggiante che verr` lasciato cadere dal mattoncino colpito. a Esistono due tipi di bonus in base al tipo di cubetto-bonus che si intercetta: - bonus vita: il numero delle vite viene incrementato di un’unit` ; a - bonus velocit` : la velocit` della pallina viene diminuita (rendendo pi` semplica il gioco). a a u 2.6 Client-Server ` Nella modalit` di gioco per due giocatori usiamo il seguente criterio: e possibile utilizzare l’applicazione su due macchine a diverse, una macchina rappresenta il da Server e l’altra il Client. Poich` la situazione del gioco, nello stesso momento, deve essere la stessa sulla due macchine, tutte le operazioni tra matrici e vengono eseguite solamente dal server e il client riceve soltanto le matrici gi` calcolate (da utilizzare per disegnare i vari a
  • 7. componenti). Quindi nelle funzioni “display” degli oggetti non vengono mai calcolate matrici di trasformazione. Il client, ad ogni iter- azione, riceve una matrice per ogni oggetto (base, pallina, traccie) gi` calcolata dal server e informazioni per sapere che a mattonici visualizzare e come disegnarli. Il client invia poi al server le informazioni relative alle sue mosse. 3 Struttura dell’applicazione L’applicazione pu` essere avviata in tre diverse modalit` : o a • client: e composta dalla classe Client che si occupa di richiedere al server la matrici di traformazione degli oggetti da ` disegnare e di inviare al server gli spostamenti effettuati. • server: e composta dalla classe Server che si occupa di inviare al client le matrici di trasformazione degli oggetti e ` di calcolarle tramite la classe Manager. La classe Manager calcola gli spostamenti della pallina, che comprendono i cambi di direzione, gli angoli di riflessione sulle pareti, il rimbalzo sulle basi, l’impatto con i mattoncini, la gestione dell’eventuale mattoncino-bonus il variare della velocit` , la traccia lasciata sulla parete, l’impatto con il pavimento e il a controllo della vita persa o della partita persa. La classe Manager calcola inoltre lo spostamento della base, controllando che la base stessa non esca dal box e se intercetta i mattoncini-bonus. • giocatore singolo: si comporta come il server, ad eccezione della parte riguardante la rete e la computazione degli eventi del client che non sono presenti nella modalit` singola. a Tutte e tre le modalit` sono costituite dalla classe GlRender. Tale classe si occupa della visualizzazione dei vari oggetti a grafici. La parte in cui vengono visualizzati gli oggetti grafici implementa gli ascoltatori del mouse e della tastiera. Gli eventi di queste periferiche vengono gestiti e salvati nella classe MovementStatus dalla quale la varie modalit` di gioco leggono i a movimenti da eseguire. ` Nella nostra applicazione ogni oggetto grafico e costituito da una diversa classe. Ognuna di queste classi contiene le propriet` dell’oggetto, come ad esempio il colore e i punti che la compongono, e il metodo display che permette di disegnare a l’oggetto. Per garantire che ciascuna di queste classi implementi il metodo display, abbiamo creato l’interfaccia Drawable che viene estesa da ogni oggetto grafico. Le classi di oggetti grafici sono le seguenti: - Base: per la base; - Bonus: per i mattoncini-bonus; - Box: per disegnare gli spigoli del box; - Cube: per i mattoncini; - Floor: per la griglia sulla faccia inferiore del box; - Impronta: per la traccia della pallina lasciata sulla parete; - Pallina: per la pallina e la sua proiezione a terra.