Γραφικά και Εικονική Πραγματικότητα Απαλλακτική εργασία 2012. Παπαπαύλου Χρήστος ΑΜ: 6609

Σχετικά έγγραφα
Απαλλακτική Εργασία Γραφικά & Εικονική Πραγματικότητα. Παπαπαύλου Χρήστος ΑΜ: 6609

ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ ΜΟΝΤΕΛΟΠΟΙΗΣΗ-ΨΗΦΙΑΚΗ ΣΥΝΘΕΣΗ ΕΙΚΟΝΩΝ Διδάσκων: Ν. ΝΙΚΟΛΑΙΔΗΣ

Αναπαράσταση & Απλοποίηση Μοντέλων

Εισαγωγή Αποκοπή ευθείας σε 2Δ Αποκοπή πολυγώνου σε 2Δ Αποκοπή σε 3Δ. 3ο Μάθημα Αποκοπή. Γραφικα. Ευάγγελος Σπύρου

ΕΠΑΝΑΛΗΨΗ Α ΓΥΜΝΑΣΙΟΥ

I. ΜΙΓΑΔΙΚΟΙ ΑΡΙΘΜΟΙ. math-gr

Από το Γυμνάσιο στο Λύκειο Δειγματικός χώρος Ενδεχόμενα Εύρεση δειγματικού χώρου... 46

Μαθηματικά Α' Γυμ. - Ερωτήσεις Θεωρίας 1 ΕΡΩΤΗΣΕΙΣ. (1) Ποιοι είναι οι φυσικοί αριθμοί; Γράψε τέσσερα παραδείγματα.

ΚΕΦΑΛΑΙΟ 4 ο : ΑΝΙΣΩΣΕΙΣ ΤΟ 2 Ο ΘΕΜΑ

ΑΣΚΗΣΕΙΣ ΥΠΟΛΟΓΙΣΜΟΥ ΜΑΖΑΣ ΘΕΣΗΣ ΚΕΝΤΡΟΥ ΜΑΖΑΣ ΡΟΠΗΣ ΑΔΡΑΝΕΙΑΣ ΣΩΜΑΤΩΝ

Κεφάλαιο 1: Κίνηση και γεωμετρικά σχήματα

1.1 ΥΝΑΡΤΗΣΕΙΣ ΟΡΙΑ ΣΥΝΕΧΕΙΑ

ΘΕΩΡΙΑ Α ΓΥΜΝΑΣΙΟΥ. Η διαίρεση καλείται Ευκλείδεια και είναι τέλεια όταν το υπόλοιπο είναι μηδέν.

21. ΦΥΛΛΟ ΕΡΓΑΣΙΑΣ 4 - ΔΗΜΙΟΥΡΓΩΝΤΑΣ ΜΕ ΤΟ BYOB BYOB. Αλγόριθμος Διαδικασία Παράμετροι

ΓΡΑΜΜΙΚΗ ΑΛΓΕΒΡΑ (Εξ. Ιουνίου - 02/07/08) ΕΠΙΛΕΓΜΕΝΕΣ ΑΠΑΝΤΗΣΕΙΣ

ΜΑΘΗΜΑΤΑ ΜΑΘΗΜΑΤΙΚΑ ΘΕΤΙΚΟΥ ΠΡΟΣΑΝΑΤΟΛΙΣΜΟΥ Β ΛΥΚΕΙΟΥ

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

ΕΡΩΤΗΣΕΙΣ ΘΕΩΡΙΑΣ ΜΑΘΗΜΑΤΙΚΑ Α ΓΥΜΝΑΣΙΟΥ

Μηχανολογικό Σχέδιο με τη Βοήθεια Υπολογιστή. Γεωμετρικός Πυρήνας Παραμετρική Σχεδίαση

ΣΤΟΙΧΕΙΑ ΚΡΥΣΤΑΛΛΟΓΡΑΦΙΑΣ

Αλγόριθμοι Ταξινόμησης Μέρος 2

ΘΕΩΡΙΑ Α ΓΥΜΝΑΣΙΟΥ. 1. Να γράψετε τον τύπο της Ευκλείδειας διαίρεσης. Πώς ονομάζεται κάθε σύμβολο του τύπου;

Κεφάλαιο 7. Τρισδιάστατα Μοντέλα

Ασκήσεις μελέτης της 4 ης διάλεξης. ), για οποιοδήποτε μονοπάτι n 1

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

Μαθηματικά: Αριθμητική και Άλγεβρα. Μάθημα 10 ο, Τμήμα Α

σ αυτή την περίπτωση; = 610 και το άθροισμα των 12 πρώτων όρων της S 12 = 222. Να βρείτε τη διαφορά και τον 1 ο όρο της.

Εφαρμοσμένα Μαθηματικά ΙΙ 1ο Σετ Ασκήσεων (Λύσεις) Διανύσματα, Ευθείες Επίπεδα, Επιφάνειες 2ου βαθμού Επιμέλεια: Ι. Λυχναρόπουλος

Τεχνολογία Παιγνίων. Τεχνολογία Παιγνίων. Τεχνολογία Παιγνίων. Εισαγωγή στο Easy Java Simulations (EJS)

ισδιάστατοι μετασχηματισμοί ΚΕΦΑΛΑΙΟ 4: ισδιάστατοι γεωμετρικοί μετασχηματισμοί

Οδηγίες για το SKETCHPAD Μωυσιάδης Πολυχρόνης - Δόρτσιος Κώστας. Με την εκτέλεση του Sketchpad παίρνουμε το παρακάτω παράθυρο σχεδίασης:

Συνοπτική Θεωρία Μαθηματικών Α Γυμνασίου

Φυλλάδιο 1 - Σημεία Προσοχής στις Παραγράφους 1.1, 1.2 και 1.3

Εργαστήριο Εισαγωγής στη Σχεδίαση Συστημάτων VLSI

ΕΡΓΑΣΤΗΡΙΟ ΠΟΛΥΜΕΣΩΝ ΚΑΙ ΓΡΑΦΙΚΩΝ

Δρομολόγηση Και Πολύχρωματισμός. Γραφημάτων ΚΑΡΑΓΕΩΡΓΟΣ ΤΙΜΟΘΕΟΣ Α.Μ 1026

Εργασία για το μεταπτυχιακό μάθημα Παράλληλοι υπολογισμοί από τον φοιτητή Μουζακίδη Αλέξανδρο AM M 853

κυρτών και σύνθετων σωμάτων

Οδηγίες για το CABRI - GEOMETRY II Μωυσιάδης Πολυχρόνης - Δόρτσιος Κώστας

Κεφάλαιο 2: Διανυσματικός λογισμός συστήματα αναφοράς

Κεφάλαιο 8. Οπτικοποίηση Απαλοιφή

ΜΑΘΗΜΑΤΙΚΑ ΘΕΤΙΚΗΣ & ΤΕΧΝΟΛΟΓΙΚΗΣ ΚΑΤΕΥΘΥΝΣΗΣ Β ΛΥΚΕΙΟΥ

ΕΠΑΝΑΛΗΨΗ ΜΑΘΗΜΑΤΙΚΑ ΚΑΤΕΥΘΥΝΣΗΣ Β ΛΥΚΕΙΟΥ ( α μέρος )

Αριθμητική εύρεση ριζών μη γραμμικών εξισώσεων

ΜΑΘΗΜΑΤΙΚΑ MATHEMATICS

ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΦΥΣΙΚΗΣ. ΕΞΕΤΑΣΗ ΣΤΗ ΜΗΧΑΝΙΚΗ Ι Σεπτέµβριος 2004

Ασκήσεις κέντρου μάζας και ροπής αδράνειας. αν φανταστούμε ότι το χωρίζουμε το στερεό σώμα σε μικρά κομμάτια, μόρια, μάζας m i και θέσης r i

ΚΕΦΑΛΑΙΟ 2 Ο : ΚΥΜΑΤΑ ΕΝΟΤΗΤΑ 2: ΕΠΑΛΛΗΛΙΑ ΚΥΜΑΤΩΝ ΣΥΜΒΟΛΗ ΚΥΜΑΤΩΝ ΣΤΑΣΙΜΑ ΚΥΜΑΤΑ ΛΥΜΕΝΑ ΘΕΜΑΤΑ ΘΕΜΑ Β

K15 Ψηφιακή Λογική Σχεδίαση 7-8: Ανάλυση και σύνθεση συνδυαστικών λογικών κυκλωμάτων

ΘΕΩΡΙΑ Β ΓΥΜΝΑΣΙΟΥ. Μια παράσταση που περιέχει πράξεις με μεταβλητές (γράμματα) και αριθμούς καλείται αλγεβρική, όπως για παράδειγμα η : 2x+3y-8

ΚΕΦΑΛΑΙΟ 5: ΑΠΕΙΚΟΝΙΣΗ ΚΑΙ ΑΠΟΚΟΠΗ

n ίδια n διαφορετικά n n 0 n n n 1 n n n n 0 4

1,y 1) είναι η C : xx yy 0.

Κεφάλαιο 5. Το Συμπτωτικό Πολυώνυμο

5ο Μάθημα Αλγόριθμοι Σχεδίασης Βασικών Σχημάτων

ΚΥΠΡΙΑΚΗ ΜΑΘΗΜΑΤΙΚΗ ΕΤΑΙΡΕΙΑ ΠΑΓΚΥΠΡΙΟΣ ΔΙΑΓΩΝΙΣΜΟΣ ΔΕΚΕΜΒΡΙΟΣ 2017

Θέματα ενδοσχολικών εξετάσεων Άλγεβρας Α Λυκείου Σχ. έτος , Ν. Δωδεκανήσου ΘΕΜΑΤΑ ΕΝΔΟΣΧΟΛΙΚΩΝ ΕΞΕΤΑΣΕΩΝ ΤΑΞΗ: Α ΓΕΝΙΚΟΥ ΛΥΚΕΙΟΥ ΑΛΓΕΒΡΑ

1 Η εναλλάσσουσα ομάδα

ΜΑΘΗΜΑΤΙΚΑ Θετικής & Τεχνολογικής Κατεύθυνσης Β ΜΕΡΟΣ (ΑΝΑΛΥΣΗ) ΚΕΦ 1 ο : Όριο Συνέχεια Συνάρτησης

ΧΡΥΣΗ ΤΟΜΗ ΣΤΑ ΜΑΘΗΜΑΤΙΚΑ

Συναρτήσεις. 5.1 Η έννοια της συνάρτησης. 1. Να συμπληρώσετε τις τιμές των παρακάτω συναρτήσεων : α) ψ = 2χ + 6 o Για χ = -1,5 : ψ =..=..

ΜΑΘΗΜΑΤΙΚΑ Α' ΓΥΜΝΑΣΙΟΥ ΕΡΩΤΗΣΕΙΣ ΘΕΩΡΙΑΣ σε word! ΕΠΙΜΕΛΕΙΑ: ΚΩΝΣΤΑΝΤΙΝΟΣ ΤΣΟΛΚΑΣ

Παράγωγοι. Κώστας Γλυκός ΜΑΘΗΜΑΤΙΚΟΣ. ΕΠΑΛ Κεφάλαιο ασκήσεις σε 19 σελίδες. εκδόσεις. Καλό πήξιμο / 1 1 /

Ειδικά θέματα Αλγορίθμων και Δομών Δεδομένων (ΠΛΕ073) Απαντήσεις 1 ου Σετ Ασκήσεων

Μέτρηση του όγκου και του εμβαδού ορθών πρισμάτων Κανονική Πυραμίδα 1 Βάσης) (Απόστημα) 2 1 ό Βάσης) (Ύψος) 3

πάχος 0 πλάτος 2a μήκος

Γραφικά με υπολογιστές

ΦΥΣΙΚΗ ΓΕΝΙΚΗΣ ΠΑΙΔΕΙΑΣ Α ΛΥΚΕΙΟΥ

Οι θέσεις ενός σημείου στο επίπεδο και στο χώρο Φύλλο εργασίας 1

GET SDI PORTAL v1. Οδηγός Βοήθειας

Δομές Δεδομένων. Ενότητα 12: Κατακερματισμός: Χειρισμός Συγκρούσεων. Καθηγήτρια Μαρία Σατρατζέμη. Τμήμα Εφαρμοσμένης Πληροφορικής.

ΑΝΙΣΟΤΗΤΕΣ. Αν α-β>0 τότε α>β «Αν η διαφορά είναι θετικός αριθμός τότε ο πρώτος αριθμός δηλαδή το α είναι μεγαλύτερος από τον δεύτερο δηλαδή το β»

ΑΛΓΕΒΡΑ B ΛΥΚΕΙΟΥ. Γενικής Παιδείας ΑΠΑΝΤΗΣΕΙΣ ΛΥΣΕΙΣ ΣΧΟΛΙΚΟΥ ΒΙΒΛΙΟΥ

5. Κβαντική Διερεύνηση - Κβαντικός αλγόριθμος του Grover

Ενότητα 2. Ζωγραφίζοντας με το ΒΥΟΒ

Γραφικά Υπολογιστών: Εμφάνιση σε 2D

ΓΡΑΜΜΙΚΗ ΑΛΓΕΒΡΑ (ΗΥ-119)

ΓΥΜΝΑΣΙΟ ΚΑΣΤΕΛΛΑΝΩΝ ΜΕΣΗΣ ΑΛΓΕΒΡΑ

ΑΣΚΗΣΗ. Δημιουργία Ευρετηρίων Συλλογής Κειμένων

Θεώρημα Βolzano. Κατηγορία 1 η Δίνεται η συνάρτηση:

ΜΑΘΗΜΑΤΙΚΑ Β ΓΥΜΝΑΣΙΟΥ

3, ( 4), ( 3),( 2), 2017

ΥΣ02 Τεχνητή Νοημοσύνη Χειμερινό Εξάμηνο

Ορισμένες σελίδες του βιβλίου

Βασικές Γνώσεις Μαθηματικών Α - Β Λυκείου

( ) ( ) ( ) ( ) ΕΠΙΤΡΟΠΗ ΔΙΑΓΩΝΙΣΜΩΝ 30 η Ελληνική Μαθηματική Ολυμπιάδα "Ο Αρχιμήδης" 23 Φεβρουαρίου 2013 ΕΝΔΕΙΚΤΙΚΕΣ ΛΥΣΕΙΣ Λύση (α) Έχουμε

Ορισμός Τετραγωνική ονομάζεται κάθε συνάρτηση της μορφής y = αx 2 + βx + γ με α 0.

5. Σε ορθογώνιο σύστημα αξόνων να σχεδιαστούν οι ευθείες που έχουν εξισώσεις τις: β. y = 4 δ. x = y

Γ. Β Α Λ Α Τ Σ Ο Σ. 4ο ΓΥΜΝΑΣΙΟ ΛΑΜΙΑΣ 1. Γιώργος Βαλατσός Φυσικός Msc

(a 1, b 1 ) (a 2, b 2 ) = (a 1 a 2, b 1 b 2 ).

ΜΑΘΗΜΑΤΙΚΑ - Γ ΓΥΜΝΑΣΙΟΥ

Από το Γυμνάσιο στο Λύκειο Δειγματικός χώρος Ενδεχόμενα Εύρεση δειγματικού χώρου... 46

6 Γεωμετρικές κατασκευές

Κεφάλαιο 4: Επιλογή σημείου παραγωγής

ΦΥΕ 14 Διανύσματα. 1 Περιγραφή διανυσμάτων στο χώρο Γεωμετρική περιγραφή: Τα διανύσματα περιγράφονται σαν προσανατολισμένα ευθύγραμμα

ΟΔΗΓΙΕΣ ΧΡΗΣΗΣ ΠΡΟΓΡΑΜΜΑΤΟΣ Dcad 1.0

Μετασχηματισμοί Μοντελοποίησης (modeling transformations)

Λυσεις προβλημάτων τελικής φάσης Παγκύπριου Μαθητικού Διαγωνισμού Πληροφορικής 2007

ΜΑΘΗΜΑΤΙΚΑ B ΛΥΚΕΙΟΥ

Transcript:

Γραφικά και Εικονική Πραγματικότητα Απαλλακτική εργασία 2012 0B Παπαπαύλου Χρήστος ΑΜ: 6609

Περιεχόμενα Πίνακας Περιεχομένων...2 Περιεχόμενα...2 Προγραμματιστικές λεπτομέρειες υλοποίησης...3 geom.h...3 mesh.h mesh.cpp...3 glvisuals.h glvisuals.cpp...4 main.cpp...4 User Interface...5 Αντιστοιχίες πλήκτρων...5 i. Απλοποίηση πλέγματος...6 Μέθοδος...6 Κατάρρευση ακμής...6 Παράδειγμα...6 Επιλογή ακμών προς κατάρρευση...7 Εύρεση γειτονικού τριγώνου ακμής...7 Εικόνες...7 ii. Ανίχνευση συγκρούσεων...11 Τομή ορθογωνίου ορθογωνίου...11 Τομή τριγώνου τριγώνου...11 Τομή τριγώνου ευθύγραμμου τμήματος...11 Αλγόριθμος...11 Επιδόσεις...12 Εικόνες...13 iii. Περιβάλλοντες Όγκοι...16 AABB...16 Υπολογισμός όγκου μοντέλου...16 Σφαίρα...18 2

Προγραμματιστικές λεπτομέρειες υλοποίησης Documentation για τον κώδικα υπάρχει εδώ: http://chris.papapaulou.gr/graphprojdoc. Για την δημιουργία του documentation χρησιμοποιήθηκε το doxygen. Παρακάτω περιγράφεται συνοπτικά η λειτουργία κάθε αρχείου/κλάσης. geom.h Περιέχει δομές δεδομένων για την διαχείριση των γεωμετρικών σχημάτων που χρησιμοποιούνται. Κάθε δομή περιέχει τα ελάχιστα δεδομένα που είναι απαραίτητα για τον ορισμό του σχήματος και ίσως κάποια πλεονάζουσα πληροφορία που είναι χρονοβόρα στον υπολογισμό. Επίσης κάθε δομή, που είναι ισοδύναμη με κλάση στη C++, περιέχει διάφορες χρήσιμες μεθόδους για την επεξεργασία των γεωμετρικών σχημάτων. struct Point Ένα 3Δ σημείο. struct Line Ένα 3Δ ευθύγραμμο τμήμα. struct Box Ένα ορθογώνιο παραλληλεπίπεδο. struct Triangle Ένα 3Δ τρίγωνο. Δεν περιέχει τα δεδομένα των κορυφών, αλλά έναν δείκτη σε πίνακα κορυφών και τρεις ακέραιους δείκτες για τις τρεις κορυφές. struct Sphere Μια σφαίρα. classs Geom Περιέχει στατικές μεθόδους που δεν ανήκουν λογικά σε καμία από τις παραπάνω κλάσεις, όπως μεθόδους για τον έλεγχο τομής διαφόρων σχημάτων. Το μέγεθος σε byte των παραπάνω δομών, ειδικά αυτών που πρόκειται να χρησιμοποιηθούν σε μεγάλες ποσότητες, όπως τα σημεία και τα τρίγωνα, πρέπει να παραμείνει το λιγότερο δυνατό, γιατί έτσι σε μία σελίδα της cache χωράνε περισσότερα αντικείμενα, πράγμα που επιδρά δραστικά στην απόδοση του προγράμματος. Έτσι ένα πλεονάζον πεδίο πρέπει να συμπεριληφθεί μόνο αν χρειάζεται συχνά και είναι πολύ χρονοβόρο στον υπολογισμό του. mesh.h mesh.cpp Ορισμός και υλοποίηση της κλάσης Mesh. Αυτή η κλάση αναλαμβάνει την διαχείριση μοντέλων αποτελούμενων από τριγωνικό πλέγμα. Είναι υπεύθυνη για την φόρτωση, την επεξεργασία και την απεικόνιση των μοντέλων. Η αποθήκευση των μοντέλων γίνεται με δεικτοδοτημένη λίστα κορυφών, έτσι η φόρτωση από αρχείο.obj είναι τετριμμένη. Κάθε στιγμιότυπο της κλάσης αυτής εκτός από την γεωμετρία, περιλαμβάνει και άλλες πληροφορίες, όπως: Κάθετα διανύσματα κορυφών. Λίστα με τα τρίγωνα που εφάπτονται σε κάθε κορυφή. Ιεραρχία περιβαλλόντων όγκων. Λίστες με τα τρίγωνα που περιέχει κάθε υπό-όγκος της ιεραρχίας. Θέση στο σκηνή. Περιστροφή στο τοπικό σύστημα συντεταγμένων. 3

Οι λειτουργίες που υποστηρίζονται μέσω αυτής της κλάσης είναι: Φόρτωση από αρχείο.obj. Αντιγραφή μοντέλου με copy constructor. Ευθυγράμμιση στο τοπικό σύστημα συντεταγμένων. Κατασκευή ιεραρχίας περιβαλλόντων όγκων. Ανίχνευση συγκρούσεων με άλλο μοντέλο. Καθορισμός μεγέθους. Απλοποίηση πλέγματος. glvisuals.h glvisuals.cpp Ορισμός και υλοποίηση της κλάσης GlVisuals. Αυτή η κλάση είναι υπεύθυνη για την διαχείριση της σκηνής. Η σκηνή με όλα της τα αντικείμενα αντιστοιχεί σε ένα στιγμιότυπο αυτής της κλάσης. Δεν κάνει καμία παραδοχή για το περιβάλλον εκτός από την ύπαρξη opengl, έτσι είναι ανεξάρτητη από αυτό. Συνεπώς, μπορεί, εκτός από το glut, να χρησιμοποιηθεί από οποιαδήποτε βιβλιοθήκη υποστηρίζει opengl, πχ Qt, χωρίς αλλαγές. Στην λειτουργικότητα αυτής της κλάσης περιλαμβάνεται η διεπαφή με τον χρήστη, παρέχοντας μεθόδους για κάθε στοιχειώδες event, όπως πατήματα πλήκτρων και κινήσεις του ποντικιού. main.cpp Περιέχει μόνο την αρχικοποίηση του περιβάλλοντος glut και τον χειρισμό των event του glut. Η διαχείριση της σκηνής γίνεται από ένα στιγμιότυπο της κλάσης glvisuals. Τα event του glut μεταφέρονται στο στιγμιότυπο της glvisuals που τα ερμηνεύει κατάλληλα. 4

User Interface Για καλύτερη επίδειξη των διάφορων λειτουργιών σχεδιάστηκε ένα στοιχειώδες user interface. Η σκηνή αποτελείται από 2 αντικείμενα. Με τα βελάκια μετακινώ είτε κάποιο από τα αντικείμενα είτε την σκηνή, ανάλογα με το τι είναι επιλεγμένο. Με 'space' εναλλάσσουμε το επιλεγμένο αντικείμενο. Με '0' επιλέγουμε την σκηνή ενώ με '1' τα αντικείμενα. Αντιστοιχίες πλήκτρων Πλήκτρο space 0 Λειτουργία Εναλλαγή μοντέλου 1/2 (armadillo/car) Επιλογή σκηνής (Αποεπιλογή μοντέλων) 1-9 Επιλογή αντιγράφου μοντέλου. (Αρχικά υπάρχει μόνο ένα αντίγραφο από κάθε μοντέλο, αλλά με shift+d μπορούμε να φτιάξουμε περισσότερα) W Wireframe display on / off. S Solid display on / off. N Vertex normal display on / off. V Voxel display on / off. B Εναλλαγή μεταξύ bounding box / sphere. H Εναλλαγή μεταξύ απεικόνισης κυρίως bounding volume / ιεραρχίας. R Επαναφορά μοντέλων στην αρχή των αξόνων. D Απλοποίηση μοντέλου. D + shift Αντιγραφή του επιλεγμένου μοντέλου και απλοποίηση του αντιγράφου. 5

i. Απλοποίηση πλέγματος Μέθοδος Την απλοποίηση του μοντέλου αναλαμβάνει η μέθοδος void Mesh::simplify(int percent). Η μέθοδος που ακολουθείται είναι η διαδοχική κατάρρευση ακμών. Αυτή μέθοδος απλοποιεί το τριγωνικό πλέγμα συγχωνεύοντας δύο γειτονικές κορυφές (ακμή) σε μία. Τα τρίγωνα που μοιράζονταν αυτή την ακμή διαγράφονται. Η διαδικασία αυτή επαναλαμβάνεται μέχρι να φτάσουμε στο επιθυμητό επίπεδο πολυπλοκότητας. Παρακάτω περιγράφονται τα βήματα που ακολουθούνται σε κάθε κατάρρευση. Κατάρρευση ακμής Ορίζουμε: Vk: Η πρώτη κορυφή της ακμής που θα καταρρεύσει. Vx: Η δεύτερη κορυφή της ακμής που θα καταρρεύσει. Ti: Το πρώτο τρίγωνο που εφάπτεται στην ακμή που θα καταρρεύσει. Tx: Το δεύτερο τρίγωνο που εφάπτεται στην ακμή που θα καταρρεύσει. VkList: Λίστα με τα τρίγωνα που περιέχουν την ακμή Vk. VxList: Λίστα με τα τρίγωνα που περιέχουν την ακμή Vx. Αφού αναγνωριστούν όλα τα παραπάνω δεδομένα, γίνονται οι εξής ενέργειες: Διαγραφή των Vk, Vx (κορυφές), Ti, Tx (τρίγωνα). Εισαγωγή νέας κορυφής που παίρνει την θέση την ακμής που κατέρρευσε, ώστε να αντικαταστήσει τις κορυφές Vk, Vx στα τρίγωνα που τις περιείχαν. Τα τρίγωνα αυτά είναι τα τρίγωνα που βρίσκονται στις λίστες VkList, VxList. Ανανέωση των τριγώνων (VkList U VxList - {ti, tx}), σύμφωνα με την προηγούμενη πρόταση. Αντιγραφή της λίστας Vklist, στην VkList. Η νέα κορυφή που θα δημιουργηθεί για λόγους απόδοσης μπορεί να είναι μία από τις Vk, Vx πετυχαίνοντας ουσιαστικά την συγχώνευση των δύο κορυφών σε μία. Παράδειγμα Δίπλα φαίνεται ένα τριγωνικό πλέγμα στο οποίο έχουν χρωματιστεί Με κόκκινο τα τρίγωνα προς διαγραφή. Με πράσινο τα τρίγωνα των λιστών VkList, VxList. Με πράσινο η κορυφή Vkeep. Με κόκκινο η κορυφή Vx. Το αποτέλεσμα της παραπάνω διαδικασίας φαίνεται στο σχήμα που ακολουθεί. 6

Βλέπουμε ότι τα τρίγωνα της αριστερής κορυφής που διαγράψαμε έμειναν ανεπηρέαστα ενώ τα τρίγωνα της άλλης κορυφής εκτάθηκαν και παραμορφώθηκαν σε μεγάλο βαθμό. Για να μειωθεί αυτή η ασυμμετρία τοποθετούμε την νέα κορυφή στην μέση της ακμής που κατέρρευσε και παίρνουμε έτσι αυτό το τελικό αποτέλεσμα. Τα πράσινα τρίγωνα στο τελικό πλέγμα είναι αυτά που επηρεάστηκαν από την συγκεκριμένη κατάρρευση. Το υπόλοιπο πλέγμα έμεινε τελείως ανεπηρέαστο. Επιλογή ακμών προς κατάρρευση Παραπάνω περιγράψαμε τον τρόπο που γίνεται μια κατάρρευση ακμής. Τώρα θα δείξουμε πώς συντονίζεται όλη η διαδικασία ώστε να επιλεγούν για κατάρρευση οι ακμές που θα έχουν την λιγότερη επίδραση στην αλλοίωση του συνολικού σχήματος. Αρχικά δημιουργούμε μια λίστα που περιέχει όλα τρίγωνα. Κάθε τρίγωνο αναπαρίσταται με έναν ακέραιο δείκτη που δείχνει στον πίνακα τριγώνων. Στην συνέχεια ταξινομούμε την λίστα με το εξής κριτήριο. Σε κάθε τρίγωνο αντιστοιχεί μία τιμή που προκύπτει ως ο μέσος όρος των εσωτερικών γινομένων των κάθετων διανυσμάτων των γειτονικών τριγώνων της πρώτης κορυφής. Επειδή το εσωτερικό γινόμενο δύο διανυσμάτων είναι μέτρο της παραλληλίας τους, με το παραπάνω κριτήριο πετυχαίνουμε να μπουν πρώτα στην λίστα τα τρίγωνα που βρίσκονται σε σχετικά επίπεδη περιοχή του πλέγματος. Έτσι οι περιοχές με λεπτομέρειες (υψηλή συχνότητα) επεξεργάζονται αργότερα, ενώ στην αρχή της διαδικασίας επεξεργάζονται οι επίπεδες περιοχές του μοντέλου στις οποίες μια κατάρρευση έχει μικρό αντίκτυπο στο συνολικό σχήμα. Τώρα περνάμε στην διαδικασία της απλοποίησης του πλέγματος. Ξεκινώντας από το πρώτο τρίγωνο επιλέγουμε την ακμή που ενώνει την πρώτη με την δεύτερη κορυφή και εκτελούμε την κατάρρευση όπως περιγράφεται παραπάνω. Τα επηρεαζόμενα τρίγωνα κάθε κατάρρευσης αφαιρούνται από την λίστα τριγώνων προς επεξεργασία, ώστε να μην είναι δυνατό να επιλεγούν στην συνέχεια για κατάρρευση. Αυτό γίνεται για να μην συμβαίνουν πολλαπλές αλλοιώσεις στα ίδια τρίγωνα που θα οδηγούσαν σε σημαντικές παραμορφώσεις. Τα διαγραμμένα τρίγωνα δεν αφαιρούνται σε αυτή την φάση από τον πίνακα τριγώνων του μοντέλου, αλλά σημαδεύονται ως διαγραμμένα με χρήση του πεδίου deleted του struct Triangle. Η οριστική διαγραφή τους γίνεται στο τέλος της διαδικασίας. Αν στην εξέλιξη της μεθόδου συναντηθεί κάποιο διαγραμμένο τρίγωνο τότε αυτό παρακάμπτεται αφού δεν είναι πλέον έγκυρο τρίγωνο του μοντέλου. Κάθε κλήση της συνάρτησης απλοποίησης εξαντλεί την λίστα τριγώνων προς επεξεργασία, έτσι το ποσοστό μείωσης κάθε φορά εξαρτάται από την σύνδεση των κορυφών του πλέγματος και συγκεκριμένα από τον αριθμό τριγώνων κάθε κορυφής. Εύρεση γειτονικού τριγώνου ακμής Όπως ήδη αναφέραμε, η ακμή προς κατάρρευση επιλέγεται ως μία από τις τρεις ακμές ενός τριγώνου. Έτσι το ένα τρίγωνο αυτής της ακμής το ξέρουμε ήδη. Για να βρούμε το δεύτερο χρησιμοποιούμε τις λίστες τριγώνων κάθε κορυφής που έχουν κατασκευαστεί αμέσως μετά την φόρτωση του μοντέλου. Το δεύτερο τρίγωνο πρέπει να υπάρχει και στις δύο λίστες τριγώνων των κορυφών της ακμής που έχουμε επιλέξει. Είναι δηλαδή η τομή των συνόλων VkList, VxList όπως αυτά περιγράφονται παραπάνω. Εικόνες Στις παρακάτω εικόνες φαίνεται το μοντέλο 1. Στην πρώτη εικόνα δεν έχει υποστεί επεξεργασία ενώ στις επόμενες περνάει από 5 διαδοχικά στάδια επεξεργασίας. 7

Στάδιο 0 (14.272 τρίγωνα 100%) Στάδιο 1 (9.380 τρίγωνα 66%) 8

Στάδιο 2 (6.172 τρίγωνα 43%) Στάδιο 3 (4078 τρίγωνα 29%) Στάδιο 4 (2708 τρίγωνα 19%) Στάδιο 5 (1832 τρίγωνα 13%) 9

Στις παρακάτω εικόνες φαίνεται το μοντέλο 2. Στην πρώτη εικόνα δεν έχει υποστεί επεξεργασία ενώ στις επόμενες περνάει από 4 διαδοχικά στάδια επεξεργασίας. Στάδιο 0 (30356 τρίγωνα 100%) Στάδιο 1 (19630 τρίγωνα 65%) Στάδιο 2 (12890 τρίγωνα 42%) Στάδιο 3 (8498 τρίγωνα 28%) Στάδιο 4 (5640 τρίγωνα 19%) Παρατηρούμε ότι σε αυτό το μοντέλο η αλλοίωση αρχίζει πολύ νωρίτερα και σε μεγάλο βαθμό. 10

ii. Ανίχνευση συγκρούσεων Για να επιτευχθεί η ανίχνευση συγκρούσεων των τριγωνικών μοντέλων χρειάστηκε να υλοποιηθούν οι παρακάτω συναρτήσεις ελέγχου τομής. Τομή ορθογωνίου ορθογωνίου Τομή τριγώνου τριγώνου Τομή τριγώνου ευθύγραμμου τμήματος Τομή ορθογωνίου ορθογωνίου Η τομή δύο ορθογωνίων είναι απλή και υπολογίζεται με 6 ανισότητες. (b1.min.x < b2.max.x) && (b1.max.x > b2.min.x) && (b1.min.y < b2.max.y) && (b1.max.y > b2.min.y) && (b1.min.z < b2.max.z) && (b1.max.z > b2.min.z); Τομή τριγώνου τριγώνου Η τομή δύο τριγώνων στηρίζεται στην τομή των τριών πλευρών του πρώτου τριγώνου με το δεύτερο και των τριών πλευρών του δεύτερου τριγώνου με το πρώτο. Στην αρχή μπορεί να γίνει και ένας έλεγχος των περιβαλλόντων κιβωτίων των τριγώνων, ώστε στην περίπτωση που τα τρίγωνα είναι αρκετά μακριά να αποφευχθεί ο ακριβός έλεγχος ανά ακμή. Τομή τριγώνου ευθύγραμμου τμήματος Αρχικά γίνεται έλεγχος αν το ευθύγραμμο τμήμα τέμνει το επίπεδο του τριγώνου. Αυτό γίνεται εξετάζοντας το πρόσημο της εξίσωσης επιπέδου των δύο ακρών του ευθύγραμμου τμήματος. Για να υπάρχει τομή πρέπει να οι δύο τιμές της εξίσωσης να είναι ετερόσημες if (t.planeequation(l.start) * t.planeequation(l.end) > 0) return false; Αν δεν υπάρχει τομή με το επίπεδο του τριγώνου, τότε δεν υπάρχει τομή και με το τρίγωνο. Αν υπάρχει τομή πρέπει να την βρούμε. Η τομή βρίσκεται από τον εξής τύπο. i = p2 + t (p2-p1) όπου t = - Ax1 +By1 +Cz1 +D Ax 2 +By 2 +Cz2 Αφού βρούμε το σημείο τομής i πρέπει να ελέγξουμε ότι βρίσκεται μέσα στο τρίγωνο. Αυτό το κάνουμε με τον εξής τρόπο. Σχηματίζουμε τρία επίπεδα κάθετα στις τρεις πλευρές του τριγώνου. Στην συνεχεία παίρνουμε τις εξισώσεις των τριών επιπέδων για το σημείο τομής και αν είναι και οι τρεις ομόσημες, τότε το σημείο είναι εσωτερικό και των τριών επιπέδων που συνεπάγεται ότι ανήκει στο αρχικό τρίγωνο. Ο σχηματισμός των τριών κάθετων επιπέδων γίνεται δημιουργώντας για κάθε κορυφή του αρχικού τριγώνου ένα τρίγωνο που αποτελείται από την ίδια την κορυφή, την επόμενη κορυφή και από ένα σημείο που προκύπτει ως το διανυσματικό άθροισμα μιας από τις δύο προηγούμενες κορυφές με το κάθετο διάνυσμα του τριγώνου. Αλγόριθμος Αρχικά υλοποιήθηκε η ανίχνευση συγκρούσεων με απλό τρόπο ελέγχοντας όλα τα τρίγωνα του πρώτου μοντέλου με όλα του δεύτερου για τομή. Προφανώς αυτός ο τρόπος δεν ήταν αποδοτικός με πολυπλοκότητα O(n2). Για την επιτάχυνση της διαδικασίας αξιοποιήθηκε η ιεραρχία περιβαλλόντων όγκων. Για την δημιουργία των τελευταίων θα μιλήσουμε στο επόμενο κεφάλαιο. 11

Ο αλγόριθμος ανίχνευσης συγκρούσεων εργάζεται ως εξής: ΓΙΑ ΚΑΘΕ AABB του ΜΟΝΤΕΛΟΥ_1 ΓΙΑ ΚΑΘΕ AABB του ΜΟΝΤΕΛΟΥ_2 ΑΝ ΤΑ ΑΑΒΒ ΤΕΜΝΟΝΤΑΙ ΓΙΑ ΚΑΘΕ ΤΡΙΓΩΝΟ ΤΟΥ ΑΑΒΒ_1 ΑΝ ΤΟ ΤΡΙΓΩΝΟ ΤΕΜΝΕΤΑΙ ΜΕ ΤΟ ΑΑΒΒ_2 ΓΙΑ ΚΑΘΕ ΤΡΙΓΩΝΟ ΤΟΥ ΑΑΒΒ_2 ΑΝ ΤΑ ΤΡΙΓΩΝΑ ΤΕΜΝΟΝΤΑΙ ΠΡΟΣΘΕΣΕ ΤΑ ΣΤΙΣ ΣΥΓΚΡΟΥΣΕΙΣ Όπου AABB είναι τα περιβάλλοντα κιβώτια του τελευταίου επιπέδου, τα φύλλα δηλαδή του δέντρου ιεραρχίας περιβαλλόντων όγκων. Επιδόσεις Στο παρακάτω διάγραμμα φαίνεται ο χρόνος εκτέλεσης μιας ανίχνευσης σύγκρουσης για διάφορα επίπεδα ιεραρχίας. Χρόνος ανίχνευσης συγκρούσεων armadillo-car Με διαίρεση Με διαίρεση σε Levels of σε σταθερό μεταβαλλόμενο hierarchy άξονα άξονα 2,60 2,70 0 1 2 3 4 5 6 7 8 9 10 11 12 0,85 0,40 0,80 0,35 0,22 0,16 0,20 0,12 0,11 0,09 0,07 0,06 0,12 0,11 0,05 0,07 0,23 0,40 0,08 0,12 0,70 1,35 0,20 0,37 Το επίπεδο 0 συμβολίζει την απουσία υποδιαιρέσεων περιβαλλόντων όγκων και ο χρόνος που απαιτήθηκε σε αυτή την περίπτωση είναι 2,5sec. Για διαίρεση σε μεταβαλλόμενο άξονα και 7 επίπεδα ιεραρχίας βλέπουμε ότι ο απαιτούμενος χρόνος είναι 0,05sec. Παρατηρούμε δηλαδή 50 φορές μειωμένο χρόνο εκτέλεσης. Ωστόσο βλέπουμε ότι η μείωση αυτή δεν συνεχίζεται για πάντα, αλλά υπάρχει ένα επίπεδο που αν τον ξεπεράσουμε, ο χρόνος αρχίζει να αυξάνεται. Αυτό δικαιολογείται από τους αυξημένους ελέγχους τομής των κιβωτίων. Αυτό δεν θα συνέβαινε αν εξετάζαμε ιεραρχικά τα κιβώτια, αντί να πηγαίνουμε κατευθείαν στο τελευταίο επίπεδο. Κάτι τέτοιο όμως είναι πιο σύνθετο προγραμματιστικά ειδικά εφόσον έχουμε να διασχίσουμε δύο δέντρα, ένα για το κάθε αντικείμενο. 12

Εικόνες Παρατίθενται τα screenshots από τις παρακάτω συγκρούσεις. LoD 0 (1x) Ν 1Ν 5Ν 10Ν Αριθμός τριγώνων Model 1 Model 2 Model 1+2 14272 30356 44628 13 Συγκρούσεις Χρόνος 245 0,02 1228 0,03 2536 0,09

LoD 1 (2x) Ν Model 1 1Ν 5Ν 10Ν 6170 Αριθμός τριγώνων Model 2 Model 1+2 12882 19052 14 Συγκρούσεις Χρόνος 185 0,02 965 0,03 1934 0,08

LoD 2 (10x) Ν Model 1 1Ν 5Ν 10Ν 1848 Αριθμός τριγώνων Model 2 Model 1+2 3802 5650 15 Συγκρούσεις Χρόνος 88 0,01 413 0,07 883 0,06

iii. Περιβάλλοντες Όγκοι AABB Η δημιουργία των AABB (Axis Aligned Bounding Boxes) είναι εύκολη διαδικασία. Πρέπει να ελεγχθούν όλες οι κορυφές του μοντέλου για να βρεθούν τα εξής μεγέθη: min x, min y, min z, max x, max y, max z. Έχοντας αυτά τα 6 μεγέθη, το περιβάλλον κιβώτιο είναι το ορθογώνιο παραλληλεπίπεδο με γωνίες {min x, min y, min z}, {max x, max y, max z}. Για την υποδιαίρεση σε επιπλέον επίπεδα ιεραρχίας ακολουθήθηκε η εξής μέθοδος: Illustration 1: Επίπεδο ιεραρχίας L=0 Αρχικά, τα επίπεδα ιεραρχίας αριθμούνται με L=0 για τον αρχικό περιβάλλοντα όγκο (που περικλείει ολόκληρο το μοντέλο), με L=1 για το επίπεδο που περιέχει τις 2 υποδιαιρέσεις του αρχικού όγκου κοκ. Κάθε επίπεδο περιέχει 2L+1-1 κιβώτια. Αν έχουμε L επίπεδα έχουμε συνολικά 2L- 1 κιβώτια. Για την αποθήκευση του δέντρου της ιεραρχίας των κιβωτίων στην μνήμη χρησιμοποιείται ένας πίνακας μεγέθους ίσου με τον μέγιστο αριθμό κιβωτίων (2L- 1), οπού το στοιχείο με θέση i έχει παιδιά τα στοιχεία των θέσεων Illustration 2: Επίπεδο ιεραρχίας L=1 2i+1 και 2i+2. Αυτή είναι μια γραμμική αναπαράσταση μιας δομής δυαδικού δέντρου. Οι υποδιαιρέσεις κατασκευάζονται ως εξής: Όλα τα κιβώτια κάθε επιπέδου τα κόβουμε στην μέση της μεγαλύτερης τους διάστασης, έτσι ώστε από κάθε κιβώτιο του ενός επιπέδου να προκύψουν δύο κιβώτια Illustration 3: Επίπεδο ιεραρχίας L=2 στο αμέσως επόμενο επίπεδο. Σε κάθε διχοτόμηση ενός κιβωτίου φροντίζουμε τα δύο προκύπτοντα κιβώτια να να μην τέμνονται μεταξύ τους. Illustration 4: Επίπεδο ιεραρχίας L=3 Για κάθε κιβώτιο διατηρώ μια λίστα με τα τρίγωνα που αυτό περικλείει. Η λίστα αυτή είναι χρήσιμη για την ανίχνευση συγκρούσεων καθώς και για το ray tracing. Για τρίγωνα κοντά στην συνοριακή επιφάνεια δύο γειτονικών κιβωτίων, τα οποία είναι πιθανό να ανήκουν και στα δύο κιβώτια, φροντίζω να τα συμπεριλάβω και στις δύο λίστες, για λόγους πληρότητας. Τον αριθμό επιπέδων ιεραρχίας τον καθορίζουμε με το #define BVL στο αρχείο mesh.h. Για τον υπολογισμό του ποσοστού κάλυψης κάθε επιπέδου αθροίζω όλους όγκους αυτού του επιπέδου και τους διαιρώ με τον συνολικό όγκο του μοντέλου. Την εύρεση του συνολικού όγκου του μοντέλου θα την περιγράψουμε στην επόμενη παράγραφο. 16

Υπολογισμός όγκου μοντέλου Για να υπολογίσουμε τον όγκο του μοντέλου δεν υπάρχει εύκολος αναλυτικός τρόπος. Η μέθοδος που χρησιμοποιούμε για να υπολογίσουμε τον όγκο είναι προσεγγιστική. Σαρώνουμε όλο τον χώρο που περικλείει το κυρίως περιβάλλων κιβώτιο του μοντέλου με ένα διακριτό βήμα ελέγχοντας για κάθε σημείο της σάρωσης εάν είναι εντός ή εκτός του μοντέλου. Ο έλεγχος εντός-εκτός γίνεται εκπέμποντας μια εικονική ακτίνα από κάθε σημείο σάρωσης προς το άπειρο και ελέγχοντας σε πόσα σημεία τέμνει το μοντέλο. Για περιττό αριθμό τομών το σημείο είναι εσωτερικό. Έτσι ο όγκος του μοντέλου είναι: inner _ count * vol total _ count inner_count total_count vol = Εσωτερικά σημεία = Συνολικά σημεία σάρωσης = Όγκος περιβάλλοντος κιβωτίου Στις παρακάτω εικόνες παρουσιάζεται το αποτέλεσμα της σάρωσης του χώρου για μειούμενες τιμές βήματος. Είναι προφανές ότι όσο μικρότερο βήμα έχουμε, τόσο πιο κοντά στην πραγματικότητα βρίσκεται η προσέγγιση που κάνουμε σχετικά με τον όγκο του μοντέλου. Το βήμα μπορούμε να το αλλάξουμε με το #define VDIV στο αρχείο mesh.h. Μικρό VDIV => μεγάλο βήμα. Μικρές τιμές βήματος έχουν μεγάλο αντίκτυπο στον χρόνο φόρτωσης των μοντέλων. 17

Σφαίρα Η εύρεση της βέλτιστης σφαίρας που περικλείει ένα σύνολο σημείων είναι πιο δύσκολο πρόβλημα. Ο αλγόριθμος που χρησιμοποιήθηκε είναι ο αλγόριθμος του ritter και λειτουργεί ως εξής: 1. Επιλέγει ένα σημείο x και βρίσκει το σημείο y που έχει την μεγαλύτερη απόσταση από το x. 2. Βρίσκει το σημείο z που έχει την μέγιστη απόσταση από το y. Σχηματίζεται αρχική σφαίρα με κέντρο το μέσο των y,z και ακτίνα την μισή απόσταση yz. 3. Ελέγχει αν όλα τα σημεία είναι μέσα σε αυτή την σφαίρα. Εάν κάποιο δεν είναι τροποποιεί την σφαίρα ώστε να το χωρέσει. Για την δημιουργία ιεραρχίας περιβαλλόντων σφαιρών και συγκεκριμένα για την διχοτόμηση κάθε σφαίρας χρησιμοποιείται το ακόλουθο κριτήριο: Όσα τρίγωνα βρίσκονται αριστερά* από το κέντρο κάθε σφαίρας-πατέρα ανήκουν στην μία υποδιαίρεση, ενώ όσα βρίσκονται δεξιά ανήκουν στη άλλη. *Σε κάθε επίπεδο επιλέγεται άλλη διάσταση (xyz) ώστε να προκύψει πιο ομοιόμορφο αποτέλεσμα. Επειδή οι σφαίρες κάθε επιπέδου επικαλύπτονται, είναι δύσκολο να υπολογιστεί αναλυτικά ο όγκος του χώρου που καταλαμβάνει η ένωση των σφαιρών. Αυτό όμως είναι απαραίτητο για τον υπολογισμό του ποσοστού κάλυψης. Ακολουθήθηκε η ίδια μέθοδος όπως και για την εύρεση του όγκου του μοντέλου. Σαρώθηκε ο χώρος του περιβάλλοντος κιβωτίου της μεγαλύτερης σφαίρας και για κάθε επίπεδο σφαιρών ελέγχθηκε αν τουλάχιστον μία σφαίρα του επιπέδου περιέχει κάθε σημείο σάρωσης. 18