A small OpenGL game made for the Computer Graphic course A.A.2015/16.
- Introduzione
- Installazione
- Gameplay
- Controlli
- Sviluppo
- Main
- Mesh
- Camera
- HUD
- Collisioni
- Punteggio
- Conclusioni
Soccer Car è un videogioco 3D interattivo di tipo "vehicular soccer video game". Il gioco è ambientato in un campo di calcio e si è al controllo di un auto d'epoca allo scopo di mandare la palla in rete.
Soccer Car gira in ambiente GNU/Linux e richiede che siano installate le librerie SDL, OpenGL e GLUT.
sudo apt-get install libsdl2-dev
sudo apt install libsdl2-image-dev
sudo apt-get install libsdl2-ttf-dev
sudo apt-get install freeglut3-dev
Per prima cosa bisogna compilare il codice sorgente, posizionandosi nella cartella di Soccer Car e lanciando:
make
Viene creata la cartella build/
che conterrà i file .o
. Al termine della compilazione il file eseguibile play
viene creato nella directory principale.
Ora è possibile avviare Soccer Car:
./play
Controllo auto:
W
- AccelleraS
- FrenaA
- Sterza a sinistraD
- Sterza a destraSPACE
- Salto
Controllo funzionalita extra:
TAB
- Apre la lista dei tastiF1
- Cambia cameraF2
- Cambia pallaF3
- Fanali auto on/off
In modalità mouse camera è possibile controllare la camera utilizzando il mouse:
MOUSE WHEEL
- Zoom in/outCLICK + DRAG
- Muove camera
Sono state utilizzate le librerie Glut per gestire l'inizializzazione, l'input e il ciclio principale dell'applicazione.
In questo progetto si è deciso di utilizzare mesh salvate in file .obj
, utilizzando anche le coordinate texture ivi contentute per il texture mapping e caricando le proprietà dei materiali utilizzati dalle mesh dai file .mtl
.
Si è esteso quindi mesh.h
e mesh.c
(usati in progetto_car3), implementando il caricamento materiali e texture da file.
Il modello dell'auto è ottentua scaricando una mesh ad alto numero di verdici dalla libreria online TurboSquid. Successivamente è stato modificato in Blender, riducendo il numero di vertici (per migliorare le performance del rendering real-time) ed esportando le diverse parti dell'auto in file .obj
separati.
È possibile scegliere fra due diversi tipi di palla:
- Pallone da calcio
- Sfera su cui è proiettata la texture di un'immagine personale
Il cielo è ottenuto con una SkyBox, cioè un cubo che ha sulle facce texture del cielo in distanza. Ad esso si è deciso di non applicare l'illuminazione direzionale.
Il campo è un rettangolo su cui è applicata la texture di un campo da calcio. È stato applicato il tesseling al campo, per ottenere un maggior realismo dalle luci frontali dell'auto.
È possibile scegliere tre differenti camere con il tasto F1
:
- Camera fissa sulla palla
- Camera nella stessa direzione dell'auto
- Camera controllabile da mouse
L'HUD è costituito da 3 elementi:
- Mappa
- Score
- Messaggio di goal avvenuto
- Keymap alla pressione del tasto
TAB
Per il testo a schermo è stata utilizzata la funzione glutBitmapCharacter messa a disposizione dalle librerie Glut, che renderizza un carattere bitmap.
La mappa è stata creata renderizzando a schermo un rettangolo semi-trasparente, utilizzando un alpha value <1.0 per il colore. I punti su mappa per identificare palla e veicolo sono GL_POINTS
ottenuti abilitando il parametro GL_POINT_SMOOTH
durante l'inizializzazione.
Le collissioni vengono rilevate e calcolate considerando sia l'auto che la palla come due sfere. Le collissioni vengono in questo modo approssimate utilizzando un algoritmo semplifcato, ma che mantiene comunque un certo realismo.
Ad ogni istante viene controllato se la palla attraversa una delle porte. Quando questo avviene il goal viene rilevato per una delle due squadre ed il punteggio aggiornato. Dopo di che, allo scadere di un timeout, la scena viene reinizializzata, con la palla al centro del campo e l'auto nella metà campo della squadra che ha subito goal.
Il progetto Soccer car è un videogioco 3D interattivo con un gameplay semplice e un discreto livello di realismo, considerando gli standard odierni.
In futuro è possibile effettuare miglioramenti sia a livello grafico che di gameplay. Per esempio potrebbe essere interessante rendere Soccer Car un gioco multiplayer.
Per quanto riguarda le possibili migliorie grafiche, certamente è da considerare l'introduzione di ombre proiettate dagli oggetti. È inoltre da prendere in considerazione lo sviluppo di shaders per un miglior tesseling del campo.