Il gioco arcade Marble Madness dell’Atari del 1984 fu il primo gioco con una grafica pseudo 3d.
Il gioco consisteva nel controllare una biglia in un percorso tridimensionale e e raggiungere una zona definita come Goal entro un certo tempo.
Il percorso tridimensionale oltre avere pendenze e aperture aveva anche oggetti e piccoli mostriciattoli che cercavano di impedire alla sfera di raggiungere la zona goal.
La grafica del gioco era in un “finto 3d” : la mappa era mostrata attraverso una proiezione ortogonale fissa e sfruttava illusioni ottiche.
Il nostro obiettivo sarà quello di realizzare:
i. un gioco simile con grafica tridimensionale (OpenGL)
ii. un editor che permetta di poter creare mappe per questo gioco.
L’immagine mostra una mappa del gioco originale.
1. Realizzazione grafica 3D utilizzando OpenGL.
2. Visualizzazione di uno spazio contenente una mappa attraverso una camera.
3. La mappa e’ costituita da piastrelle.
4. Alcune piastrelle hanno particolari proprietà(esempio se appartiene ad un Goal).
5. La pianta della piastrelle è quadrata e di uguale dimensione per tutte le piastrelle.
6. Una piastrella è divisa in quattro triangoli uguali dove i vertici sono due vertici della piastrella e il terzo è il centro della piastrella
7. i vertici e il centro di una piastrella possono trovarsi su altezze diverse
8. se i vertici di due piastrelle adiacenti si trovano su altezze diverse tra le due piastrelle si forma uno scalino.
9. Nella mappa possono esserci anche sfere e altri oggetti
10. Il diametro della sfere è il diametro della piastrella sono uguali
1. ogni piastrella ha una proprietà che indica l’attrito rispetto alla sfera
2. se la sfera ha un punto di appoggio il movimento rotatorio provoca un corrispondente spostamento lungo il piano
3. un cambio di velocità della sfera lungo il piano provoca un relativo cambio di velocità di rotazione
4. se non c’è un punto di appoggio la sfera la rotazione decresce fino a zero.
5. la forza di gravità agisce applicando una accelerazione alla sfera lungo l’asse z passante per il centro della sfera verso il basso
6. se la sfera tocca un gradino non può oltrepassarlo.
7. la sfera può avere dai 0 ai 4 punti di appoggio sul piano
8. ogni punto di appoggio esercita una forza normale al piano passante per punto di appoggio al centro della sfera
9. l’attrito della piastrella provoca una accelerazione di direzione contraria alla direzione dello spostamento della sfera
1. Interfaccia grafica dell’editor realizzata attraverso MFC e OpenGL.
2. Possibilità di definire la dimensione dello spazio su cui si potrà definire la mappa..
3. Creazione della piastrelle.
4. Modifica della altezza dei vertici e del centro della piastrelle.
5. Modifica delle proprietà di una piastrella.
6. Cancellazione delle piastrelle.
7. Posizionamento dell’area goal.
8. Posizionamento dello start.
9. Preview tridimensionale della mappa (utilizzo del motore grafico)
10. Salvataggio mappa
11. Caricamento della mappa
1. Interfaccia grafica realizzata attraverso GLUT e OPENGL
2. L’Interfaccia grafica permette di selezionare la mappa , iniziare il gioco e uscire.
3. Utilizzo del motore grafico per visualizzare la mappa
4. Esiste un Timer
5. Controllare una sfera in una mappa
6. Controllare la camera di visualizzazione del gioco
7. Stato della sfera in dato momento è dato dalla velocità di rotazione , direzione e posizione del suo centro nello spazio
8. Il controllo della sfera e della camera avviene attraverso il mouse e/o tastiera modificando la velocità di rotazione e direzione della sfera
10. l’utente può cambiare la direzione della rotazione delle sfera
11. se la sfera ha almeno un punto di appoggio l’utente può cambiare la velocità di rotazione della sfera in modo incrementale
9. La sfera interagisce con l’ambiente attraverso un motore fisico
10. Se la sfera cade in un vuoto dopo un certo numero di secondi viene riposizionata nell’ultima piastrella con pendenza nulla con direzione e velocità di rotazione nulla.
11. Se il timer raggiunge 0 viene segnalata la sconfitta
12. Quanto la sfera raggiunge il Goal del mappa viene segnalata vittoria.
OpenGL: Open Graphics Library
Quadrato: una lista di 5 altezze:
una del vertice NO
una del vertice NE
una del vertice SO
una del vertice SE
una del vertice C
Triangoli: triangolo N , triangolo O, triangolo E, triangolo S
Triangolo N: triangolo formato dai vertici NO NE C del quadrato
Triangolo E: triangolo formato dai vertici NE SE C del quadrato
Triangolo O: triangolo formato dai vertici NO SO C del quadrato
Triangolo S: triangolo formato dai vertici SE SO C del quadrato
Gradino: la parete presente se c’è un dislivello tra piastrelle
Piastrella: quadrato con le 5 altezze definite
Vuoto: quadrato con le 5 altezze non definite
Spazio: una griglia di quadrati
Mappa: un insieme di piastrelle
Vertice: un punto nello spazio tridimensionale (x,y,z)
Proprietà piastrella: un insieme di caratteristiche associata ad una piastrella
Goal: un insieme di piastrelle che costituisce la destinazione della pallina.
Start: la piastrella su cui la pallina viene posizionata inizialmente
Camera: camera di visualizzazione del motore grafico
MFC: Microsoft Foundation Classes
Caricamento: prendere il contenuto di un file e memorizzare le informazioni che contiene in memoria principale
Salvataggio: prendere il contenuto della memoria principale relativa ad un insieme di strutture dati e memorizzarle e codificarle in un certo modo su disco.
Preview: un anteprima di quello che verrà visualizzato nel gioco
Glut: OpenGL Utility Toolkit
Interfaccia grafica gioco: un semplice interfaccia realizzata attraverso opengl e glut che permetta di accedere al gioco
Timer: un cronometro che parte da un certo valore e decresce ogni secondo di uno
Utente: giocatore
Piastrella di pendenza nulla: una piastrella dove NO NE SO SE C si trovano alla
stessa altezza
Sconfitta: segnalato “game over” e ritorno al menu di scelta
Vittoria: segnalata “vittoria” e ritorno al menu di scelta
Tastiera e mouse: device di controllo