αποθήκευσης γεωμετρικών δεδομένων πλέγματος, προσφέροντας πλεονεκτήματα ως προς την
ευελιξία και την αποδοτική διαχείριση της τοπολογίας.
Ωστόσο, προκειμένου η δομή αυτή να μπορεί να αξιοποιηθεί εύκολα από τον χρήστη, απαι-
τείται ένας μηχανισμός εισαγωγής δεδομένων από εξωτερικά αρχεία αναπαράστασης πλεγμά-
των. Για τον σκοπό αυτό υλοποιήθηκε η κλάση IO (Input/Output), στην οποία προστέθηκε η
μέθοδος read_obj(). Η μέθοδος αυτή επιτρέπει τη φόρτωση αρχείων μορφής .obj και τη μετα-
τροπή τους σε αντικείμενα της κλάσης Mesh, καθιστώντας δυνατή την ενσωμάτωσή τους στο
σύστημα απόδοσης της μηχανής.
4.10.2
Μαθηματικά εργαλεία
Όπως έχει αναφερθεί σε προηγούμενη ενότητα, ένας από τους components που εί-
ναι ιδιαίτερα χρήσιμος για την εύκολη ανάπτυξη δισδιάστατων παιχνιδιών είναι το
BoxColliderComponent. Ο συγκεκριμένος component αποθηκεύει ως δεδομένα ένα διά-
νυσμα μετατόπισης (offset) με συνιστώσες x και y, ένα μέγεθος (size), το οποίο καθορίζει
την κλίμακα (scale) του συγκρουστή, καθώς και δύο λογικές σημαίες (flags), is_enabled και
is_trigger.
Για να μπορεσουμε να δουμε αν δυο αντικειμενα που εχουν αυτον τον component βρισκοντε
σε επαφή το ενα με το αλο χριαζόμαστε ενα μηχανισμό που να το υπολογίζει.
Για τον λόγο αυτό δημιουργήθηκε μια δομή (struct) με την ονομασία AABB2D (Axis-
Aligned Bounding Box), η οποία περιλαμβάνει ως δεδομένα δύο σημεία στον χώρο: ένα ελάχι-
στο (min) και ένα μέγιστο (max).
struct AABB2D{
glm::vec2 min;
glm::vec2 max;
};
Πάνω στη δομή AABB2D υλοποιήθηκαν δύο συναρτήσεις εντοπισμού τομής (intersection).
Η πρώτη ελέγχει τη σύγκρουση μεταξύ δύο αντικειμένων τύπου AABB2D, ενώ η δεύτερη ελέγ-
χει εάν ένα σημείο στον χώρο εμπίπτει εντός ενός αντικειμένου AABB2D.
48