Project

Άσκηση OpenGL : «Κανόνι & Λαγουδάκια»


Την εκφώνηση και το συνοδευτικό υλικό μπορείτε να τα βρείτε εδώ.

Μερικά demo μπορείτε να βρείτε εδώ.


Να κατασκευάσετε ένα παιχνίδι βολών με το παρακάτω σενάριο:

Ο παίχτης αναλαμβάνει το χειρισμό ενός κανονιού και προσπαθεί να πετύχει με βολές τα λαγουδάκια που εμφανίζονται στο επίπεδο στο οποίο κινείται (επίπεδο ΧZ - έδαφος). Ο παίχτης έχει τη δυνατότητα να ρυθμίσει μέσω του πληκτρολογίου την γωνία βολής του κανονιού α, την αρχική ταχύτητα του βλήματος v0 και την θέση του κανονιού. Η βολή εκτελείται στο επίπεδο XY. Τα λαγουδάκια θα εμφανίζονται σε τυχαίες αρχικές θέσεις στο έδαφος (επίπεδο ΧΖ) και θα κινούνται κατά τον άξονα Χ, με αναπηδήσεις στο επίπεδο ΧΥ. Όταν ο παίχτης καταφέρνει να πετύχει κάποιο από τα περιπλανώμενα λαγουδάκια, τότε να εμφανίζεται στο σημείο της σύγκρουσης ένα αστέρι με τη λέξη «Hit!» μέσα του.

Το περιβάλλον του παιχνιδιού μπορείτε να το εμπλουτίσετε με δικά σας στοιχεία κατασκευασμένα είτε από OpenGL primitives είτε από 3Δ μοντέλα.


Διευκρινίσεις-Υποδείξεις

Το κανόνι πρέπει να το κατασκευάσετε χρησιμοποιώντας OpenGL primitives (torus, σφαίρα, κύλινδρο με χρήση της GL_QUAD_STRIP), με σωστή ιεραρχία μετασχηματισμών, και η κάνη του θα πρέπει να μπορεί να κινείται, ανάλογα με την γωνία βολής. Η βολή μπορεί να αναπαρασταθεί με μία σφαίρα που θα ξεκινά την πορεία της από την βάση της κάνης του κανονιού. Το λαγουδάκι σας δίνεται σαν μοντέλο wavefront (obj) το οποίο και θα πρέπει να φορτώσετε και αναπαραστήσετε στο παιχνίδι σας.


Α. Οι κινήσεις

Σε μία εφαρμογή κινούμενης εικόνας ο χρόνος «κυλάει» παίρνοντας διακριτές τιμές σε κάθε καρέ i, σύμφωνα με την εξίσωση:

t(i) = t(i-1) + dt, με dt σταθερό και t(0) = 0. Η σταθερά dt είναι το βήμα του χρόνου και καθορίζει πόσο «γρήγορα» ή «αργά» θα κυλάει η προσομοίωση.

Free Image Hosting

Η θέση της σφαίρας-βλήματος όταν φύγει από το κανόνι θα προσδιορίζεται από τις εξισώσεις βολής.

Γενικά η θέση ενός σώματος που εκτελεί βολή δίνεται από την μετατόπιση r(x,y), με:

x = v0 cosα t, και

y = v0 sinα t – ½ g t2

όπου v0 η αρχική ταχύτητα του βλήματος, α η γωνία βολής, και g η επιτάχυνση της βαρύτητας.

Η γωνία α μπορεί να παίρνει τιμές στο διάστημα [0ο, 180ο]. Η επιτάχυνση της βαρύτητας g να θεωρηθεί 10. Η αρχική ταχύτητα θα παίρνει τιμές σε ένα διάστημα δικής σας επιλογής, ώστε η προσομοίωση να «δουλεύει». Επίσης πρέπει να προσδιορίσετε το βήμα χρόνου dt ώστε η προσομοίωση να κυλάει φυσιολογικά. Μπορείτε να αφήνετε το χρήστη εμμέσως να ρυθμίζει το dt ώστε η προσομοίωση να τρέχει γρηγορότερα, ανάλογα με το επίπεδο δυσκολίας του παιχνιδιού. ΠΡΟΣΕΞΤΕ: μεγάλες τιμές στο dt μπορεί να προκαλέσουν ασυνέχεια στην κίνηση, και αδυναμία ελέγχου των συγκρούσεων. Επίσης πολύ μικρές τιμές στο dt μπορεί να προκαλέσουν επαναληπτική απεικόνιση της ίδιας σκηνής χωρίς να χρειάζεται.

Για να προσομοιώσετε τις αναπηδήσεις του λαγού, θεωρήστε οτι το κέντρο μάζας του εκτελεί διαδοχικές βολές με συγκεκριμένη αρχική ταχύτητα v0 και συγκεκριμένη γωνία βολής α πχ. 45ο. Την αρχική ταχύτητα την αποφασίζετε εσείς.

Free Image Hosting

Για να το πετύχετε αυτό μόλις το λαγουδάκι φτάσει στο επίπεδο ΧΖ (έδαφος) τελειώνοντας την τρέχουσα βολή, ξαναξεκινήστε μία νέα βολή από την νέα θέση του με τις ίδιες παραμέτρους (αρχική ταχύτητα και γωνία βολής) κοκ.


Β. Wavefront αρχεία

Η παράσταση αντικειμένων με πολύγωνα είναι η πιο διαδεδομένη. Κάθε αντικείμενο αντιπροσωπεύεται από ένα σύνολο πολυγώνων τα οποία είναι το κύριο συστατικό για την παράσταση επιφανειών. Η δομή που χρησιμοποιείται είναι ιεραρχική. Κάθε αντικείμενο είναι μια λίστα επιφανειών, κάθε επιφάνεια μια λίστα πολυγώνων και κάθε πολύγωνο μια λίστα κορυφών. Επίσης έχουμε και λίστες συντεταγμένων υφής και κανονικών διανυσμάτων φωτισμού για κάθε κορυφή ενός πολυγώνου, ενώ σε κάθε επιφάνεια μπορούμε να αντιστοιχίσουμε και το ανάλογο υλικό.

Ένα από τα πιο απλά πρότυπα αρχείων για την αποθήκευση πολυγωνικών μοντέλων είναι το wavefront object πρότυπο, κατά το οποίο είναι αποθηκευμένα και τα συνοδευτικά αρχεία της άσκησης. Είναι σε ascii μορφή επομένως το διάβασμά του είναι εξαιρετικά απλό. Τα βασικά στοιχεία που περιέχει είναι τα εξής (εμφανίζονται σαν identifiers στην αρχή κάθε γραμμής) :

v – σημείο στο χώρο

vn – κανονικό διάνυσμα κορυφής

vt – συντεταγμένες υφής κορυφής

g – επιφάνεια ακολουθούμενη από το όνομα της

mtllib – αρχείο αποθήκευσης υλικών επιφανειών

f – πολύγωνο που χαρακτηρίζεται από δείκτες στις κορυφές του αλλά και επιπλέον με δείκτες σε συντεταγμένες υφής ή κανονικά διανύσματα κορυφών.

o v/t/n , v//n , v/t , v (π.χ. f 45//32 46/33 56//55 , τρίγωνο)

usemtl – όνομα υλικού για την τρέχουσα επιφάνεια


Αυτό που θα χρειαστεί στην περίπτωση της άσκησης να διαβάσετε από το αρχείο, είναι μόνο η λίστα κορυφών (v) και η λίστα πολυγώνων (τριγώνων) (f), καθώς αρκούν για την αναπαράσταση του αντικειμένου.

Μετά το διάβασμα κάθε αντικειμένου, μετασχηματίστε το κατάλληλα ώστε να ενσωματωθεί στο περιβάλλον που δημιουργείτε (μεταφορά στην αρχή των αξόνων → αλλαγή κλίμακας → προσανατολισμός).

Για τη μεταφορά στην αρχή των αξόνων, αρκεί να υπολογίσετε το κέντρο μάζας του μοντέλου (χρησιμοποιώντας τις συντεταγμένες των κορυφών του) και να μεταφέρετε το μοντέλο έτσι ώστε το κέντρο μάζας του να συμπίπτει με το κέντρο των αξόνων.

Για την προσαρμογή της κλίμακας του μοντέλου, αρκεί να υπολογίσετε την απόσταση της πιο απομακρυσμένης κορυφής (Rmax) του μοντέλου από το κέντρο μάζας και να διαιρέσετε τις συντεταγμένες όλων των κορυφών με αυτήν την τιμή.

Για την προσαρμογή του προσανατολισμού του μοντέλου, αυτό το καθορίζετε εσείς ανάλογα με το πώς θα διαμορφώσετε το περιβάλλον του παιχνιδιού.


Γ. Έλεγχος Σύγκρουσης

Για τον έλεγχο σύγκρουσης μεταξύ δύο αντικειμένων, η υλοποίησή σας θα ελέγχει απλά την απόσταση ανάμεσα στα κέντρα μάζας των 2 μοντέλων (του κουνελιού, και της σφαίρας-βλήματος). Όταν αυτή η απόσταση γίνεται μικρότερη από ένα κατώφλι (δικής σας επιλογής), τότε θα θεωρείτε ότι γίνεται σύγκρουση. Η απόσταση αυτή θα πρέπει να είναι μικρότερη από το άθροισμα της ακτίνας της σφαίρας που περιβάλει το κουνέλι (Rmax) και της ακτίνας της σφαίρας-βλήματος (Rsph).

Κατά τη σύγκρουση μπορεί να εμφανίζεται για κάποια δευτερόλεπτα το παρακάτω σχήμα:

Free Image Hosting

Στο συνοδευτικό υλικό της εργασίας εκτός από τα μοντέλα δίνεται και demo της εργασίας.

Δεν υπάρχουν σχόλια:

Δημοσίευση σχολίου