ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΖΩΓΡΑΦΟΥ 157 73, ΑΘΗΝΑ ΕΒΓ - ΙΠΛ- 2001-14 Νοέµβριος 2001 ΙΑ ΡΑΣΤΙΚΟΤΗΤΑ Σε ΤΡΙΣ ΙΑΣΤΑΤΟΥΣ ΕΙΚΟΝΙΚΟΥΣ ΚΟΣΜΟΥΣ ΕΠΕΚΤΑΣΕΙΣ ΓΛΩΣΣΑΣ STEDEL ΧΡΗΣΤΟΣ ΠΑΤΕΡΙΤΣΑΣ ΕΠΙΒΛΕΠΩΝ ΚΑΘΗΓΗΤΗΣ: Τίµος Σελλής ΙΠΛΩΜΑΤΙΚΗ ΕΡΓΑΣΙΑ ΕΡΓΑΣΤΗΡΙΟ ΣΥΣΤΗΜΑΤΩΝ ΒΑΣΕΩΝ ΓΝΩΣΕΩΝ ΚΑΙ Ε ΟΜΕΝΩΝ
Πρόλογος Η παρούσα διπλωµατική εργασία πραγµατοποιήθηκε κατά το έτος 2001 υπό την επίβλεψη του καθηγητή κ. Τίµου Σελλή τον οποίον και ευχαριστώ για την ευκαιρία που µου έδωσε να ασχοληθώ µε ένα πραγµατικά ενδιαφέρον θέµα. Θέλω να απευθύνω ιδιαίτερες ευχαριστίες στο καθηγητή κ. Μιχάλη Βαζιργιάννη µε τον οποίο συνεργάστηκα άµεσα στην εκπόνηση της εργασίας. Με βοήθησε και µε κατεύθυνε στον προσδιορισµό του ακριβούς αντικειµένου αυτής της έρευνας και την οµαλή διεκπεραίωσή της. Πατερίτσας Χρήστος ii
Περίληψη Η εργασία αυτή κινείται στο πεδίο έρευνας για εφαρµογές περιγραφής εικονικής πραγµατικότητας. Ειδικότερα ασχολείται µε τους τρόπους που µπορεί µία τέτοια εφαρµογή να περιέχει στοιχεία διαδραστικότητας είτε µε τον χρήστη / περιηγητή του εικονικού κόσµου είτε µεταξύ των οντοτήτων του εικονικού κόσµου. Αποτελεί συνέχιση του έργου που ξεκίνησε µε την διπλωµατική εργασία «Μοντέλο εδοµένων και Γλώσσα Περιγραφής Εφαρµογών Εικονικής Πραγµατικότητας» του Ι. Λαζαρίδη στην οποία αναπτύχθηκε ένα µοντέλο δεδοµένων για την περιγραφή εικονικών κόσµων και σαν εφαρµογή αυτού του µοντέλου δηµιουργήθηκε η πειραµατική γλώσσα STEDEL (Spatio-Temporal Descriptive Language) που είναι µία γλώσσα περιγραφής τέτοιων κόσµων. Τα θέµατα τα οποία αναλύονται στην παρούσα εργασία είναι τα εξής : Καταγραφή και κατηγοριοποίηση γεγονότων σε µία εφαρµογή εικονικής πραγµατικότητας. Εύρεση κατάλληλων αλγορίθµων για τον καθορισµό σχέσεων µεταξύ των αντικειµένων σε τρισδιάστατους εικονικούς κόσµους αλλά και για την ανίχνευση των σχέσεων του χρήστη µε τα αντικείµενα. Περιγραφή τελεστών που εφαρµόζονται σε απλά γεγονότα του εικονικού κόσµου µε σκοπό την δηµιουργία σύνθετων γεγονότων. Υλοποίηση των παραπάνω λειτουργιών σε γλώσσα VRML µε την βοήθεια των γλωσσών Java και JavaScript και ενσωµάτωσή τους στην γλώσσα STEDEL µε αποτέλεσµα την δηµιουργία ενός πλήρους µηχανισµού γεγονότων. Με την εργασία αυτή συµπληρώθηκε άλλο ένα κοµµάτι της STEDEL µε απώτερο σκοπό την ολοκλήρωση και βελτιστοποίηση της έτσι ώστε να αποτελεί ένα πλήρες σύστηµα για την δηµιουργία εφαρµογών εικονικής πραγµατικότητας. iii
Abstract This thesis addresses issues in the domain of virtual reality and visual languages. It mainly deals with ways that these applications can create virtual worlds enhanced with rich interactivity either between the avatar and the virtual world or among the objects of the virtual world. The thesis enhances previous work carried out in the diploma thesis of I. Lazaridis, Data Model and Virtual Reality Applications Descriptive Language. There a data model for the description of virtual worlds was designed; the implementation resulted in an experimental language STEDEL (Spatio-Temporal Descriptive Language). The concepts that the current thesis deals with are: Registration and classification of events (as means of interaction) in a virtual reality application Creation of the proper algorithms used for tracking spatiotemporal relationships among the objects of virtual world and of interaction between the user and the virtual world. Description of operators, which apply on simple events in order to create more complex ones. Implementation of all the above with the use of VRML language with embedded Java and JavaScript code and the creation of complete event mechanism for STEDEL. This thesis accomplished an important part of STEDEL. Further development and optimization of STEDEL will make it a complete tool for developing virtual reality applications. iv
Πίνακας περιεχοµένων 1 Εισαγωγή...1 1.1 Στόχοι της εργασίας... 1 1.2 Οργάνωση του κειµένου... 2 2 Μοντέλα περιγραφής εικονικών κόσµων...3 2.1 Η VRML... 3 2.1.1 οµή αρχείου VRML... 4 2.1.2 Αρχιτεκτονική συστήµατος VRML... 5 2.1.3 Κόµβοι, Πεδία, Γεγονότα... 6 2.1.4 Πρωτότυπα (PROTO / EXTERNPROTO)... 8 2.1.5 ROUTE εντολή... 9 2.1.6 Γεωµετρικά Σχήµατα... 10 2.1.7 Κόµβοι Οµαδοποίησης (Grouping Nodes)... 10 2.1.8 Κόµβοι Αισθητήρες (Sensor Nodes)... 11 2.1.9 Κόµβοι Παρεµβολής (Interpolator Nodes)... 12 2.1.10 Κόµβοι Σεναρίου (Script Nodes)... 13 2.2 Η STEDEL... 15 2.2.1 Μοντέλο δεδοµένων... 15 2.2.2 Χωρική τοποθέτηση... 15 2.2.3 Χωρικός Γράφος Αντικειµένων... 18 2.2.4 Λειτουργίες... 19 2.2.5 Έλεγχος Χωρικών ράσεων... 24 2.2.6 Συνδυασµοί χωρικών δράσεων... 24 2.2.7 Κανόνες Συµπεριφοράς... 24 2.2.8 Σύγκριση... 25 3 Μηχανισµός γεγονότων...26 3.1 Ανάλυση γεγονότων... 26 3.1.1 Γεγονότα από αλληλεπίδραση µε το χρήστη... 27 v
3.1.2 Γεγονότα από εσωτερικές λειτουργίες των αντικειµένων της εφαρµογής... 28 3.1.3 Γεγονότα από σχέση δύο ή περισσοτέρων αντικειµένων µιας εφαρµογής... 28 3.1.4 Γεγονότα που προσδιορίζονται από το δηµιουργό... 28 3.2 Γεγονότα τα οποία προστέθηκαν στην γλώσσα STEDEL... 29 3.2.1 Αλληλεπίδραση χρήστη εφαρµογής... 29 3.2.2 Σχέσεις αντικειµένων εφαρµογής... 30 3.3 Σύνθετα γεγονότα... 31 3.3.1 Τελεστές... 31 3.3.2 Συνδυασµός τελεστών... 32 3.4 Συµπέρασµα... 33 4 Υλοποίηση...34 4.1 Εισαγωγή... 34 4.1.1 Περιβάλλον ανάπτυξης... 35 4.1.2 Αρχείο STEDEL... 36 4.2 Υλοποίηση γεγονότων αλληλεπίδρασης χρήστη εφαρµογής... 36 4.2.1 Υλοποίηση αισθητήρα απόστασης χρήστη αντικειµένων... 36 4.2.2 Υλοποίηση αισθητήρα ανίχνευσης σύγκρουσης χρήστη αντικειµένων... 37 4.2.3 Υλοποίηση αισθητήρα ανίχνευσης αντικειµένων στο πεδίο ορατότητας του χρήστη 38 4.2.4 Τροποποίηση της γραµµατικής... 40 4.3 Αλληλεπίδραση αντικειµένων εφαρµογής... 40 4.3.1 Παρουσίαση κυρίως αλγόριθµου... 41 4.3.2 Προσαρµογή του αλγόριθµου στη VRML... 44 4.3.3 Υπολογισµός απόστασης αντικειµένων... 51 4.3.4 Τροποποίηση της γραµµατικής... 54 4.4 Υλοποίηση σύνθετων γεγονότων... 54 4.4.1 Τελεστής AND... 54 4.4.2 Τελεστής AND NOT... 55 4.4.3 Τελεστής EXCLUSIVE OR... 55 4.4.4 Τελεστής SEQUENCE... 56 4.4.5 Τελεστής INTIME... 56 vi
4.4.6 Τελεστής NOT INTIME... 57 4.4.7 Τελεστής N TIMES... 58 4.4.8 Τελεστής FIRST N TIMES... 58 4.4.9 Σύνθεση τελεστών... 59 5 Έλεγχος και παράδειγµα λειτουργίας...61 5.1 Έλεγχος σωστής λειτουργίας... 61 5.2 Παράδειγµα λειτουργίας... 63 5.2.1 Περιγραφή σεναρίου... 63 5.2.2 Η Λύση σε STEDEL... 63 6 Επίλογος...72 6.1 Συµπεράσµατα... 72 6.2 Μελλοντικές επεκτάσεις... 74 7 Βιβλιογραφία...77 8 Παράρτηµα...78 8.1 Η γραµµατική της γλώσσας STEDEL... 78 8.2 Παράδειγµα λειτουργίας... 84 vii
1 Εισαγωγή Το παρόν κείµενο περιγράφει τη διπλωµατική εργασία µε τίτλο «ΙΑ ΡΑΣΤΙΚΟΤΗΤΑ Σε ΤΡΙΣ ΙΑΣΤΑΤΟΥΣ ΕΙΚΟΝΙΚΟΥΣ ΚΟΣΜΟΥΣ & ΕΠΕΚΤΑΣΕΙΣ ΓΛΩΣΣΑΣ STEDEL» η οποία πραγµατοποιήθηκε κατά την διάρκεια του έτους 2001 από το φοιτητή Χρήστο Πατερίτσα του Τµήµατος Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών του Εθνικού Μετσόβιου Πολυτεχνείου. Η εργασία αυτή έγινε στο Εργαστήριο Συστηµάτων Βάσεων Γνώσεων και εδοµένων υπό την επίβλεψη του καθηγητή κ. Τίµου Σελλή και µε τη βοήθεια και καθοδήγηση του καθηγητή κ. Μιχάλη Βαζιργιάννη. 1.1 Στόχοι της εργασίας Η εργασία αυτή κινείται στο πεδίο έρευνας των εφαρµογών περιγραφής εικονικής πραγµατικότητας. Ειδικότερα ασχολείται µε τους τρόπους που µπορεί µία τέτοια εφαρµογή να περιέχει στοιχεία διαδραστικότητας είτε µε τον χρήστη / περιηγητή του εικονικού κόσµου είτε µεταξύ των οντοτήτων του εικονικού κόσµου. Οι στόχοι που προσπαθεί να καλύψει η εργασία είναι : Ανάλυση και κατηγοριοποίηση γεγονότων σε µία εφαρµογή εικονικής πραγµατικότητας. Εύρεση κατάλληλων αλγορίθµων για τον καθορισµό σχέσεων µεταξύ των αντικειµένων σε τρισδιάστατους εικονικούς κόσµους
Εισαγωγή Εµπλουτισµός της υπάρχουσας πειραµατικής γλώσσας περιγραφής εικονικών κόσµων STEDEL µε δυνατότητες εκµετάλλευσης των παραπάνω αλγόριθµων Προσθήκη στην STEDEL δυνατοτήτων ανίχνευσης σχέσεων του χρήστη µε τα αντικείµενα του εικονικού κόσµου. Περιγραφή τελεστών που µπορούν να εφαρµοστούν σε απλά γεγονότα του εικονικού κόσµου µε σκοπό την δηµιουργία σύνθετων γεγονότων. Ενσωµάτωση των παραπάνω τελεστών στην γλώσσα STEDEL καθώς και της δυνατότητας ορισµού σύνθετων γεγονότων. Αξιολόγηση της γλώσσας VRML σαν υπόστρωµα εκτέλεσης της γλώσσας STEDEL σε σχέση µε την υλοποίηση των παραπάνω στοιχείων. 1.2 Οργάνωση του κειµένου Το κείµενο της παρούσας εργασίας οργανώνεται στα παρακάτω κεφάλαια : Κεφάλαιο 1 ο : Η παρούσα εισαγωγή στην οποία γίνεται ανάπτυξη των στόχων της εργασίας καθώς και αναφορά της δοµή του κειµένου. Κεφάλαιο 2 ο : Συνοπτική παρουσίαση των γλωσσών περιγραφής εικονικών κόσµων και VRML και STEDEL πάνω στις οποίες στηρίζεται η εργασία. Κεφάλαιο 3 ο : Καταγραφή και κατηγοριοποίηση των πιθανών γεγονότων που συµβαίνουν σε µια εφαρµογή εικονικής πραγµατικότητας. Ανάλυση των γεγονότων που ενσωµατώθηκαν στην γλώσσα STEDEL. Ανάλυση τελεστών για την δηµιουργία σύνθετων γεγονότων. Κεφάλαιο 4 ο : Παρουσίαση των µεθόδων και των αλγόριθµων που υλοποιήθηκαν για να δηµιουργηθεί ο µηχανισµός γεγονότων της γλώσσας STEDEL. Κεφάλαιο 5 ο : Παρουσίαση ενός παραδείγµατος για την επίδειξη της λειτουργίας του µηχανισµού γεγονότων. Κεφάλαιο 6 ο : Επίλογος της εργασίας. Καταγραφή συµπερασµάτων και των δυνατών µελλοντικών επεκτάσεων. Κεφάλαιο 7 ο : Βιβλιογραφία. Κεφάλαιο 8 ο : Παράρτηµα. Παράθεση της νέας γραµµατικής της γλώσσας STEDEL καθώς και του πλήρη κώδικα του παραδείγµατος λειτουργίας. 2
2 Μοντέλα περιγραφής εικονικών κόσµων Οι εφαρµογές εικονικής πραγµατικότητας είναι ένα από τα πιο διαδεδοµένα πεδία της πληροφορικής σήµερα. Οι εφαρµογές αυτές εµφανίζουν µεγάλη ποικιλία ως προς το σκοπό που καλούνται να εκπληρώσουν. Μία απλή κατηγοριοποίηση θα µπορούσε να γίνει ως προς το µέγεθος της εφαρµογής αλλά και των υπολογιστικών απαιτήσεων της. Υπάρχουν εφαρµογές όπως ένας εξοµοιωτής πτήσεων για την εκπαίδευση πιλότων, οι οποίες είναι αρκετά πολύπλοκες και έχουν ιδιαίτερες απαιτήσεις σε υλικό υπολογιστών, αλλά υπάρχουν και πολύ απλές εφαρµογές όπως ένα παιχνίδι ή ένας εικονικός κόσµος µικρού µεγέθους ο οποίος είναι προσπελάσιµος µέσω του διαδικτύου και στον οποίο ο χρήστης µπορεί να περιηγηθεί χρησιµοποιώντας τον ηλεκτρονικό υπολογιστή που διαθέτει στο σπίτι του. Το πεδίο στο οποίο κινείται αυτή η εργασία είναι το τελευταίο. Στο κεφάλαιο αυτό θα γίνει µία παρουσίαση δύο διαφορετικών τρόπων δηµιουργίας εφαρµογών εικονικής πραγµατικότητας. 2.1 Η VRML Τα τελευταία χρόνια είναι πολύ δηµοφιλής η δηµιουργία µικρών εικονικών κόσµων οι οποίοι προβάλλονται σε ιστοσελίδες του διαδικτύου. Για την δηµιουργία αυτών των κόσµων έχουν κατασκευαστεί διάφορα εξειδικευµένα εργαλεία. Ένα από αυτά είναι και η γλώσσα περιγραφής εικονικών κόσµων VRML ( Virtual Reality Modeling Language ). Η συγκεκριµένη γλώσσα είναι αρκετά δηµοφιλής στο χώρο της διότι προσφέρει αρκετές
Μοντέλα περιγραφής εικονικών κόσµων δυνατότητες και δεν απαιτεί τη χρήση κάποιας ειδικής εφαρµογής για την δηµιουργία του κόσµου αλλά µόνο την συγγραφή της περιγραφής του σύµφωνα µε το πρότυπο της γλώσσας σε έναν απλό κειµενογράφο. Για την προβολή του κόσµου στο χρήστη χρειάζεται η εγκατάσταση ενός VRML browser στον internet browser που διαθέτει ο χρήστης και από εκεί και πέρα η επίσκεψη στον εικονικό κόσµο γίνεται όπως η επίσκεψη σε απλή ιστοσελίδα. Τα τελευταία χρόνια µάλιστα αρκετοί internet browser διατίθενται µε προεγκατεστηµένο τον VRML browser. 2.1.1 οµή αρχείου VRML Η VRML όπως προαναφέρθηκε είναι µια γλώσσα περιγραφική. Ένα αρχείο VRML περιγράφει έναν εικονικό κόσµο µε βάση το πρότυπο [VRML97]. Ένας κόσµος της VRML αποτελείται από: Ένα χωρικό σύστηµα συντεταγµένων βάση του οποίου µπορούµε να ορίσουµε τρισδιάστατα γεωµετρικά αντικείµενα καθώς και αντικείµενα πολυµέσων (ήχος, εικόνες, video, κλπ.). Επίσης µπορεί να περιλαµβάνει συνδέσµους προς άλλα αρχεία ή εφαρµογές. Τέλος µπορούν να οριστούν κανόνες συµπεριφοράς των αντικειµένων µέσα στον χώρο, όπως µετακίνηση, περιστροφή κ.λ.π. Ένα αρχείο VRML αποτελείται κυρίως από δύο µέρη. Το πρώτο µέρος είναι στην ουσία είναι η περιγραφή του εικονικού κόσµου και το δεύτερο περιγράφει την σύνδεση των γεγονότων που παράγουν και δέχονται οι οντότητες του πρώτου µέρους. Το πρώτο µέρος έχει την δοµή ενός δάσους (ένα σύνολο από δέντρα). Η κύρια δοµή που χρησιµοποιεί η VRML είναι οι κόµβοι. Το πρότυπο της γλώσσας έχει ορίσει έναν αριθµό από διάφορους τύπους κόµβων. Οι κόµβοι αυτοί που σχηµατίζουν τις δενδρικές δοµές µπορούν να διαχωριστούν σε δύο οµάδες. Τους κόµβους που µπορούν να έχουν θέση εσωτερικού κόµβου στο δέντρο και τους κόµβους που αποτελούν τα φύλλα του δέντρου. Οι πρώτοι χρησιµεύουν για να δηλώσουν την χωρική σχέση των αντικειµένων του εικονικού κόσµου καθώς και για να οργανώσουν τα αντικείµενα αυτά σε οµάδες ενώ οι δεύτεροι αποτελούν τα διάφορα αντικείµενα του κόσµου. Το πρώτο αυτό µέρος αποτελεί τον Γράφο Σκηνής (Scene Graph) του VRML αρχείου. Το δεύτερο µέρος αποτελείται από εντολές σύνδεσης των κόµβων (εντολές ROUTE). Αυτές δηλώνουν την κατεύθυνση των γεγονότων (events) της VRML από κόµβο σε κόµβο. Συνδέουν ουσιαστικά τα eventout κάποιον κόµβων (σήµατα από κόµβο) µε τα eventin άλλων κόµβων. Ένα eventout είναι µια ειδοποίηση πως κάτι έχει συµβεί. Ένα eventin είναι µια προτροπή στον κόµβο να κάνει κάτι. Μέσω των ROUTE εντολών υλοποιείται η συµπεριφορά της VRML. Το µέρος αυτό αποτελεί τον Γράφο Αλληλεπίδρασης (Route Graph). Ένα αρχείο VRML µπορεί να περιέχει και άλλα στοιχεία όπως : 4
Μοντέλα περιγραφής εικονικών κόσµων Εντολές PROTO και EXTERNPROTO οι οποίες δηλώνουν ένα νέο τύπο κόµβου της VRML που επεκτείνει τις δυνατότητες της. Ο ορισµός του κόµβου αυτού γίνεται στο ίδιο αρχείο (PROTO) ή σε διαφορετικό (EXTERNPROTO). Στη συνέχεια οι κόµβοι αυτού του νέου τύπου µπορούν να χρησιµοποιηθούν µε παρόµοιο τρόπο µε τους ενσωµατωµένους τύπους κόµβων. Εντολές DEF/USE. Μια εντολή DEF ονοµάζει µε ένα µοναδικό για το αρχείο VRML αναγνωριστικό έναν συγκεκριµένο κόµβο. Στη συνέχεια, µε την εντολή USE <Αναγνωριστικό> µπορεί να αναφέρεται σε αυτόν τον κόµβο. Τονίζεται πως η εντολή USE αναφέρεται στο ένα και συγκεκριµένο κόµβο, δε δηµιουργεί δηλαδή όπου εµφανίζεται ένα αντίγραφο του κόµβου. Σύµφωνα µε το πρότυπο της γλώσσας ένα αρχείο VRML δεν καθορίζει τον τρόπο που θα γίνει η παρουσίαση του εικονικού περιεχοµένου αυτού αλλά µόνο το ίδιο το περιεχόµενο. Η παρουσίαση του περιεχοµένου γίνεται µέσω του VRML browser, ο οποίος αναλαµβάνει να δηµιουργήσει τον εικονικό κόσµο από την περιγραφή στο αρχείο VRML, και να τον παρουσιάσει στο χρήστη. 2.1.2 Αρχιτεκτονική συστήµατος VRML Η λειτουργία του Browser της VRML φαίνεται στο ακόλουθο σχήµα: 5
Μοντέλα περιγραφής εικονικών κόσµων Η είσοδος του συστήµατος είναι η περιγραφή του εικονικού κόσµου στο αρχείο VRML και οι ενέργειες του χρήστη (µέσω των ελεγκτηρίων του Browser). Ο Browser διαβάζει το αρχείο και µε βάση τους ενσωµατωµένους (built-in) κόµβους της γλώσσας και τους κόµβους πρωτότυπα (PROTO κόµβοι) τους οποίους έχει ορίσει ο δηµιουργός της εφαρµογής, δηµιουργεί µια εσωτερική αναπαράσταση του εικονικού κόσµου που αποτελείται από τα εξής στοιχεία: Ιεραρχία Μετασχηµατισµών (Transformation Hierarchy). ηλώνει τη χωρική σχέση των αντικειµένων της εφαρµογής µεταξύ τους. Η Ιεραρχία αυτή βασίζεται στο Γράφο σκηνής που περιγράφτηκε προηγουµένως. εν περιλαµβάνονται όµως όλοι οι κόµβοι του Γράφου Σκηνής στην Ιεραρχία των Μετασχηµατισµών γιατί υπάρχουν τύποι κόµβων οι οποίοι δεν έχουν χωρική υπόσταση. Γράφος Αλληλεπίδρασης (Route Graph). Μηχανή Εκτέλεσης (Execution Engine). Αναλαµβάνει µε βάση το Γράφο Αλληλεπίδρασης να προσαρµόζει την Ιεραρχία Μετασχηµατισµού και αντίστροφα. Φροντίζει να βρίσκεται η εσωτερική αναπαράσταση του εικονικού κόσµου σε µια ορθή κατάσταση, σύµφωνα µε την προδιαγραφή της VRML. Η έξοδος του Browser είναι µια οπτικο-ακουστική παρουσίαση µέσω µιας µηχανής που µετατρέπει την εσωτερική αναπαράσταση του εικονικού κόσµου σε γραφικό / ηχητικό αποτέλεσµα. Ο χρήστης µπορεί να κινηθεί µέσα στον εικονικό κόσµο καθώς και να αλληλεπιδράσει µαζί του παράγοντας γεγονότα τα οποία µπορεί να κατευθύνονται σε κάποιους από τους κόµβους του εικονικού κόσµου. 2.1.3 Κόµβοι, Πεδία, Γεγονότα Η VRML εκτός από τις έννοιες του κόµβου (node) και του γεγονότος (event) χρησιµοποιεί και την έννοια του πεδίου (field). Ένας κόµβος έχει έναν τύπο που είναι το αντίστοιχο της κλάσης του αντικειµενοστραφούς προγραµµατισµού. Ο τύπος αυτός µπορεί να είναι ενσωµατωµένος της γλώσσας (απαιτείται η υποστήριξη του από το πρότυπο [VRML97]) ή πρωτότυπο που έχει καθοριστεί είτε στο ίδιο το αρχείο ή εξωτερικά. Ένας κόµβος περιλαµβάνει πεδία και δέχεται και εκπέµπει γεγονότα. Τα πεδία είναι παράµετροι και χαρακτηριστικά που καθορίζουν το συγκεκριµένο αντικείµενο. Μπορεί να είναι δύο ειδών: απλά fields και exposedfields. Τα γεγονότα διαχωρίζονται σε eventin και eventout. Το κάθε αντικείµενο αλληλεπιδρά µε το περιβάλλον του δεχόµενο eventin και αποστέλλοντας eventout. Τα πεδία exposedfield µπορούν να λειτουργήσουν σαν απλά πεδία fields αλλά και σαν γεγονότα eventin και eventout. Η τιµή ενός exposedfield είναι προσβάσιµη από το περιβάλλον του αντικειµένου. ηλαδή µπορούν να κρατάει µία τιµή σαν 6
Μοντέλα περιγραφής εικονικών κόσµων απλό field αλλά µπορεί ο κόµβος να δέχεται γεγονότα τα οποία να µεταβάλλουν την τιµή του πεδίου καθώς και να στέλνει γεγονότα µε την τιµή που έχει το πεδίο. Οι τιµές των πεδίων και των γεγονότων ανήκουν σε κάποιο τύπο. Εποµένως όταν ορίζεται κάποιο πεδίο ή γεγονός πρέπει να δηλωθεί και ο τύπος του. Παρακάτω φαίνεται ένας πίνακας µε τους τύπους τιµών για πεδία και γεγονότα που υποστηρίζει το πρότυπο της VRML. FIELD/EVENT ΠΕΡΙΓΡΑΦΗ ΤΟΥ SF ΤΥΠΟΥ ΠΑΡΑ ΕΙΓΜΑ SFBool Μια boolean τιµή, TRUE ή FALSE started FALSE SFColor MFColor SFFloat MFFloat Tρεις τιµές του διαστήµατος [0,1] που αντιπροσωπεύουν τις RGB συνιστώσες χρώµατος Ένας ISO C single precision αριθµός κινητής υποδιαστολής MyColor 0.2 0.4 0 depth 23.3 SFImage Μη συµπιεσµένη εικόνα 2D fooimage 1 2 1 0xFF 0x00 SFInt32 Ένας 32-bit ακέραιος counter -1235 MFInt32 SFNode MFNode Ένας κόµβος VRML mynode Sphere { radius 0.34 SFRotation MFRotation SFString MFString SFTime MFTime SFVec2f MFVec2f SFVec3f MFVec3f Mια αυθαίρετη περιστροφή περί έναν άξονα που καθορίζεται από ένα διάνυσµα στο χώρο και µια γωνία περιστροφής. Ένα αλφαριθµητικό κωδικοποιηµένο σύµφωνα µε το UTF-8 σετ χαρακτήρων Ένας ISO C double precision αριθµός κινητής υποδιαστολής που αντιπροσωπεύει το χρονικό διάστηµα σε sec από την 1/1/1970,00:00:00 GMT ιάνυσµα 2D, αποτελούµενο από δύο single precision αριθµούς κινητής υποδιαστολής Τρισδιάστατο διάνυσµα, αποτελούµενο από τρεις single precision αριθµούς κινητής υποδιαστολής aroundx 1 0 0 1.3 state "finished" starttime 0.0 twod 1.2 0 translation 3 3 3 Το πρόθεµα SF σηµαίνει µία τιµή, ενώ το πρόθεµα MF σηµαίνει µια λίστα τιµών του τύπου του αντίστοιχου SF πεδίου. Το MF πεδίο σηµειώνεται µέσα σε αγκύλες. 7
Μοντέλα περιγραφής εικονικών κόσµων Ένα παράδειγµα τύπου κόµβου και συγκεκριµένου αντικειµένου αυτού του τύπου: Group { eventin MFNode addchildren eventin MFNode removechildren exposedfield MFNode children [] field SFVec3f bboxcenter 0 0 0 field SFVec3f bboxsize -1-1 -1 DEF MyGroup Group { children [ USE C1 USE C2 ] bboxcenter 0 1 0 Στον ορισµό του τύπου υπάρχει το όνοµα του τύπου τα πεδία και γεγονότα του τύπου Group, ακολουθούµενα από τον τύπο τους, µέσα σε άγκιστρα. Για τα πεδία έχουν καθοριστεί default τιµές, π.χ. για το κέντρο του περιβάλλοντος κουτιού (bboxcenter) έχει καθοριστεί η τιµή 0 0 0. εξιά φαίνεται τον ορισµό ενός συγκεκριµένου αντικειµένου τύπου Group το οποίο ονοµάζουµε MyGroup. Ο δηµιουργός καθορίζει µόνο τα πεδία του αντικειµένου που τον επιθυµούν, λ.χ. εδώ τα πεδία children και bboxcenter. Τα πεδία που δεν καθορίζονται ρητά λαµβάνουν τις default τιµές που καθορίζει ο ορισµός του τύπου. Άρα το αντικείµενο MyGroup έχει επιπλέον ένα πεδίο bboxsize µε αρχική τιµή 1 1 1. 2.1.4 Πρωτότυπα (PROTO / EXTERNPROTO) Η VRML έχει ένα µηχανισµό καθορισµού νέων τύπων κόµβων µε τις εντολές PROTO και EXTERNPROTO. Μια εντολή PROTO δηµιουργεί ένα νέο τύπο κόµβου, του οποίου ο ορισµός γίνεται στο ίδιο αρχείο. Στο νέο τύπο δίδεται ένα όνοµα και γίνεται η δήλωση των πεδίων και γεγονότων που περιλαµβάνει. Ο ορισµός του τύπου δίνεται στο επόµενο κοµµάτι της εντολής PROTO και αποτελείται από έναν τουλάχιστο κόµβο VRML και µηδέν ή περισσότερες εντολές PROTO/ EXTERNPROTO/ ROUTE. Η αντιστοίχηση των πεδίων και γεγονότων του ορισµού µε τα αντίστοιχα πεδία της δήλωσης γίνεται µέσω της εντολής IS. Η εντολή EXTERNPROTO δηλώνει ένα πρωτότυπο του οποίου ο ορισµός γίνεται σε άλλο αρχείο. χουµε δηλαδή µόνο δήλωση των πεδίων και γεγονότων του κόµβου και όχι του ορισµού του τύπου. Ο ορισµός αυτός βρίσκεται, υπό µορφή µιας PROTO εντολής, στο αρχείο του URL ή των URLs τα οποία περιλαµβάνει η εντολή EXTERNPROTO. Στο παρακάτω παράδειγµα φαίνεται ο ορισµός ενός PROTO και την αντίστοιχη εντολή EXTERNPROTO που πρέπει να υπάρχει σε κάθε αρχείο VRML το οποίο χρησιµοποιεί κόµβους του τύπου που ορίστηκε µε το PROTO. Στο δεύτερο αρχείο φαίνεται και ένα παράδειγµα χρήσης του τύπου µε τη δηµιουργία ενός αντικειµένου. 8
Μοντέλα περιγραφής εικονικών κόσµων #VRML V2.0 utf8 PROTO RedSphere [ field SFFloat radius 1 ] { Shape { geometry Sphere { radius IS radius appearance Appearance { material Material { diffusecolor 1 0 0 #VRML V2.0 utf8 EXTERNPROTO RedSphere [ field SFFloat radius ] [ url RedSphere.wrl" ] Group { children [ RedSphere { Radius 3.3 ] Όνοµα Αρχείου: "RedSphere.wrl" Όνοµα Αρχείου: "Orb.wrl" 2.1.5 ROUTE εντολή Η εντολή ROUTE επιτρέπει την αλληλεπίδραση του χρήστη µε τα αντικείµενα της εφαρµογής, και των αντικειµένων της εφαρµογής µεταξύ τους. Μια εντολή ROUTE δηλώνει την κατεύθυνση ενός γεγονότος από το eventout ή exposedfield ενός κόµβου προς το eventin ή exposedfield ενός άλλου κόµβου. Με εντολές ROUTE δηµιουργείται ένας ολόκληρος γράφος (ROUTE Graph) που παριστάνει τη ροή των γεγονότων ανάµεσα στα αντικείµενα του κόσµου. Έτσι γίνεται να καθοριστούν σχετικά πολύπλοκες συµπεριφορές. H χρήση της εντολής ROUTE µπορεί να συνδυαστεί µε τη χρήση των κόµβων αισθητήρων (Sensor Nodes), των κόµβων παρεµβολής (Interpolation Nodes) και των κόµβων σεναρίου (Script Nodes). Οι κόµβοι αισθητήρων γεννάνε γεγονότα όταν συµβεί κάτι στον κόσµο (ή αν ο χρήστης κάνει µια ενέργεια). Οι κόµβοι παρεµβολής επιτρέπουν τον αυθαίρετο καθορισµό µιας ακολουθίας τιµών που µπορεί να χρησιµοποιηθεί για µεταβολή χρώµατος, κίνηση κλπ. Οι κόµβοι σεναρίου είναι η µεγάλη καινοτοµία της VRML97 έναντι προηγουµένων 9
Μοντέλα περιγραφής εικονικών κόσµων συστηµάτων Εικονικής Πραγµατικότητας και επιτρέπουν τη χρησιµοποίηση της ευελιξίας µιας υψηλού επιπέδου γλώσσας (Java ή JavaScript) για τον προσδιορισµό πραγµατικά σύνθετων συµπεριφορών. Θα γίνει αναφορά σε µερικούς από αυτούς τους κόµβους αναλυτικότερα παρακάτω. 2.1.6 Γεωµετρικά Σχήµατα Ο καθορισµός ενός γεωµετρικού αντικειµένου στη VRML γίνεται µέσω του Shape κόµβου ο οποίος έχει τον παρακάτω ορισµό: Shape { field SFNode geometry NULL field SFNode appearance NULL Περιλαµβάνει δηλαδή ένα πεδίο κόµβου γεωµετρίας και ένα πεδίο κόµβου εµφάνισης. Ο χρήστης καθορίζει αυτούς τους δύο κόµβους και έτσι καθορίζει πλήρως την εµφάνιση του αντικειµένου. Η VRML παρέχει στην παρούσα έκδοση της µια πληθώρα τύπων γεωµετρίας και εµφάνισης µε τους οποίους µπορούν να υλοποιηθούν εκπληκτικά αποτελέσµατα. Η απαρίθµηση τους στα πλαίσια του παρόντος δε θα είχε νόηµα. Ενδεικτικά αναφέρονται οι πρωτογενείς κόµβοι γεωµετρίας Sphere, Cylinder, Cone, Box και οι κόµβοι Appearance, Material και ImageTexture οι οποίοι υλοποιούν εµφάνιση. 2.1.7 Κόµβοι Οµαδοποίησης (Grouping Nodes) Οι κόµβοι οµαδοποίησης περιλαµβάνουν ένα πεδίο children το οποίο περιέχει µια σειρά από κόµβους. Ένας κόµβος οµαδοποίησης ορίζει ένα τοπικό σύστηµα συντεταγµένων για όλους τους κόµβους που είναι παιδιά του. Αυτό το σύστηµα ορίζεται σε σχέση µε το σύστηµα συντεταγµένων του πατέρα του κόµβου αυτού. Έτσι διαδίδονται οι µετασχηµατισµοί από τους κόµβους ρίζα του εικονικού κόσµου (που δεν έχουν πατέρα) προς τα παιδιά αυτών. Υπάρχουν πολλοί κόµβοι οµαδοποίησης που καθορίζονται από το πρότυπο VRML97. Θα αναφέρουµε στους δύο πιο σηµαντικούς. Ο κόµβος Group δηλώνει µια οµάδα αντικειµένων τα οποία µπορούµε να χειριστούµε στη συνέχεια µέσω του κόµβου αυτού. Ο κόµβος Transform επιπλέον ορίζει ένα νέο σύστηµα συντεταγµένων καθορίζοντας µια σχέση ανάµεσα στο σύστηµα συντεταγµένων του πατέρα και στο σύστηµα συντεταγµένων των παιδιών. Transform { 10
Μοντέλα περιγραφής εικονικών κόσµων eventin MFNode addchildren eventin MFNode removechildren exposedfield SFVec3f center 0 0 0 exposedfield MFNode children [] exposedfield SFRotation rotation 0 0 1 0 exposedfield SFVec3f scale 1 1 1 exposedfield SFRotation scaleorientation 0 0 1 0 exposedfield SFVec3f translation 0 0 0 field SFVec3f bboxcenter 0 0 0 field SFVec3f bboxsize -1-1 1 Οι κόµβοι οµαδοποίησης περιλαµβάνουν events addchildren και removechildren µέσω των οποίων είναι δυνατόν να προσθέτονται και να αφαιρούνται παιδιά από αυτούς. Έτσι πετυχαίνεται εµφάνιση, απόκρυψη και µετακίνηση αντικειµένων. Επίσης ο κόµβος Transform περιλαµβάνει µερικά exposedfields (translation, rotation κλπ.) µέσω των οποίων µπορεί µεταβάλλοντας τις τιµές τους να δηµιουργηθεί κίνηση. 2.1.8 Κόµβοι Αισθητήρες (Sensor Nodes) Οι κόµβοι αισθητήρες επιτρέπουν την ανίχνευση συµβάντων που προκύπτουν στον εικονικό κόσµο, όπως το πέρασµα του χρόνου ή οι ενέργειες του χρήστη. Ένας κόµβος αισθητήρας λειτουργεί εκπέµποντας ένα ή περισσότερα eventout όταν «αισθανθεί» αυτό για το οποίο είναι σχεδιασµένος. Το πρότυπο της VRML δίνει µια σειρά από κόµβους αισθητήρες µε τους οποίους µπορεί να ανιχνευτούν διαφόρων τύπων συµβάντα. Χρησιµοποιώντας τα eventout που γεννούν οι κόµβοι αυτοί ως eventin κόµβων παρεµβολής (Interpolator Nodes) ή κόµβων σεναρίου (Script Nodes) µπορεί να καθοριστεί η συµπεριφορά που επιθυµεί ο δηµιουργός να πυροδοτείται από την ανίχνευση των συµβάντων αυτών. Ενδεικτικά αναφέρονται τρεις πολύ χρήσιµοι κόµβοι αισθητήρες: TimeSensor, ProximitySensor, TouchSensor. Με τον κόµβο TimeSensor µπορεί να ανιχνεύεται το πέρασµα του χρόνου. Ο κόµβος αυτός γεννάει ένα eventout σε κάθε «τικ» του ρολογιού (ειδικό του browser). Αυτό είναι µια τιµή στο διάστηµα [0,1] που δηλώνει σε πιο σηµείο του κύκλου χρόνου βρίσκεται ο κόµβος. Επίσης γεννάει ένα eventout µετά το πέρας κάθε κύκλου χρόνου. Το χρονικό µήκος του κύκλου δηλώνεται σε δευτερόλεπτα κατά τον ορισµό του κόµβου. Ο κύκλος ξεκινάει από µία χρονική στιγµή που καθορίζεται σε ένα από τα πεδία του κόµβου και επαναλαµβάνεται αν το 11
Μοντέλα περιγραφής εικονικών κόσµων πεδίο loop είναι TRUE. Αν ο παρόν χρόνος είναι µεγαλύτερος από το χρόνο που καθορίζεται στο πεδίο stoptime τότε ο κόµβος είναι ανενεργός (δε γεννά eventouts). Ο κόµβος ProximitySensor βοηθάει να ανιχνεύεται η θέση και οπτικός προσανατολισµός του χρήστη σε σχέση µε τα αντικείµενα της εφαρµογής. Ο κόµβος αυτός ορίζει ένα κουτί στο τοπικό σύστηµα συντεταγµένων. Μόλις το avatar 1 µπει σε αυτό το κουτί γεννάται ένα eventout. Αντιστοίχως γεννάται ένα άλλο eventout µόλις ο χρήστης βγει από το κουτί. Επίσης eventouts γεννώνται όταν ο χρήστης βρίσκεται µέσα στο κουτί και αλλάζει θέση ή οπτική κατεύθυνση. Ο κόµβος TouchSensor αντιδρά στις ενέργειες του χρήστη µέσω της συσκευής εισόδου (συνήθως ποντίκι). Αντιδρά όταν γίνονται τέτοιες ενέργειες πάνω από γεωµετρικά αντικείµενα τα οποία περιλαµβάνονται στην οµάδα του πατέρα του κόµβου που έχει τον κόµβο αυτό ως παιδί. Γεννά διάφορα ενδιαφέροντα eventouts όπως το touchtime κάθε φορά που ενεργοποιείται η συσκευή εισόδου (κλικ), το isover όποτε ο δείκτης βρίσκεται πάνω από ένα αντικείµενο και το isactive όσο η συσκευή εισόδου είναι ενεργός. 2.1.9 Κόµβοι Παρεµβολής (Interpolator Nodes) Οι κόµβοι παρεµβολής επιτρέπουν την δηµιουργία από ακολουθίες διακριτών αλλαγών µε τις οποίες µπορεί να επιτευχθεί δυναµική συµπεριφορά του εικονικού κόσµου, όπως κίνηση, αλλαγή χρώµατος κ.ο.κ. Ένας κόµβος παρεµβολής περιέχει δύο πεδία, το key και το keyvalue. Το πρώτο είναι τύπου MFFloat (περιέχει δηλαδή µια σειρά από αριθµούς κινητής υποδιαστολής). Το δεύτερο είναι τύπου MF<type> όπου type είναι ο ένας τύπος καθορισµένος για κάθε είδος τέτοιου κόµβου (λ.χ. MFColor για τον ColorInterpolator). Το πεδίο key περιέχει n τιµές, έστω t, t, K, ) τέτοιες ώστε t i {0,1,,n-2. ( 0 1 t n 1 i+1 t i Το πεδίο keyvalue περιέχει και αυτό n τιµές συνάρτησης f(t) για τις αντίστοιχες τιµές του key: v0, t t0 f ( t) = vn 1, t tn 1 linterp( t, vi, vi+ 1), ti t ti + 1 ( v, v1, K, v n 1) 0 που είναι οι τιµές της Η ενεργοποίηση του κόµβου παρεµβολής γίνεται πάντοτε µέσω του eventin set_fraction το οποίο προέρχεται παραδείγµατος από ένα TimeSensor κόµβο. Αυτό έχει ως αποτέλεσµα τον υπολογισµό της συνάρτησης παρεµβολής f(t). Το αποτέλεσµα είναι η εκποµπή ενός eventout 1 Avatar: ο εικονικός χρήστης που θεωρείται πως βρίσκεται σε µια θέση του εικονικού κόσµου και µε κάποια συγκεκριµένη οπτική κατεύθυνση 12
Μοντέλα περιγραφής εικονικών κόσµων value_changed το οποίο µπορεί να χρησιµοποιηθεί στην περίπτωση του PositionInterpolator, λ.χ. για να µεταβάλλει την τιµή του translation πεδίου ενός Transform κόµβου, επιτυγχάνοντας έτσι κίνηση. 2.1.10 Κόµβοι Σεναρίου (Script Nodes) Ο κόµβος σεναρίου (Script Node) είναι το πιο ευέλικτο µέσο για τον καθορισµό συµπεριφοράς µε τη VRML. Συνδυάζει το µοντέλο γεγονότων της VRML µε τη δυνατότητα χρησιµοποίησης µιας ευέλικτης γενικού σκοπού γλώσσας προγραµµατισµού. Ένας κόµβος σεναρίου έχει την εξής περιγραφή: Script { exposedfield MFString url [] field SFBool directoutput FALSE field SFBool mustevaluate FALSE # Οποιοσδήποτε αριθµός από τα eventin field eventout eventtype eventname fieldtype fieldname initialvalue eventtype eventname Το πεδίο url καθορίζει το που βρίσκεται ο κώδικας που υλοποιεί τη συµπεριφορά του script. Αυτό µπορεί να δείχνει σε κάποιο αρχείο Java bytecode ή JavaScript ή µπορεί να περιέχει τον ίδιο τον κώδικα. Το Script επίσης περιέχει έναν αριθµό από eventins, eventouts και fields. εν επιτρέπεται να περιέχει exposedfields. Για κάθε eventin πρέπει να υπάρχει µια µέθοδος στη υλοποίηση του script η οποία είναι ο εξυπηρετητής του eventin και εκτελείται οπόταν ενεργοποιείται το αντίστοιχο eventin. Επίσης µπορούν να χρησιµοποιηθούν µέθοδοι initialize(), shutdown() και eventsprocessed(). Η πρώτη εκτελείται όταν δηµιουργείται το αντικείµενο, η δεύτερη όταν καταστρέφεται (π.χ. λόγω κλεισίµατος του browser) και η τρίτη αναλαµβάνει να χειριστεί πολλαπλά eventins τα οποία έχουν την ίδια χρονική σφραγίδα (έχουν φτάσει δηλαδή ταυτόχρονα). Η περιγραφή της χρήσης των γλωσσών Java και JavaScript (ECMAScript) για την υλοποίηση συµπεριφοράς κόµβων σεναρίου µπορεί να βρεθεί στο στα παραρτήµατα του προτύπου [VRML97 ]. Στο παράρτηµα B. Java Platform αναφέρονται οι µέθοδοι που υποστηρίζει η ιεραρχία κλάσεων vrml.*. Στο παράρτηµα C. ECMAScript αναφέρονται οι αντίστοιχες µέθοδοι για τη γλώσσα JavaScript. 13
Μοντέλα περιγραφής εικονικών κόσµων Στο παρόν αρκεί να αναφερθεί πως µέσω του Script κόµβου είναι δυνατόν να δηµιουργούνται δυναµικά κόµβοι VRML, να αφαιρούνται κόµβοι από το γράφο σκηνής, να δηµιουργούνται και να καταργούνται ROUTEs για την αποστολή γεγονότων, να γίνονται διάφορους υπολογισµούς, να υπάρχει άµεση πρόσβαση στα exposedfields και στα eventin/eventouts άλλων κόµβων και τέλος οτιδήποτε άλλο είναι δυνατό µε µια χρήση µιας γενικής χρήσης γλώσσας προγραµµατισµού. Έτσι µε τον κόµβο Script µπορεί να υλοποιηθεί µεν συµπεριφορά του εικονικού κόσµου, να πραγµατοποιηθεί δε επικοινωνία αυτού µε άλλα πληροφοριακά συστήµατα (π.χ. βάσεις δεδοµένων µε JDBC, άλλες εφαρµογές Java µε RMI ή sockets, κ.ο.κ.). Αυτό επιτρέπει την ενσωµάτωση του εικονικού κόσµου σε ένα πιο σύνθετο πληροφοριακό σύστηµα. Ένα παράδειγµα χρήσης αυτών των δυνατοτήτων είναι οι εικονικοί κόσµοι µε πολλούς χρήστες που συνυπάρχουν. Επίσης µε την συνδυασµένη χρήση του κόµβου Script και των εντολών PROTO και EXTERNPROTO οι οποίες δηλώνουν ένα νέο τύπο κόµβου της VRML δίνεται η δυνατότητα δηµιουργίας νέων τύπων κόµβων οι οποίοι εκµεταλλεύονται τις δυνατότητες του κόµβου Script για να προσφέρουν στον δηµιουργό ένα τρόπο να επεκτείνει τις λειτουργίες της VRML. Παρακάτω φαίνεται σχηµατικά η παραπάνω λειτουργία. ΝΕΟΣ ΤΥΠΟΣ ΚΟΜΒΟΥ VRML PROTO Newtype [ ] ΑΡΧΕΙΟ VRML ΚΟΜΒΟΣ VRML ΤΥΠΟΥ SCRIPT Script NewScript { url : javascript " ΚΩ ΙΚΑΣ " JAVA CLASSES 14
Μοντέλα περιγραφής εικονικών κόσµων 2.2 Η STEDEL Η Spatio-Temporal Descriptive Language (STEDEL) είναι µία γλώσσα περιγραφής εικονικών κόσµων, η οποία δηµιουργήθηκε στο πλαίσιο της διπλωµατικής εργασίας ΜΟΝΤΕΛΟ Ε ΟΜΕΝΩΝ ΚΑΙ ΓΛΩΣΣΑ ΠΕΡΙΓΡΑΦΗΣ ΕΦΑΡΜΟΓΩΝ ΕΙΚΟΝΙΚΗΣ ΠΡΑΓΜΑΤΙΚΟΤΗΤΑΣ. Στην εργασία αυτή αναπτύχθηκε ένα µοντέλο δεδοµένων για την περιγραφή εικονικών κόσµων και σαν εφαρµογή αυτού του µοντέλου δηµιουργήθηκε η γλώσσα STEDEL. 2.2.1 Μοντέλο δεδοµένων Τρία είναι τα βασικά στοιχεία του µοντέλου αυτού :ο χώρος (η σκηνή όπου διαδραµατίζονται τα γεγονότα της εφαρµογής),ο χρόνος (πάνω στον οποίο εξελίσσεται η δράση, το σενάριο της εφαρµογής) και τα αντικείµενα (που είναι οι οντότητες που µετέχουν στην εφαρµογή). Το µοντέλο περιγράφει ένα τρόπο για την χωρική τοποθέτηση των αντικειµένων της εφαρµογής. Στη συνέχεια ορίζει έναν τρόπο περιγραφής της δράσης της εφαρµογής, δηλαδή τις δράσεις των αντικειµένων (µετακινήσεις, µεταµορφώσεις) και της συµπεριφοράς των αντικειµένων κατά την πάροδο του χρόνου της εφαρµογής. Για το τελευταίο ακολουθείται το σχήµα Γεγονός- Συνθήκη- ράση. ηλαδή συµβαίνει κάποιο γεγονός το οποίο επαληθεύει µία συνθήκη οπότε προκαλείται µία δράση. 2.2.2 Χωρική τοποθέτηση Η VRML για να περιγράψει τις χωρικές σχέσεις των αντικειµένων χρησιµοποιεί κόµβους µετασχηµατισµού (Transform nodes). Οι κόµβοι αυτοί ορίζουν ένα νέο σύστηµα συντεταγµένων σε σχέση µε το σύστηµα του κόµβου πατέρα τους στο Γράφο Σκηνής (Scene Graph). Η σχέση του νέου συστήµατος µε το προηγούµενο ορίζεται από τα πεδία του κόµβου µετασχηµατισµού. ηµιουργείται ορίζοντας ορισµένα ή όλα από τα παρακάτω : µία απλή µετατόπιση του κέντρου του συστήµατος, µία απλή περιστροφή γύρω από έναν από τους άξονες του συστήµατος, µια µεταβολή της κλίµακας του συστήµατος (µεγέθυνση\ σµίκρυνση), από τα οποία το καθένα αντιστοιχεί σε ένα από τα πεδία του κόµβου µετασχηµατισµού. Οι κόµβοι που βρίσκονται σε χαµηλότερο επίπεδο δηλαδή που είναι απόγονοι του κόµβου µετασχηµατισµού ακολουθούν το νέο σύστηµα συντεταγµένων. Για το ορισµό πιο σύνθετων χωρικών σχέσεων το µοντέλο της VRML απαιτεί διαδοχικούς κόµβους µετασχηµατισµού. Η περιγραφή χωρικών σχέσεων µε απλούς µετασχηµατισµούς είναι πλήρης γιατί επιτρέπει την περιγραφή κάθε είδος σχέσης ανάµεσα σε δύο αντικείµενα (δηλαδή ανάµεσα στα 15
Μοντέλα περιγραφής εικονικών κόσµων αντικειµενο-κεντρικά τους συστήµατα συντεταγµένων). Έχει όµως κάποια εµφανή µειονεκτήµατα: ε λαµβάνει καθόλου υπ όψη το είδος των αντικειµένων που σχετίζονται µέσω του µετασχηµατισµού. Το µόνο µέρος ενός αντικειµένου που υπεισέρχεται είναι το αντικειµενο-κεντρικό του σύστηµα (δηλαδή το κέντρο του αντικειµένου και ο προσανατολισµός των αξόνων στο χώρο). ε χρησιµοποιεί τα χαρακτηριστικά των αντικειµένων που σχετίζονται (όπως σηµεία ακµές, επιφάνειες κοκ.) ηλαδή δεν µπορούν να οριστούν σχέσεις ανάµεσα σε τέτοια χαρακτηριστικά (λ.χ. πως δύο κύβοι εφάπτονται κατά µήκος µιας ακµής τους). Απαιτεί από το χρήστη τον υπολογισµό µιας σειράς παραµέτρων (παραµέτρους µετατόπισης, περιστροφής, κτλ) που είναι αναγκαίοι στη γενική περίπτωση, αλλά εντελώς πλεονάζουσες όταν ο σκοπός είναι να εκφραστούν απλές σχέσεις που είναι άµεσα κατανοητές από τον άνθρωπο, αλλά δεν υποστηρίζονται από τον απλό µετασχηµατισµό. Στην περίπτωση που αλλάξουν τα απλά αντικείµενα που συνδέει, πρέπει να επαναϋπολογιστεί ο µετασχηµατισµός. Ενώ η υψηλού επιπέδου σχέση «Η µπάλα είναι πάνω στο ψυγείο» είναι αναλλοίωτη στις µεταβολές της µπάλας και του ψυγείου. Αντιθέτως, στην περίπτωση του απλού µετασχηµατισµού πρέπει να φροντιστεί έτσι ώστε αν λ.χ. το ψυγείο γίνει 10 εκατοστά ψηλότερο τότε και η µπάλα να τοποθετηθεί 10 εκατοστά πιο πάνω έτσι ώστε να συνεχίζει να βρίσκεται πάνω στο ψυγείο. εν εκφράζει σχέσεις τοπολογίας (λ.χ. ο κύβος Α είναι µέσα στη σφαίρα Β) ή κατεύθυνσης (ο κύβος Α είναι πάνω στη σφαίρα Β). Τα παραπάνω µειονεκτήµατα δίνουν µια ιδέα για τους λόγους που οδήγησαν στην αναζήτηση υψηλότερου επιπέδου σχέσεων ανάµεσα σε αντικείµενα. 2.2.2.1 Σύνδεσµος Το µοντέλο δεδοµένων της STEDEL εισήγαγε µία νέα έννοια, αυτή του Συνδέσµου, µε στόχο να αντιµετωπίσει τις αδυναµίες που προκύπτουν από την περιγραφή των χωρικών σχέσεων ανάµεσα σε αντικείµενα µε απλούς µετασχηµατισµούς. Ο Σύνδεσµος είναι κι αυτός ένα είδος µετασχηµατισµού, το οποίο επιτρέπει να χρησιµοποιηθεί η γεωµετρία του αντικειµένου στο οποίο ορίζεται για να οριστούν σχέσεις σε ένα ανώτερο νοηµατικά επίπεδο από αυτό του απλού µετασχηµατισµού. Είναι ένα χαρακτηριστικό ενός απλού αντικειµένου και δε νοείται δίχως το αντικείµενο. Ο Σύνδεσµος ονοµάζεται έτσι, γιατί επιτρέπει τη σύνδεση αντικειµένων µεταξύ τους για τη δηµιουργία χωρικών σχέσεων. Αντιστοιχεί πάντοτε σε ένα γεωµετρικό χαρακτηριστικό ενός αντικειµένου ή σε ένα χαρακτηριστικό το οποίο έχει κάποια ειδική σηµασία (αν και δεν αντιστοιχεί σε κάποιο συγκεκριµένο γεωµετρικό 16
Μοντέλα περιγραφής εικονικών κόσµων χαρακτηριστικό). Επίσης αντιστοιχεί σε έναν απλό Μετασχηµατισµό. Όµως αυτός ο µετασχηµατισµός δεν προκύπτει µέσω της πλήρης περιγραφής του (παράµετροι µετατόπισης, περιστροφής, κτλ) αλλά µέσω λιγότερων αλλά σηµασιολογικά πλουσιότερων παραµέτρων. Ένας σύνδεσµος αντικειµένου Α γεωµετρίας G και διαστάσεων D ορίζεται ως η τριάδα (Κατεύθυνση συνδέσµου, Είδος συνδέσµου, Παράµετροι) που ορίζει πλήρως έναν Απλό Μετασχηµατισµό από ή προς (Κατεύθυνση συνδέσµου) το Αντικειµενο-κεντρικό σύστηµα συντεταγµένων του αντικειµένου, προς ή από ένα σύστηµα συντεταγµένων (Είδος συνδέσµου, Παράµετροι). Το σύστηµα αυτό ονοµάζεται και Σύστηµα Συντεταγµένων Συνδέσµου (Σ 3 ) Παράδειγµα Συνδέσµου Έστω ένα αντικείµενο Α µε γεωµετρία «Κουτί» και διαστάσεις (a,b,c). Ορίζουµε ένα σύνδεσµο (FROM, TopOut, _). Αυτός ο σύνδεσµος, αντιστοιχεί σε µια µετατόπιση της µορφής y =y-b/2 (µετατόπιση προς την άνω επιφάνεια του κουτιού). Αντίστοιχα ο σύνδεσµος (TO, TopOut, _) αντιστοιχεί σε µια µετατόπιση της µορφής y =y+b/2 (µετατόπιση από την άνω επιφάνεια του κουτιού). 2.2.2.2 Είδη συνδέσµων Απλοί Σύνδεσµοι Όπως αναφέρθηκε, ένας σύνδεσµος αναφέρεται σε µετατόπιση από ή προς ένα σύστηµα συντεταγµένων. Ο προσδιορισµός αυτού του συστήµατος συντεταγµένων απαιτεί τον προσδιορισµό του κέντρου του και τον προσανατολισµό των αξόνων του. Ένας απλός σύνδεσµος αναφέρεται σε µία επιφάνεια του αντικειµένου. Για τον απλό J σύνδεσµο J, η επιφάνεια αυτή συµβολίζεται S. Το κέντρο του Σ είναι το κέντρο της επιφάνειας. Για µη κανονικές επιφάνειες, το κέντρο προσδιορίζεται αυθαίρετα. 3 Ο y-άξονας του Σ έχει την κατεύθυνση του καθέτου διανύσµατος στην επιφάνεια. Για κάθε επιφάνεια, καθορίζονται δύο σύνδεσµοι (In/Out), ανάλογα µε τον προσανατολισµό του καθέτου διανύσµατος προς το εσωτερικό ή εξωτερικό του αντικειµένου. Ο άξονας αυτός ονοµάζεται και κάθετος άξονας του απλού συνδέσµου. Η µετάβαση από το σύστηµα συντεταγµένων In στο σύστηµα συντεταγµένων Out γίνεται µε µια περιστροφή 180 περί ενός εκ των άλλων δύο αξόνων. 3 3 J Οι άλλοι δύο άξονες του Σ βρίσκονται στο εφαπτοµενικό επίπεδο της επιφάνειας ακριβής προσανατολισµός των αξόνων αυτών καθορίζεται µε βάση κάποια σύµβαση. Πρέπει ωστόσο το σύστηµα συντεταγµένων που ορίζεται να είναι δεξιόστροφο. S. Ο 17
Μοντέλα περιγραφής εικονικών κόσµων Ένας σύνθετος σύνδεσµος αναφέρεται σε ένα οποιοδήποτε χαρακτηριστικό της επιφάνειας του αντικειµένου (Επιφάνεια, γραµµή, σηµείο). Ο καθορισµός του Σ 3 ενός συνθέτου συνδέσµου γίνεται µε τη βοήθεια των λέξεων κλειδιών που καθορίζουν τους απλούς συνδέσµους. 2.2.2.3 Σχέσεις µεταξύ απλών αντικειµένων µε χρήση Συνδέσµων Μια σχέση ανάµεσα σε δύο αντικείµενα µπορεί να περιγραφεί µε τη βοήθεια των συνδέσµων. Ένας σύνδεσµος δεν αντιστοιχεί παρά σε ένα απλό µετασχηµατισµό από ή προς το αντικειµενο-κεντρικό σύστηµα συντεταγµένων ενός αντικειµένου προς ή από το Σ. Εποµένως η χωρική σχέση ανάµεσα σε δύο αντικείµενα µπορεί να καθοριστεί χρησιµοποιώντας τους συνδέσµους που ορίζονται για τη γεωµετρία των αντικειµένων αυτών. Αυτός ήταν άλλωστε και ο λόγος που εισαγωγής της χρήσης των συνδέσµων. 2.2.3 Χωρικός Γράφος Αντικειµένων Το πρόβληµα του καθορισµού των θέσεων των αντικειµένων στο «πραγµατικό χώρο» της εφαρµογής που καθορίζεται από ένα καθολικό σύστηµα συντεταγµένων γίνεται µε τη δηµιουργία του Χωρικού Γράφου Αντικειµένων. Οι κόµβοι του γράφου αυτού είναι απλά αντικείµενα ή, ακριβέστερα, τα συστήµατα συντεταγµένων των απλών αυτών αντικειµένων. Οι ακµές του γράφου είναι απλοί χωρικοί µετασχηµατισµοί. Περιλαµβάνουν δηλαδή απλή αλλαγή κλίµακας, περιστροφή και µετατόπιση. Χωρικός Γράφος Αντικειµένων Ως χωρικό γράφο αντικειµένων G=(A,SR), όπου A = { Ai i = 1,2, K, n ένα σύνολο από απλά αντικείµενα και SR { SR, i, j = 1,2, K, n ορίζεται ένα σύνολο από χωρικές σχέσεις i j ανάµεσα σε αυτά τα αντικείµενα, τέτοιο ώστε ο γράφος να είναι συνεκτικός (δηλαδή για κάθε αντικείµενο A υπάρχει τουλάχιστον ένα αντικείµενο A τέτοιο ώστε µία από τις σχέσεις i k 3 SR i, k, SR k, i ανήκει στο SR SR1 A1 SR4 A2 A3 SR2 A4 A5 SR5 SR3 A6 18
Μοντέλα περιγραφής εικονικών κόσµων Ο υπολογισµός των «πραγµατικών θέσεων» των διαφόρων αντικειµένων, λ.χ. του αντικειµένου Α6 είναι εύκολος εφαρµόζοντας την αλληλουχία των µετασχηµατισµών SR1, SR2, SR3. Με τη χρήση των συνδέσµων, κάθε κλάδος του γράφου χωρίζεται σε τρεις υποκλάδους. Η νέα χωρική σχέση που προκύπτει λέγεται Χωρική Σχέση µε Συνδέσµους. ηλαδή υπάρχει το εξής σχήµα αντιστοιχίας. Aντικείµενο1 Aντικείµενο1 Απλός Μετασχηµατισµός Χωρική Σχέση µε Συνδέσµους J 1 Απλός Μετασχηµατισµός J 2 Aντικείµενο2 Aντικείµενο2 Η διάσπαση του απλού µετασχηµατισµού στο παραπάνω σχήµα: FROM Σύνδεσµος, Απλός Μετασχηµατισµός, TO Μετασχηµατισµός. εξυπηρετεί τον κατασκευαστή εικονικών κόσµων στον καθορισµό σχέσεων µε µεγαλύτερη ευκολία (αφού τώρα µπορεί να αναφερθεί και σε χαρακτηριστικά των αντικειµένων εκτός από το κέντρο τους). Οι σύνδεσµοι µπορούν σε µεγάλο βαθµό να χρησιµοποιηθούν διαισθητικά από το χρήστη, ενώ ο ενδιάµεσος Απλός Μετασχηµατισµός θα είναι τις περισσότερες φορές αρκετά απλός (και σίγουρα απλούστερος από τον πλήρη). Πρέπει επίσης να τονιστεί πως σε µια περίπτωση αρκετά «αυθαίρετης» τοποθέτησης των αντικειµένων στο χώρο, η χρησιµοποίηση των συνδέσµων δεν προσφέρει βοήθεια. Αν δηλαδή η τοποθέτηση των αντικειµένων δεν έχει καµιά κανονικότητα που προκύπτει από τη γεωµετρία τους, τότε οι σύνδεσµοι που βασίζονται στη γεωµετρία των αντικειµένων, αχρηστεύονται. Μια άλλη σηµαντική παρατήρηση για το δηµιουργό του χωρικού γράφου, είναι πως δεν είναι υποχρεωµένος να χρησιµοποιήσει τους συνδέσµους αν για οποιοδήποτε λόγο δεν το επιθυµεί. Οι σύνδεσµοι είναι ένα βοηθητικό χαρακτηριστικό περιγραφής χωρικών σχέσεων, διευκολύνοντας τη σύνθεση χωρικών συµπλεγµάτων και υπάρχουν ως µια δυνατότητα, δίχως να γίνεται η χρήση τους δεσµευτική. 2.2.4 Λειτουργίες Το µοντέλο επίσης περιγράφει και ορισµένες λειτουργίες που µπορούν να πραγµατοποιηθούν στον εικονικό κόσµο. Έχοντας δηµιουργήσει τον Χωρικό Γράφο της εφαρµογής οι λειτουργίες που περιγράφει το µοντέλο είναι οι παρακάτω : Εισαγωγή Αντικειµένων στο Χωρικό Γράφο 19
Μοντέλα περιγραφής εικονικών κόσµων ιαγραφή Αντικειµένων Κίνηση Αντικειµένων Μετασχηµατισµός Αντικειµένων Οι παραπάνω λειτουργίες γίνονται επηρεάζοντας τα στοιχεία του Χωρικού Γράφου, δηλαδή τους κόµβους και τις ακµές. 2.2.4.1 Εισαγωγή Αντικειµένων στο Χωρικό Γράφο Η λειτουργία αυτή έχει ως σκοπό την εισαγωγή νέων αντικειµένων στο εικονικό κόσµο. Εκτελείται κατά την εκκίνηση της εφαρµογής όπου δηµιουργείται ο κόσµος αλλά µπορεί να εκτελεστεί και κατά την διάρκεια της εφαρµογής εάν απαιτείται δυναµική αλλαγή του κόσµου. Μπορούν να διακριθούν διάφορες περιπτώσεις εισαγωγής. Σε όλες τις περιπτώσεις γίνεται η υπόθεση ότι στο χωρικό γράφο θα εισαχθεί επίσης ένας γράφος που καλύπτει τις προδιαγραφές του µοντέλου καθώς και ότι απαιτείται µετά την εισαγωγή ο Χωρικός Γράφος που θα προκύψει να συµφωνεί µε το µοντέλο. Εάν πρέπει να γίνει εισαγωγή ενός µόνο κόµβου αυτό µπορεί να αντιµετωπιστεί ως να ήταν γράφος. Εισαγωγή µε σύνδεση Κόµβου-Ρίζας. Σε αυτή την περίπτωση η ρίζα του εισαγόµενου γράφου συνδέεται µε ένα σύνδεσµο ή ένα απλό µετασχηµατισµό µε κάποιο κόµβο του χωρικού γράφου. Εισαγωγή µε Παρεµβολή µέσω Ρίζας. Ο εισαγόµενος γράφος σ αυτή την περίπτωση πρέπει να εισαχθεί ανάµεσα σε δύο κόµβους του υπάρχοντος γράφου. Απαιτείται σύνδεση του ενός από τους δύο κόµβου του υπάρχοντος γράφου, ο οποίος βρίσκεται σε µικρότερο βάθος, µε την ρίζα του εισαγόµενου γράφου. Ο άλλος κόµβος του αρχικού γράφου µπορεί να συνδεθεί µε οποιονδήποτε κόµβο η λειτουργία επιθυµεί, του εισαγόµενου γράφου. Σύνδεση µε οποιονδήποτε Κόµβο του Εισαγόµενου Γράφου. Μπορεί επίσης η σύνδεση των δύο γράφων να γίνει µεταξύ δυο οποιονδήποτε κόµβων των δύο γράφων. Για τον ένα γράφο βέβαια πρέπει να γίνει µία µετατροπή έτσι ο κόµβος που θα συνδεθεί να µετατραπεί πρώτα σε κόµβο ρίζα. Να υπενθυµιστεί εδώ ότι οι ακµές του γράφου εκφράζουν χωρικές σχέσεις. 2.2.4.2 ιαγραφή Αντικειµένων Η διαγραφή αντικειµένων είναι εξίσου ενδιαφέρουσα µε την εισαγωγή. Μπορεί να προκύψει µόνο όµως κατά την διάρκεια της εφαρµογής. Και εδώ µπορούν να διαχωριστούν δύο περιπτώσεις. ιαγραφή Αντικειµένου Φύλλου. Εδώ η διαγραφή είναι απλή αφού ο κόµβος που αφαιρείται έχει µόνο µία σύνδεση. 20
Μοντέλα περιγραφής εικονικών κόσµων ιαγραφή Εσωτερικού Αντικειµένου. Σε αυτή την περίπτωση η διαγραφή είναι πιο περίπλοκη. Ένα εσωτερικό αντικείµενο του Χωρικού Γράφου επηρεάζει και αυτό τη θέση αντικειµένων τα οποία συνδέονται µε τα απλά αντικείµενα του εσωτερικού αντικειµένου. Άρα η θέση αυτών των αντικειµένων εξαρτάται άµεσα από το εσωτερικό αντικείµενο. Εποµένως όταν αυτό διαγραφεί, πρέπει εκτός από τη διαγραφή όλων των χωρικών σχέσεων που το συνδέουν µε αντικείµενο που δεν ανήκουν σ αυτό, να προδιαγραφούν νέες χωρικές σχέσεις για τα αντικείµενα τα οποία µέχρι πριν τη διαγραφή καθόριζαν τη θέση τους µέσω του εσωτερικού αντικειµένου. 2.2.4.3 Κίνηση Μια άλλη εξίσου σηµαντική λειτουργία είναι η κίνηση των αντικειµένων στο εικονικό κόσµο. Η κίνηση µεταφράζεται σε µεταβολή των χωρικών σχέσεων που συνδέουν το αντικείµενο µε το καθολικό σύστηµα συντεταγµένων. Η µεταβολή αυτή µε την σειρά της µεταφράζεται σε µεταβολή των παραµέτρων των χωρικών σχέσεων ή στην εξολοκλήρου κατάργηση ορισµένων χωρικών σχέσεων και στην δηµιουργία νέων, µ αυτό τον τρόπο γίνεται αλλαγή του χωρικού γράφου. 2.2.4.3.1 Κίνηση Μετασχηµατισµού Χωρικών Σχέσεων Όπως αναφέρθηκε προηγουµένως οι χωρικές σχέσεις µεταξύ των κόµβων αντικειµένων της εφαρµογής µπορεί να έχουν την µορφή συνδέσµου ή την µορφή ενός απλού µετασχηµατισµού. Έτσι η κίνηση επιτυγχάνεται µε την µεταβολή των παραµέτρων του απλού µετασχηµατισµού ή εάν υπάρχει σύνδεσµος, µεταβάλλεται ο απλός µετασχηµατισµός που συγκροτεί τον σύνδεσµο. Οι παράµετροι αυτοί έχει αναφερθεί ότι εκφράζουν έναν µετασχηµατισµό του συστήµατος συντεταγµένων, εποµένως στην ουσία αυτό που µετακινείται είναι το αντικειµενικο-κεντρικό σύστηµα συντεταγµένων του κόµβου. 2.2.4.3.2 Κίνηση Μεταβολής Συνδέσµου Το µοντέλο δεδοµένων ορίζει και µία άλλη περίπτωσης κίνησης µε µεταβολή του ίδιου του συνδέσµου που συνδέει δύο κόµβους όταν δηλαδή η χωρική σχέση. ηλαδή µεταβάλλονται οι παράµετροι που ορίζουν το σύνδεσµο, εάν αυτές υπάρχουν. Για παράδειγµα ο σύνδεσµος from surface out 0 0 to bottom in µπορεί να συνδέει µία σφαίρα µε ένα κουτί, τότε τοποθετεί το κουτί πάνω στην επιφάνεια της σφαίρας. Ο σύνδεσµος δέχεται δύο παραµέτρους οι οποίοι ορίζουν το σηµείο της επιφάνειας της σφαίρας που θα τοποθετηθεί το κουτί (θεωρώντας σφαιρικό σύστηµα συντεταγµένων µε κέντρο το κέντρο της σφαίρας χρειάζονται δύο γωνίες για να ορίσουµε ένα σηµείο στην 21
Μοντέλα περιγραφής εικονικών κόσµων επιφάνεια της σφαίρας). Εάν οι δύο αυτοί παράµετροι µεταβάλλονται τότε το κουτί θα κινείται πάνω στην επιφάνεια της σφαίρας Ο χρόνος της εφαρµογής είναι διακριτός, µε κάτω όριο του κβάντου χρόνου τις δυνατότητες του υλικού και λογισµικού παρουσίασης της εφαρµογής. Για τον καθορισµό κίνησης ορίστηκαν εποµένως συναρτήσεις του διακριτού χρόνου. Η κίνηση µπορεί να θεωρηθεί ως µεταβολή µιας σειράς από παραµέτρους, των συνδέσµων ή των απλών µετασχηµατισµών, σε συνάρτηση µε το χρόνο. Το µοντέλο δεδοµένων ορίζει συναρτήσεις διακριτού χρόνου οι οποίες δίνουν τιµές για τις παραπάνω παραµέτρους. Οι συναρτήσεις αλλάζοντας αυτές τις τιµές που εκφράζουν χωρικές σχέσεις στην ουσία υλοποιούν τις εξής κινήσεις : µετακίνηση, περιστροφή και αλλαγή κλίµακας του αντικειµένου. Οι συναρτήσεις αυτές δέχονται ως ορίσµατα εκτός από την τιµή του χρόνου και άλλες µεταβλητές οι οποίες εκφράζουν διάφορα χαρακτηριστικά των διαφόρων κινήσεων π.χ. ταχύτητα µετακίνησης ή περιστροφής, επιτάχυνση κλπ. 2.2.4.3.3 Κίνηση Κάµερας Η δράση παρακολουθείται από µία ή περισσότερες θέσεις και οπτικές γωνίες. Η κάµερα έχει δύο χαρακτηριστικά, ορισµένα στο τοπικό σύστηµα συντεταγµένων του αντικειµένου πατέρα της: θέση και προσανατολισµό. Αυτά είναι αντίστοιχα της µετατόπισης και περιστροφής που το µοντέλο περιγράφει πως µπορούν να υλοποιηθούν. Εποµένως, χρησιµοποιώντας τις ίδιες µεθόδους, επιτυγχάνεται και η κίνηση µίας κάµερας. 2.2.4.3.4 Κίνηση µε Μεταβολή του Χωρικού Γράφου Η κίνηση µε µεταβολή του χωρικού γράφου χρησιµοποιείται όταν η κίνηση µέσα σε ένα σύστηµα συντεταγµένων δεν µπορεί να περιγράψει την κίνηση ή δεν µπορεί να το πράξει µε εύκολο και κοµψό τρόπο. Αυτού του είδους η κίνηση συµβαίνει όταν ένα αντικείµενο πρέπει να µετακινηθεί σε σχέση µε ένα σύστηµα συντεταγµένων διαφορετικό του πατέρα του. Το παράδειγµα που ακολουθεί αποτυπώνει µια περίπτωση του προβλήµατος: Μια µύγα βρίσκεται πάνω σε ένα τραπέζι το οποίο βρίσκεται πάνω στο πάτωµα. Πάνω στο πάτωµα βρίσκεται επίσης µια Βιβλιοθήκη. Υπάρχει το εξής πρόβληµα: πώς θα καθοριστεί η πορεία της µύγας έτσι ώστε να φτάσει πάνω στη Βιβλιοθήκη; Είναι φανερό πως η πλέον κοµψή τελική κατάσταση είναι η Μύγα να βρίσκεται στο γράφο ως παιδί της βιβλιοθήκης, αφού τελικά θα βρίσκεται «πάνω» σε αυτή. Αν η µύγα µετακινηθεί σε σχέση µε το σύστηµα συντεταγµένων του τραπεζιού µπορεί τελικά να έρθει σε µια θέση «πάνω» στη βιβλιοθήκη. Αυτό όµως είναι δύσκολο γιατί δεν είναι γνωστό που βρίσκεται η βιβλιοθήκη στο σύστηµα συντεταγµένων του τραπεζιού (το στόχο δηλαδή της κίνησης). 22
Μοντέλα περιγραφής εικονικών κόσµων Αντιστοίχως, αν η Μύγα µετακινηθεί στο σύστηµα συντεταγµένων της Βιβλιοθήκης υπάρχει αντίστοιχο πρόβληµα, αφού δεν είναι γνωστό που βρίσκεται η µύγα αρχικά. Η θέση αυτή καθορίζεται µε βάση το τραπέζι. Η λύση του προβλήµατος αυτού είναι να µετακινηθεί η µύγα σε σχέση µε ένα σύστηµα συντεταγµένων πρόγονο τόσο του τραπεζιού όσο και της βιβλιοθήκης, στην περίπτωση αυτή του πατώµατος. Έχοντας υπ όψη την αρχική και τελική θέση της µύγας σε σχέση µε το πάτωµα µπορεί να σχεδιαστεί µια δράση η οποία να έχει αυτές ως αρχική και τελική θέση. Η µεταφορά της µύγας θα γίνει ως εξής: Αφαίρεση της Μύγας από το Χωρικό Γράφο Εισαγωγή της Μύγας στο Χωρικό Γράφο ως παιδί του κόµβου Πάτωµα και σε χωρική σχέση µε αυτόν ισοδύναµη του µονοπατιού Πάτωµα Τραπέζι Μύγα. Μετατόπιση της Μύγας σύµφωνα µε τη δράση που σχεδιάστηκε Αφαίρεση της Μύγας από το Χωρικό Γράφο Εισαγωγή της Μύγας στο Χωρικό Γράφο ως παιδί του κόµβου Βιβλιοθήκη και σε χωρική σχέση µε αυτόν. 2.2.4.4 Μετασχηµατισµός Αντικειµένων Το µοντέλο δεδοµένων περιγράφει τον τρόπο µε τον οποίο µπορούν να µετασχηµατίζονται τα αντικείµενα κατά την διάρκεια της εφαρµογής. Ο µετασχηµατισµός αυτός αφορά τα χαρακτηριστικά ενός αντικειµένου και όχι το είδος του αντικειµένου ( π.χ. σφαίρα ). Οι µετασχηµατισµοί αυτοί µπορούν να διακριθούν σε δύο τύπους : Μετασχηµατισµοί Γεωµετρικών ιαστάσεων. Μετασχηµατισµοί Εµφάνισης, λ.χ. αλλαγή χρώµατος. Το µοντέλο περιγράφει µόνο το πρώτο είδος. Ο κάθε κόµβος - αντικείµενο έχει ορισµένες παραµέτρους που καθορίζουν τα χαρακτηριστικά του αντικειµένου π.χ. την ακτίνα µίας σφαίρας. Με τον ίδιο τρόπο που µεταβάλλονται οι παράµετροι µίας χωρικής σχέσης µέσω συναρτήσεων διακριτού χρόνου για να δηµιουργηθεί κίνηση, έτσι και για τον µετασχηµατισµό των αντικειµένων ορίζεται µία συνάρτηση διακριτού χρόνου η οποία καθορίζει τις τιµές των παραµέτρων των αντικειµένων στο πέρασµα του χρόνου και επιτυγχάνεται ο µετασχηµατισµός. 23
Μοντέλα περιγραφής εικονικών κόσµων 2.2.5 Έλεγχος Χωρικών ράσεων Στο προηγούµενο κεφάλαιο περιγράφθηκε ο τρόπος µε τον οποίο υλοποιούνται οι δράσεις των αντικειµένων. Η STEDEL όµως διαθέτει και µία οµάδα από ελεγκτήρια για τον χρονικό έλεγχο των δράσεων κατά την διάρκεια της εφαρµογής. Τα ελεγκτήρια αυτά είναι : Play: µε το ελεγκτήριο αυτό ξεκινάει ή εκτέλεση µίας δράσης. Pause: µε την χρήση του ελεγκτηρίου αυτού η εκτέλεση της δράσης σταµατά. Με το ελεγκτήριο play η δράση µπορεί να συνεχιστεί από εκεί όπου σταµάτησε. Rewind: µε αυτό το ελεγκτήριο προκαλείται αναίρεση της χωρικής δράσης, δηλαδή το αντικείµενο επιστρέφει στο σηµείο οπού βρισκόταν πριν την εκκίνηση της δράσης µε το ελεγκτήριο play. Kill: µε το ελεγκτήριο αυτό η δράση νεκρώνεται, δηλαδή σταµατάει την εκτέλεση της και δεν αντιδρά πια σε κανένα ελεγκτήριο. 2.2.6 Συνδυασµοί χωρικών δράσεων Η γραµµατική της STEDEL προβλέπει δύο διαφορετικούς τρόπους για την οµαδοποίηση των διάφορων χωρικών δράσεων. Ο πρώτος τρόπος προβλέπει την σειριακή εκτέλεση των χωρικών δράσεων. ηλαδή οι δράσεις εκτελούνται µε την σειρά που καταγράφονται και η έναρξη της επόµενης δράσης γίνεται µόλις τελειώσει η προηγούµενη. Είναι δυνατόν ανάµεσα στην εκτέλεση των δράσεων να δηλώνονται χρονικά διαστήµατα τα οποία θα καθυστερούν την έναρξη της επόµενης χωρικής δράσης. Ο δεύτερος τρόπος προβλέπει την παράλληλη εκκίνηση των χωρικών δράσεών, δηλαδή οι δράσεις ξεκινούν την ίδια χρονική στιγµή. Υπάρχει και εδώ η δυνατότητα να παρεµβάλλονται χρονικά διαστήµατα. Η εκκίνηση της χωρικής δράσης σε αυτή την περίπτωση δεν θα γίνει ταυτόχρονα µε τις άλλες, αλλά µετά την πάροδο του χρονικού διαστήµατος. 2.2.7 Κανόνες Συµπεριφοράς Μέχρι στιγµής έχεί γίνει αναφορά σε απλά αντικείµενα, χωρικές σχέσεις ανάµεσα σε απλά αντικείµενα και σε χωρικές δράσεις που υλοποιούν συµπεριφορά. Αποµένει να οριστούν οι τρόποι µε τους οποίους ο δηµιουργός θα καθορίζει το πότε και υπό ποιες συνθήκες θα συµβαίνει αυτή η συµπεριφορά. Ένας κανόνας συµπεριφοράς είναι µια περιγραφή του τι επιθυµεί ο δηµιουργός να κάνει η εφαρµογή (δράση), ως αποτέλεσµα τίνος γεγονότος (αίτιο), και υπό ποια συνθήκη. Μπορεί να µοντελοποιηθεί δηλαδή µε το σχήµα ενός κανόνα Γεγονός Συνθήκη ράση. Ένας κανόνας αυτής της µορφής είναι για παράδειγµα: «Αν συµβεί το γεγονός Γ και ισχύει η 24
Μοντέλα περιγραφής εικονικών κόσµων συνθήκη Σ κάνε τη δράση». Εποµένως για να µοντελοποιηθεί η συµπεριφορά πρέπει να εξεταστεί τι γεγονότα, συνθήκες και δράσεις πρέπει να υποστηρίζονται. Στις δράσεις έχει ήδη γίνει αναφορά, για τις συνθήκες θα γίνει µία σύντοµη αναφορά αµέσως παρακάτω ενώ για τα γεγονότα, που είναι και ένα από τα κύρια θέµατα αυτής της εργασίας θα γίνει εκτενής ανάλυση στα επόµενα κεφάλαια Μια συνθήκη είναι µια λογική (boolean) έκφραση που αποφαίνεται αν ένα γεγονός που συµβαίνει θα οδηγήσει στην αντίστοιχη δράση που περιγράφεται από τον κανόνα συµπεριφοράς ή θα αγνοηθεί. Ένα παράδειγµα κανόνα µε συνθήκη είναι το εξής: «Αν ο χρήστης κάνει κλικ πάνω στο αντικείµενο, και το αντικείµενο είναι κόκκινο, περιέστρεψε το κατά 90 στο οριζόντιο επίπεδο». Η υπογραµµισµένη φράση είναι παράδειγµα συνθήκης. Η κατηγοριοποίηση των συνθηκών που παρουσιάζουµε είναι µια πρώτη προσέγγιση: Συνθήκες ύπαρξης. Συνθήκες κατάστασης αντικειµένου. Γεωµετρικός Τύπος, ιαστάσεις, Εµφάνιση. Για πολυµεσικό αντικείµενο π.χ. «παίζει», «παγωµένο», «ανάποδο παίξιµο», κ.ο.κ. Συνθήκες θέσης αντικειµένου σε σχέση µε άλλο αντικείµενο: «πάνω», «κάτω», «κοντά», «µακριά», «απόσταση µεγαλύτερη των 10 µέτρων». Συνθήκες κίνησης αντικειµένου σε σχέση µε άλλο αντικείµενο: «κινείται», «πλησιάζει», «αποµακρύνεται», «ταχύτητα µεγαλύτερη των 7 µέτρων / δευτερόλεπτο». Και οι συνθήκες µπορούν να συντεθούν σε σύνθετες συνθήκες. Μια σύνθετη συνθήκη είναι µια λογική έκφραση δύο ή περισσότερων απλών ή σύνθετων συνθηκών. 2.2.8 Σύγκριση Μετά την σύντοµη παρουσίαση των δύο µοντέλων µπορεί να γίνει η παρακάτω παρατήρηση. Τα δύο µοντέλα έχουν τις ίδιες δυνατότητες αφού η γλώσσα STEDEL χρησιµοποιεί ως υπόστρωµα εκτέλεσης την γλώσσα VRML. Αυτό στο οποίο ουσιαστικά διαφέρουν είναι ο τρόπος που προσφέρουν στον δηµιουργό για την περιγραφή του εικονικού κόσµου. Η διαφορά αυτή είναι ο λόγος ύπαρξης της STEDEL και αναλυθεί περισσότερο σε επόµενο κεφάλαιο. 25
3 Μηχανισµός γεγονότων Στο προηγούµενο κεφάλαιο έγινε µία σύντοµη περιγραφή ενός µοντέλου οργάνωσης δεδοµένων για εφαρµογές εικονικής πραγµατικότητας και της γλώσσας STEDEL, η οποία υλοποιεί το µοντέλο αυτό. Η γλώσσα αυτή έχει ως κύριο σκοπό να προσφέρει έναν εύκολο και προσιτό τρόπο για την δηµιουργία εικονικών κόσµων. Με βάση το παραπάνω µοντέλο ο δηµιουργός έχει την δυνατότητα να σχεδιάσει πολύ εύκολα την χωρική διάταξη των αντικειµένων που επιθυµεί καθώς και να ορίσει εύκολα δράσεις για τα αντικείµενα αυτά. Το µοντέλο δεν ανέπτυξε όµως έναν πλούσιο µηχανισµό γεγονότων. Στο κεφάλαιο αυτό θα γίνει µια προσπάθεια καταγραφής και κατηγοριοποίησης των γεγονότων. Στη συνέχεια θα γίνει µία πιο αναλυτική περιγραφή των γεγονότων που δηµιούργησαν ένα νέο µηχανισµό γεγονότων για την γλώσσα STEDEL. 3.1 Ανάλυση γεγονότων Ένα γεγονός είναι µια ειδοποίηση πως κάτι έχει συµβεί που χρειάζεται να αντιµετωπιστεί από την εφαρµογή. ηλαδή το γεγονός είναι µία ανακοίνωση από την εφαρµογή προς την ίδια πάλι την εφαρµογή. Η αξιοποίηση του γεγονότος επαφίεται στην εφαρµογή µέσω των κανόνων συµπεριφοράς που διαθέτει. Εποµένως σε αυτή την διαδικασία δύο είναι τα σηµαντικά προβλήµατα. Πρώτον, τι είναι αυτό που θα συµβεί και πρέπει να ανακοινωθεί ως γεγονός. εύτερον, πως η εφαρµογή θα ανιχνεύσει το συµβάν και τρίτον, µε ποιο τρόπο θα
Μηχανισµός γεγονότων γίνει εκµετάλλευση της δυνατότητας της εφαρµογής να παράγει γεγονότα. Το παρακάτω σχήµα περιγράφει τον µηχανισµό αυτό. Εφαρµ ογή Συµβάν Μηχανισµός ανίχνευσης συµβάντος Παραγωγή γεγονότος Αξιοποίηση του γεγονότος από το σενάριο της εφαρµογής Η παραγωγή γεγονότων και ο τρόπος που αξιοποιούνται τα γεγονότα αυτά είναι µεγάλης σηµασίας για την ικανότητα της γλώσσας να περιγράφει σύνθετα σενάρια, διότι δίνουν την δυνατότητα της παραγωγής δράσεων σε χρονικές στιγµές οι οποίες δεν είναι γνωστές στην αρχή της εφαρµογής Ένα γεγονός συνδέεται µε µια χρονική στιγµή της εφαρµογής δηλαδή περιλαµβάνει µια τιµή που δηλώνει τη χρονική στιγµή που αυτό συνέβη. Ακολουθεί µία καταγραφή των πιθανών γεγονότων συµβάντων και µία προσπάθεια κατηγοριοποίησής τους (αντίστοιχη περιγραφή υπάρχει και στο [VB96]). 3.1.1 Γεγονότα από αλληλεπίδραση µε το χρήστη Τα γεγονότα αυτά δηµιουργούνται ως αποτέλεσµα των ενεργειών του χρήστη και περιλαµβάνουν για παράδειγµα τα εξής γεγονότα από τη συσκευή εισόδου (κλικ ποντικιού), γεγονότα λόγω κίνησης του avatar µέσα στον εικονικό κόσµο. Πιο αναλυτικά η οµάδα αυτή περιλαµβάνει: Γεγονότα από συσκευές εισόδου (κλικ ποντικιού, πάτηµα πλήκτρου, κτλ). Σύγκρουση του avatar σε αντικείµενα της εφαρµογής. Ανίχνευση εισόδου ή εξόδου του avatar σε περιοχή ορισµένων διαστάσεων και σχήµατος γύρω από αντικείµενο. Ανίχνευση σχετικής θέσης του avatar µε αντικείµενο (π.χ. παραγωγή γεγονότων εάν το avatar είναι επάνω από το αντικείµενο ή πίσω και δεξιά από το αντικείµενο κτλ) Ανίχνευση σχετικής κίνησης του avatar σε σχέση µε κάποιο αντικείµενο (π.χ. παραγωγή γεγονότος εάν το avatar πλησιάζει το αντικείµενο). 27
Μηχανισµός γεγονότων Ανίχνευση ύπαρξης αντικειµένου στο οπτικό πεδίο του χρήστη. 3.1.2 Γεγονότα από εσωτερικές λειτουργίες των αντικειµένων της εφαρµογής Ένα αντικείµενο της εφαρµογής µπορεί να παράγει γεγονότα. Τέτοια γεγονότα µπορεί να είναι : Ειδοποίηση για την κατάσταση µία δράσης την οποία πραγµατοποιεί το αντικείµενο. Για παράδειγµα παράγεται ένα γεγονός όταν µία δράση τελειώνει ή όταν βρίσκεται στην µέση της χρονικής της εξέλιξης. Ειδοποίηση για αλλαγές στην µορφή ενός αντικειµένου είτε στις γεωµετρικές διαστάσεις είτε στην εµφάνιση (χρώµα, υφή κτλ). 3.1.3 Γεγονότα από σχέση δύο ή περισσοτέρων αντικειµένων µιας εφαρµογής Τα γεγονότα αυτά συµβαίνουν όταν τα αντικείµενα αυτά βρίσκονται σε µια καθορισµένη χωρική σχέση, λ.χ. συγκρούονται, πλησιάζει το ένα το άλλο πέρα από µια απόσταση, Αναλυτικότερα : Σύγκρουση ανάµεσα σε αντικείµενα της εφαρµογής. Υπολογισµός απόστασης, δηλαδή παραγωγή γεγονότων όταν η απόσταση δύο αντικειµένων υπερβεί ή ελαττωθεί πέρα από ένα καθορισµένο όριο ή απλώς όταν η απόσταση αυτή αλλάξει. Ανίχνευση σχετικής θέσης µεταξύ δύο αντικειµένων (π.χ. παραγωγή γεγονότων εάν το ένα αντικείµενο είναι επάνω από το άλλο αντικείµενο ή πίσω και δεξιά κτλ). Ανίχνευση σχετικής κίνησης δύο αντικειµένων (π.χ. παραγωγή γεγονότων εάν το ένα αντικείµενο πλησιάζει ή αποµακρύνεται από το άλλο). 3.1.4 Γεγονότα που προσδιορίζονται από το δηµιουργό Τα γεγονότα αυτά ορίζονται από το δηµιουργό και πυροδοτούνται για συγκεκριµένη κατάσταση / σχέση των αντικειµένων ή και ίδιας της εφαρµογής. Γεγονότα που σηµαίνουν την έναρξη, λήξη ή και κάποιο ενδιάµεσο χρονικό σηµείο της εφαρµογής. Γεγονότα τα οποία προκύπτουν από σύνθεση των παραπάνω απλών γεγονότων που περιγράφθηκαν. 28
Μηχανισµός γεγονότων 3.2 Γεγονότα τα οποία προστέθηκαν στην γλώσσα STEDEL Στην ενότητα αυτή θα γίνει µία πιο λεπτοµερής περιγραφή των γεγονότων που τελικά ενσωµατώθηκαν στον µηχανισµό παραγωγής γεγονότων της STEDEL. 3.2.1 Αλληλεπίδραση χρήστη εφαρµογής Σε µία εφαρµογή εικονικής πραγµατικότητας ένα από τα ζητούµενα είναι η ενεργός συµµετοχή του χρήστη στη εξέλιξη της δράσης της εφαρµογής. Αυτό αναλύεται ως εξής : ο χρήστης ο οποίος περιηγείται σε έναν εικονικό κόσµο πρέπει να έχει την δυνατότητα να αλληλεπιδρά µε το περιβάλλον. Η STEDEL του προσέφερε την δυνατότητα να αγγίζει αντικείµενα µε κάποιο δεικτικό µέσο (ποντίκι) και να παράγει ένα γεγονός µε τον τρόπο αυτό. Είναι όµως σηµαντικό η εφαρµογή να αντιλαµβάνεται την παρουσία του χρήστη στο χώρο του εικονικού κόσµου. Στην παρούσα ανάπτυξη του µηχανισµού γεγονότων, η αλληλεπίδραση του χρήστη µε την εφαρµογή µεταφράστηκε στα παρακάτω τρία νέα είδη γεγονότων. 3.2.1.1 Υπολογισµός απόστασης αντικειµένων από τον χρήστη Το πρώτο είδος γεγονότων είναι ο υπολογισµός της απόστασης του χρήστη από κάποιο αντικείµενο του εικονικού κόσµου. ύο διαφορετικές προσεγγίσεις µπορούν να αναπτυχθούν στο θέµα αυτό. Πρώτη προσέγγιση: η εφαρµογή να αντιλαµβάνεται την θέση του χρήστη σε σχέση µε το καθολικό σύστηµα συντεταγµένων του εικονικού κόσµου. Για να υπολογιστεί η σχετική θέση η απόσταση του χρήστη από κάποιο αντικείµενο της εφαρµογής, θα πρέπει να υπολογιστεί η απόλυτη θέση του αντικειµένου σε σχέση µε το αρχικό σύστηµα συντεταγµένων της εφαρµογής, δηλαδή πρέπει από τον κόµβο - ρίζα του χωρικού γράφου να βρεθεί το µονοπάτι που οδηγεί στο συγκεκριµένο κόµβο αντικείµενο και συνυπολογίζοντας όλες τις ακµές χωρικές σχέσεις του γράφου που ανήκουν στο µονοπάτι αυτό να βρεθεί η απόλύτη θέση του αντικειµένου. Έχοντας την θέση αυτή και τη θέση του χρήστη µέσα στην εφαρµογή µπορεί να υπολογιστεί η απόσταση χρήστη αντικειµένου. εύτερη προσέγγιση: η απόλυτη θέση του χρήστη να είναι µη διαθέσιµη. Σ αυτή την περίπτωση ο δηµιουργός της εφαρµογής απλά ορίζει σε ποία αντικείµενα θέλει να υπολογίζεται η απόσταση τους από τον χρήστη και δίνει ένα όριο. Όταν η απόσταση του χρήστη γίνει µικρότερη ή µεγαλύτερη από το όριο αυτό τότε η εφαρµογή γεννά τα αντίστοιχα γεγονότα. Με την προσέγγιση αυτή υπάρχει απώλεια πληροφορίας, αλλά οι υπολογισµοί που αναφέρθηκαν προηγουµένως είναι πλέον διάφανοι για τον δηµιουργό της εφαρµογής. Επειδή 29
Μηχανισµός γεγονότων η φιλοσοφία του µοντέλου είναι να παρέχει ευκολία στο δηµιουργό και η γλώσσα περιγραφής να είναι όσο το δυνατόν περισσότερο περιγραφική η δεύτερη προσέγγιση είναι αυτή που υλοποιήθηκε. 3.2.1.2 Ανίχνευση σύγκρουσης του χρήστη µε αντικείµενα της εφαρµογής Εκτός από την υπολογισµό της απόστασης από αντικείµενα είναι επίσης πολύ χρήσιµη και ανίχνευση της σύγκρουσης του χρήστη µε κάποια αντικείµενα. Και σε αυτή την περίπτωση η αντιµετώπιση είναι ίδια. Ο δηµιουργός κατά τον ορισµό ενός κόµβου αντικειµένου δηλώνει αν επιθυµεί να ανιχνεύονται οι συγκρούσεις του χρήστη µε αυτό. Η ανίχνευση µίας σύγκρουσης γεννά το αντίστοιχο γεγονός. 3.2.1.3 Ανίχνευση παρουσίας αντικειµένου στο πεδίο ορατότητας του χρήστη Μία άλλη µορφή αλληλεπίδρασης του χρήστη µε τον εικονικό κόσµο της εφαρµογής είναι η αντίληψη από την εφαρµογή του οπτικού πεδίου του χρήστη. Η λειτουργία αυτή προσφέρει τη δυνατότητα στο δηµιουργό να ξεκινάει δράσεις στον εικονικό κόσµο µόνο όταν είναι σίγουρο ότι αυτές θα πέσουν στην αντίληψη του χρήστη. Ο τρόπος χρήσης αυτής της νέας δυνατότητας είναι ίδιος µε τα προηγούµενα. Ο δηµιουργός κατά τον ορισµό ενός αντικειµένου δηλώνει εάν επιθυµεί να παράγονται γεγονότα όταν αυτό εισέρχεται ή εξέρχεται από το οπτικό πεδίο του χρήστη. 3.2.2 Σχέσεις αντικειµένων εφαρµογής Εισάγοντας στην γλώσσα STEDEL στοιχεία µη ντετερµινιστικά οι χωρικές σχέσεις δύο αντικειµένων γίνονται απρόβλεπτες. Αρχικά οι σχέσεις αυτές είναι γνωστές και εάν η εξέλιξη της δράσης ήταν σαφώς καθορισµένη τότε οι θέσεις των αντικειµένων οποιαδήποτε χρονική στιγµή θα ήταν υπολογιστές κατά την εκκίνηση της εφαρµογής. Όµως όπως αναφέρθηκε προηγουµένως ο χρήστης αλληλεπιδρά µε την εφαρµογή και αφού η δράση του χρήστη είναι µη ντετερµινιστική έτσι και τα γεγονότα που γεννά η δράση αυτή είναι αδύνατον να προβλεφθούν κατά την στιγµή της συγγραφής της εφαρµογής. Θα ήταν εποµένως χρήσιµο να µπορούν να ανιχνεύονται οι χωρικές σχέσεις των αντικειµένων κατά την διάρκεια της εφαρµογής. Η παρούσα εργασία πρόσθεσε στην STEDEL την δυνατότητα να εντοπίζει δύο ειδών χωρικές σχέσεις ανάµεσα σε ένα ζευγάρι αντικειµένων : 3.2.2.1 Ανίχνευση σύγκρουσης µεταξύ δύο αντικειµένων Ο δηµιουργός έχει την δυνατότητα να ορίσει ζεύγη αντικειµένων για τα οποία τον ενδιαφέρει να εντοπίζει εάν υπάρχει σύγκρουση κατά την διάρκεια της εφαρµογής. Εάν εντοπιστεί σύγκρουση τότε παράγεται το κατάλληλο γεγονός. 30
Μηχανισµός γεγονότων 3.2.2.2 Υπολογισµός απόστασης µεταξύ δύο αντικειµένων Με τον ίδιο τρόπο ο δηµιουργός ορίζει ζεύγη για τα οποία υπολογίζεται η ευκλείδεια απόσταση των δύο κοντινότερων σηµείων των αντικειµένων και αν αύτη είναι µικρότερη ή µεγαλύτερη από ένα όριο το οποίο θέτει ο δηµιουργός τότε παράγονται τα κατάλληλα γεγονότα. 3.3 Σύνθετα γεγονότα Παραπάνω περιγράφθηκαν ορισµένα νέα γεγονότα τα οποία προστέθηκαν στον µηχανισµό γεγονότων της STEDEL. Τα γεγονότα αυτά αυξάνουν κατά πολύ τις δυνατότητες του δηµιουργού για να σχεδιάσει εικονικούς κόσµους µε πολύπλοκο σενάριο και µε πολλά στοιχεία αλληλεπίδρασης. Ένα άλλο όµως στοιχείο που θα έδινε ακόµα µεγαλύτερες δυνατότητες είναι ο ορισµός σύνθετων γεγονότων. Με τον όρο σύνθετο γεγονός εννοείται ένα γεγονός το οποίο παράγεται όταν ένας συνδυασµός άλλων απλών γεγονότων προκύψει. Τα απλά γεγονότα µπορούν να συνδυαστούν µε χρήση αλγεβρικών ή χρονικών τελεστών κατάλληλα ορισµένων (πλήρης περιγραφή [VB96] ). 3.3.1 Τελεστές Ένας τελεστής εφαρµόζεται σε ένα, δύο ή και περισσότερα γεγονότα. Για να παραχθεί το σύνθετο γεγονός πρέπει να τα απλά γεγονότα να ικανοποιούν την σχέση την οποία αντιπροσωπεύει ο τελεστής. Οι τελεστές που προστέθηκαν στην STEDEL για την δηµιουργία των σύνθετων γεγονότων είναι οι παρακάτω : AND: ο τελεστής αυτός όταν συνδέει δύο γεγονότα τότε δηµιουργεί ένα σύνθετο γεγονός το οποίο παράγεται µόνο όταν και τα δύο γεγονότα που συνδέει έχουν παραχθεί (όχι απαραίτητα ταυτόχρονα) π.χ. γεγονός Α AND γεγονός Β. AND NOT: ο τελεστής αυτός όταν συνδέει δύο γεγονότα τότε δηµιουργεί ένα σύνθετο γεγονός το οποίο παράγεται όταν συµβεί το πρώτο από αυτά και δεν έχει συµβεί το δεύτερο π.χ. γεγονός Α AND NOT γεγονός Β. EXCLUSIVE OR: ο τελεστής αυτός όταν συνδέει δύο γεγονότα τότε δηµιουργεί ένα σύνθετο γεγονός το οποίο παράγεται µόνο όταν συµβεί αποκλειστικά ένα από τα δύο, π.χ. γεγονός Α EXCLUSIVE OR γεγονός Β τότε αν συµβεί ένα από τα δύο τότε παράγεται το σύνθετο γεγονός αλλά µόλις συµβεί και το άλλο γεγονός δεν πρόκειται να παραχθεί ξανά σύνθετο γεγονός. 31
Μηχανισµός γεγονότων SEQ: ο τελεστής συνδέει και αυτός δύο γεγονότα και το σύνθετο γεγονός παράγεται µόνο αν τα δυο αυτά γεγονότα συµβούν µε την χρονική σειρά που ορίζει ο τελεστής π.χ. γεγονός Α SEQ γεγονός Β τότε πρέπει να συµβεί πρώτα το Α και ύστερα το Β για να γεννηθεί το σύνθετο γεγονός. IN TIME t sec: ο τελεστής αυτός παράγει ένα σύνθετο γεγονός εάν συµβεί ένα συγκεκριµένο γεγονός µέσα σε χρόνο t δευτερολέπτων από την παραγωγή ενός άλλου γεγονότος π.χ. γεγονός Α IN TIME t sec γεγονός Β, δηλαδή σε χρονικό διάστηµα t δευτερολέπτων από την παραγωγή του Α πρέπει να συµβεί το Β για να παραχθεί το τελικό γεγονός. Το χρονικό διάστηµα t το ορίζει ο δηµιουργός. NOT IN TIME t sec: ο τελεστής αυτός παράγει ένα σύνθετο γεγονός εάν δεν συµβεί ένα συγκεκριµένο γεγονός µέσα σε χρόνο t δευτερολέπτων από την παραγωγή ενός άλλου γεγονότος π.χ. γεγονός Α NOT IN TIME t sec γεγονός Β, δηλαδή σε χρονικό διάστηµα t δευτερολέπτων από την παραγωγή του Α αν δεν συµβεί το Β τότε θα παραχθεί το τελικό γεγονός. Το χρονικό διάστηµα t το ορίζει ο δηµιουργός. n TIMES: ο τελεστής αυτός εφαρµόζεται σε ένα µόνο γεγονός και το σύνθετο γεγονός παράγεται µόνο το απλό γεγονός συµβεί n φορές π.χ. γεγονός Α 3 TIMES. Τον αριθµό των επαναλήψεων τον ορίζει ο δηµιουργός. FIRST n TIMES: και αυτός ο τελεστής εφαρµόζεται σε ένα µόνο γεγονός και το σύνθετο γεγονός παράγεται κάθε φορά που συµβαίνει το απλό γεγονός, όχι όµως έπ αόριστον, αλλά µόνο για τις πρώτες n φορές, που θα συµβεί το απλό γεγονός. Υστέρα όσες φόρες και να παραχθεί το απλό γεγονός το σύνθετο γεγονός παύει να παράγεται π.χ. γεγονός Α FIRST 3 TIMES, δηλαδή µόνο για τις πρώτες 3 φορές που παράγεται το γεγονός Α θα παράγεται και το σύνθετο γεγονός. Τον αριθµό των επαναλήψεων τον ορίζει ο δηµιουργός. 3.3.2 Συνδυασµός τελεστών Πέρα όµως από αυτούς τους τελεστές, οι οποίοι µπορούν να εφαρµοστούν σε ένα ή δύο γεγονότα, ενσωµατώθηκε η δυνατότητα της συνδυασµένης χρήσης των παραπάνω τελεστών. ηλαδή ένας τελεστής ο οποίος εφαρµόζεται σε ένα ή δύο γεγονότα, θα µπορούσε να εφαρµόζεται και σε παραπάνω π.χ. AND (γεγονός Α, γεγονός Β, γεγονός Γ). Η δυνατότητα αυτή υλοποιήθηκε µε παράθεση του ίδιου τελεστή όσες φορές αυτό είναι επιθυµητό, δηλαδή η παραπάνω δήλωση µε τα τρία γεγονότα Α, Β και Γ µπορεί να δηλωθεί και όπως φαίνεται παρακάτω : γεγονός Α AND γεγονός Β AND γεγονός Γ Πέρα όµως από την παράθεση του ίδιου τελεστή υλοποιήθηκε η δυνατότητα παράθεσης και διαφορετικών τελεστών. ηλαδή είναι δυνατόν στο σύνθετο γεγονός που δηµιουργείται µε 32
Μηχανισµός γεγονότων την εφαρµογή ενός τελεστή σε ένα ή δύο απλά γεγονότα να εφαρµοστεί ένας διαφορετικός τελεστής για την δηµιουργία ενός ακόµα πιο σύνθετου γεγονότος, π.χ. γεγονός Α AND γεγονός Β 4 TIMES. Η προτεραιότητα των τελεστών είναι µεγαλύτερη από τα δεξιά προς τα αριστερά, δηλαδή ο δεξιότερος τελεστής θα εφαρµοστεί στα απλό γεγονός και ο αµέσως επόµενος θα εφαρµοστεί στο σύνθετο γεγονός που προέκυψε. Στο προηγούµενο παράδειγµα το σύνθετο γεγονός θα παραχθεί εάν το γεγονός Β συµβεί 4 φορές και συµβεί παράλληλα και το γεγονός Α και όχι εάν το γεγονός Α και το γεγονός Β συµβούν και τα δύο 4 φορές. Η επιλογή αυτής της προτεραιότητας έγινε για λόγους που επιβλήθηκαν από την κατασκευή του compiler της STEDEL. Για να µην είναι όµως αυτό δεσµευτικό και για να υπάρχει µεγαλύτερη ευελιξία στη συγγραφή των γεγονότων δόθηκε η δυνατότητα της αλλαγής της προτεραιότητας µε την χρήση παρενθέσεων, π.χ. για να συµβεί η δεύτερη περίπτωση του προηγούµενου παραδείγµατος θα έπρεπε να δηλωθεί όπως παρακάτω (γεγονός Α AND γεγονός B) 4 TIMES. Επίσης µε την χρήση των παρενθέσεων σε συνδυασµό µε την δυνατότητα εφαρµογής των τελεστών σε σύνθετα γεγονότα είναί δυνατός ο ορισµός από τον δηµιουργό ακόµα πιο σύνθετων γεγονότων όπως για παράδειγµα το παρακάτω. (γεγονός Α AND γεγονός Β) SEQ (γεγονός Γ IN TIME 3 sec γεγονός ) δηλαδή για την παραγωγή του σύνθετου γεγονότος απαιτείται να συµβούν πρώτα τα γεγονότα Α και Β ύστερα να συµβεί το γεγονός Γ και µέσα σε χρονικό διάστηµα 3 δευτερολέπτων να συµβεί το γεγονός. 3.4 Συµπέρασµα Όπως είναι φανερό ο µηχανισµός γεγονότων που µόλις περιγράφθηκε µε την προσθήκη του στην γλώσσα STEDEL προσφέρει πια στον δηµιουργό των εφαρµογών εικονικής πραγµατικότητας την δυνατότητα να δηµιουργήσει κόσµους οι οποίοι θα µπορούν να αλληλεπιδρούν µε τον χρήστη, να αντιλαµβάνονται σχέσεις µεταξύ των αντικειµένων και όλα τα γεγονότα που παράγονται θα µπορούν να συνδυαστούν για να δηµιουργήσουν σύνθετα γεγονότα µε τέτοιο τρόπο που να καλύπτει ένα µεγάλο ποσοστό των απαιτήσεων που µπορεί να έχει ο δηµιουργός ως προς την παραγωγή γεγονότων. Με τις δυνατότητες αυτές, οι εφαρµογές δεν είναι πια περιορισµένες σε ένα σενάριο εξαρχής καθορισµένο, αλλά στην ουσία το σενάριο έχει χαρακτήρα δυναµικό και στην διαµόρφωσή του συµµετέχει και ο χρήστης. Οπότε το θεµατικό πεδίο και σκοπός που καλούνται να εξυπηρετήσουν οι εφαρµογές αυτές διευρύνεται σηµαντικά. 33
4 Υλοποίηση Στο προηγούµενο κεφάλαιο έγινε η καταγραφή ενός συνόλου γεγονότων καθώς και περιγραφή αυτών που προστέθηκαν στην γλώσσα STEDEL. Σε αυτό το κεφάλαιο θα γίνει µία παρουσίαση του τρόπου µε τον οποίο υλοποιήθηκαν τα γεγονότα αυτά στην γλώσσα STEDEL. 4.1 Εισαγωγή Αναφέρθηκε σε προηγούµενο κεφάλαιο ο τρόπος λειτουργίας της γλώσσας αυτής. Η STEDEL είναι µία γλώσσα που χρησιµοποιεί σαν υπόστρωµα εκτέλεσης την γλώσσα VRML. Η VRML έχει ένα βασικό µειονέκτηµα, είναι δύσχρηστη για έναν µη εξειδικευµένο δηµιουργό, ο τρόπος περιγραφής του χωρικού γράφου είναι αρκετά πολύπλοκος το ίδιο και ο χειρισµός των γεγονότων. Η πολυπλοκότητα αυτή όµως της προσδίδει πολύ ισχυρές δυνατότητες, µία από αυτές είναι η συγγραφή κανόνων συµπεριφοράς σε γλώσσες προγραµµατισµού Java και JavaScript. Αυτό δίνει την δυνατότητα στον δηµιουργό να περιγράψει σενάρια πολύπλοκα µε την χρήση των δοµών ελέγχου των γλωσσών αυτών, κάτι που προϋποθέτει την γνώση των γλωσσών αυτών από το δηµιουργό. Ένα άλλο πλεονέκτηµα της VRML είναι η δυνατότητα ορισµού νέων τύπων κόµβων. Χρησιµοποιώντας αυτά τα δύο στοιχεία η γλώσσα STEDEL έχει ως σκοπό να εκµεταλλευτεί τις δυνατότητες της VRML και
Υλοποίηση συγχρόνως να προσφέρει έναν τρόπο συγγραφής σεναρίων εικονικής πραγµατικότητας, ο οποίος θα είναι σαφώς πιο εύκολος καθώς και πλουσιότερος εννοιολογικά. 4.1.1 Περιβάλλον ανάπτυξης Για να εµπλουτιστεί λοιπόν η γλώσσα µε τα στοιχεία που περιγράφθηκαν χρειάστηκαν δύο πράγµατα. Πρώτον η τροποποίηση της γραµµατικής της γλώσσας καθώς και του compiler της STEDEL έτσι ώστε να ανταποκρίνεται στη νέα γραµµατική και δεύτερον η συγγραφή των καταλλήλων scripts και java classes για να υλοποιήσουν τον µηχανισµό γεγονότων που περιγράφθηκε. Όλη η διαδικασία της ανάπτυξης έγινε σε λειτουργικό περιβάλλον Microsoft Windows 2000. Για τη συγγραφή του απαραίτητου κώδικα σε γλώσσες Java, JavaScript αλλά και VRML χρησιµοποιήθηκε ο προγραµµατιστικός κειµενογράφος ΕditPlus2 (www.editplus.com). Για την δηµιουργία καθώς και για την τροποποίηση του compiler της STEDEL χρησιµοποιήθηκε το εργαλείο JavaCC 2.0 της Metamata (www.metamata.com) το οποίο αναπτύσσεται σε συνεργασία µε την Sun Microsystems (www.sun.com). Το εργαλείο αυτό δέχεται ως είσοδο µια περιγραφή των κανόνων παραγωγής της γλώσσας σε µια BNF-like µορφή, καθώς και εµβόλιµο κώδικα Java ο οποίος καθορίζει τις ενέργειες που πρέπει να γίνουν κατά την αναγνώριση των εκφράσεων της γλώσσας. Το εργαλείο JavaCC βοηθάει τον προγραµµατιστή, διεκπεραιώνοντας τη λεκτική και συντακτική ανάλυση. Επιπλέον κάνει την περιγραφή της γραµµατικής της γλώσσας εύκολα τροποποιήσιµη, µέσω της αλλαγής των κανόνων παραγωγής στο αρχείο περιγραφής της γλώσσας. Το τελικό προϊόν του εργαλείου είναι αρχεία πηγαίου κώδικα σε γλώσσα Java. Για την δηµιουργία των Java bytecodes που αποτελούν το εκτελέσιµο αρχείο του compiler χρησιµοποιήθηκε το περιβάλλον Java2 SDK, Standard Edition Version 1.3.0. Για την δηµιουργία των java classes που απαιτήθηκαν για να υλοποιήσουν τις λειτουργίες της γλώσσας STEDEL χρησιµοποιήθηκε το περιβάλλον Borland JBuilder 4 (http://www.borland.com/jbuilder) της Inprise. Για την παρουσίαση των εικονικών κόσµων που περιγράφονται στα VRML αρχεία τα οποία παράγονται από τον compiler της γλώσσας STEDEL χρησιµοποιήθηκε ο Cortona VRML Client 3.1 της ParallelGraphics (www.parallelgraphics.com), ο οποίος είναι ένας browser της γλώσσας υπό µορφή plugin του γενικού Web browser που στην συγκεκριµένη περίπτωση χρησιµοποιήθηκε ο Microsoft Internet Explorer 5.5. 35
Υλοποίηση 4.1.2 Αρχείο STEDEL Στο σηµείο αυτό να υπενθυµιστεί ο ότι ο αρχικός κανόνας παραγωγής της STEDEL είναι ο παρακάτω : <STEDEL> ::= <SpatialGraph> {<Event> {<Condition> {<Action> {<Rule> Οι κανόνες που χρειάστηκαν τροποποίηση είναι οι <SpatialGraph> και <Rule>, ενώ ο κανόνας <Event> προστέθηκε για πρώτη φορά αφού στην προηγούµενη έκδοση δεν είχε υλοποιηθεί. 4.2 Υλοποίηση γεγονότων αλληλεπίδρασης χρήστη εφαρµογής Η VRML περιλαµβάνει στο σύνολο των κόµβων της και ορισµένους κόµβους- αισθητήρες (βλέπε κεφάλαιο 2.8). Οι κόµβοι αυτοί λειτουργούν για να παράγουν γεγονότα όπως αυτά που περιγράφθηκαν στο προηγούµενο κεφάλαιο στην αντίστοιχη παράγραφο. Οι κόµβοι λειτουργούν ως αισθητήρες. 4.2.1 Υλοποίηση αισθητήρα απόστασης χρήστη αντικειµένων Για την υλοποίηση αυτού του αισθητήρα χρησιµοποιήθηκε ο κόµβος της VRML, ProximitySensor. ProximitySensor { exposedfield SFVec3f center 0 0 0 exposedfield SFVec3f size 0 0 0 exposedfield SFBool enabled TRUE eventout SFBool isactive eventout SFVec3f position_changed eventout SFRotation orientation_changed eventout SFTime entertime eventout SFTime exittime 36
Υλοποίηση Ο κόµβος αυτός δηλώνεται σαν κόµβος - παιδί ενός κόµβου της VRML και δίνονται τρεις τιµές στο πεδίο (field) size οι οποίες ορίζουν τις διαστάσεις ενός ορθογώνιου παραλληλεπιπέδου το οποίο έχει σαν κέντρο το κέντρο του συστήµατος συντεταγµένων του κόµβου πατέρα. Μόλις ο χρήστης εισέρχεται ή εξέρχεται από αυτό το παραλληλεπίπεδο τότε παράγονται τα αντίστοιχα γεγονότα για να ειδοποιήσουν για τις ενέργειες αυτές. Στην STEDEL τα γεγονότα αυτά ονοµάστηκαν Enter και Exit αντίστοιχα. Εποµένως σε αυτή την περίπτωση δεν χρειάστηκε η συγγραφή ενός script. Τροποποιήθηκε ο compiler της STEDEL έτσι ώστε όταν µετά την δήλωση ένας χωρικού γράφου (SpatialGraph, βλέπε γραµµατική STEDEL) να αναγνωρίζει την δήλωση Proximity και ύστερα τρεις δεκαδικούς οι οποίοι δηλώνουν τις διαστάσεις του παραλληλεπιπέδου. Ο compiler δηλώνει στο αρχείο VRML που δηµιουργεί στον συγκεκριµένο κόµβο, ένα κόµβο ProximitySensor σαν κόµβο παιδί π.χ. ήλωση σε STEDEL: SpatialGraph < Proximity P1 {size 5 5 5 > G1 Sphere { radius 4 color 0.4 0.4 0.4 { no_children Παραγόµενη δήλωση σε VRML: DEF G1 Transform { children [ DEF XX7 Shape { geometry Sphere { radius 4 appearance Appearance { material Material { diffusecolor 0.4 0.4 0.4 DEF P1 ProximitySensor { size 5 5 5 ] 4.2.2 Υλοποίηση αισθητήρα ανίχνευσης σύγκρουσης χρήστη αντικειµένων Για την υλοποίηση αυτού του αισθητήρα χρησιµοποιήθηκε ο κόµβος της VRML, Collision. Collision { eventin MFNode addchildren eventin MFNode removechildren exposedfield MFNode children [] exposedfield SFBool collide TRUE 37
Υλοποίηση field SFVec3f bboxcenter 0 0 0 field SFVec3f bboxsize -1-1 -1 field SFNode proxy NULL eventout SFTime collidetime Σε αυτή την περίπτωση υπάρχει µια διαφορά σε σχέση µε τον κόµβο ProximitySensor. Ο κόµβος Collision δηλώνεται σαν κόµβος πατέρας ενός κόµβου της VRML για τον οποίο πρέπει να ανιχνεύονται οι συγκρούσεις µε τον χρήστη. Η ανίχνευση των συγκρούσεων γίνεται και για όλους τους κόµβους απογόνους του συγκεκριµένου κόµβου. Αυτό το χαρακτηριστικό του κόµβου Collision της VRML δεν είναι τροποποιήσιµο, οπότε αν δεν επιθυµείται ανίχνευση σύγκρουσης για τους απογόνους τότε απλά δεν πρέπει να δηλωθούν σαν απόγονοι. Μόλις ο χρήστης συγκρουσθεί ο αισθητήρας παράγει το γεγονός. Στην STEDEL το γεγονός αυτό ονοµάστηκε Collide. Ο compiler της STEDEL τροποποιήθηκε έτσι ώστε όταν µετά την δήλωση ένας χωρικού γράφου (SpatialGraph, βλέπε γραµµατική STEDEL) να αναγνωρίζει την δήλωση Collision. Ο compiler δηλώνει στο αρχείο VRML που δηµιουργεί ένα κόµβο Collision σαν κόµβο πατέρα και ύστερα δηλώνει τον κόµβο αντικείµενο π.χ. ήλωση σε STEDEL: SpatialGraph < Collision C1 > G1 Sphere { radius 4 color 0.4 0.4 0.4 { no_children Παραγόµενη δήλωση σε VRML: DEF C1 Collision { children [ DEF G1 Transform { children [ DEF XX7 Shape { geometry Sphere { radius 4 appearance Appearance { material Material { diffusecolor 0.4 0.4 0.4 ] ] 4.2.3 Υλοποίηση αισθητήρα ανίχνευσης αντικειµένων στο πεδίο ορατότητας του χρήστη Ο αισθητήρας αυτός υλοποιήθηκε µε χρήση του κόµβου της VRML VisibilitySensor. 38
Υλοποίηση VisibilitySensor { exposedfield SFVec3f center 0 0 0 exposedfield SFBool enabled TRUE exposedfield SFVec3f size 0 0 0 eventout eventout eventout SFTime entertime SFTime exittime SFBool isactive Ο κόµβος αυτός λειτουργεί περίπου σαν τον κόµβο ProximitySensor. ηλώνεται σαν κόµβο παιδί ενός κόµβου της VRML και δίνονται τρεις τιµές οι οποίες ορίζουν τις διαστάσεις ενός ορθογώνιου παραλληλεπιπέδου το οποίο έχει σαν κέντρο το κέντρο του συστήµατος συντεταγµένων του κόµβου πατέρα. Όταν το παραλληλεπίπεδο αυτό εισέρχεται ή εξέρχεται από το οπτικό πεδίο του χρήστη τότε παράγονται τα αντίστοιχα γεγονότα για να ειδοποιήσουν για τις ενέργειες αυτές. Στην STEDEL τα γεγονότα αυτά αντιστοιχούν στα Visible και Notvisible. Ο compiler της STEDEL όταν µετά την δήλωση ένας χωρικού γράφου (SpatialGraph, βλέπε γραµµατική STEDEL) αναγνωρίζει την δήλωση Visibility και ύστερα τρεις δεκαδικούς οι οποίοι δηλώνουν τις διαστάσεις του παραλληλεπιπέδου. Ο compiler δηλώνει στο αρχείο VRML που δηµιουργεί στον συγκεκριµένο κόµβο ένα κόµβο VisibilitySensor σαν κόµβο παιδί π.χ. ήλωση σε STEDEL: SpatialGraph < Visibility V1 {size 5 5 5 > G1 Sphere {radius 4 color 0.4 0.4 0.4 { no_children Παραγόµενη δήλωση σε VRML: DEF G1 Transform { children [ DEF XX17 Shape { geometry Sphere { radius 4 appearance Appearance { material Material { diffusecolor 0.4 0.4 0.4 DEF V1 VisibilitySensor { size 5 5 5 ] 39
Υλοποίηση 4.2.4 Τροποποίηση της γραµµατικής Ύστερα από τις παραπάνω προσθήκες στη γλώσσα STEDEL δίνεται η τροποποιηµένη γραµµατική της γλώσσας. Η τροποποίηση για την ενσωµάτωση έγινε στον κανόνα παραγωγής <SpatialGraph>. <SpatialGraph> ::= <SimpleObjectDefinition> <ParentSpatialGraph> <ParentSpatialGraph> ::= SpatialGraph [< <SensorsNonGeometryList> >] [<ID>] [<SimpleObject>] { <BranchList> <SensorsNonGeometryList> ::= { <TouchSensor> <SoundSource> <CollisionSensor> <ProximitySensor> <VisibilitySensor> <TouchSensor> ::= Touch <ID> <SoundSource> ::= Sound <ID> <CollisionSensor> ::= Collision <ID> <ProximitySensor> ::= Proximity <ID> { size <NUM> <NUM> <NUM> [ center <NUM> <NUM> <NUM> ] <VisibilitySensor> ::= Visibility <ID> { size <NUM> <NUM> <NUM> [ center <NUM> <NUM> <NUM> ] 4.3 Αλληλεπίδραση αντικειµένων εφαρµογής Στην ενότητα αυτή θα παρουσιαστεί ο τρόπος µε τον υλοποιήθηκαν στην STEDEL τα γεγονότα τα οποία έχουν σχέση µε την αλληλεπίδραση των αντικειµένων της εφαρµογής. Όπως περιγράφθηκε και στο προηγούµενο κεφάλαιο, δύο ειδών γεγονότα προστέθηκαν στην STEDEL τα οποία ανήκουν σ αυτή την κατηγορία. Ο υπολογισµός της απόστασης δύο αντικείµενων και η ανίχνευση συγκρούσεων µεταξύ δύο αντικειµένων. Σε αντίθεση µε την 40
Υλοποίηση προηγούµενη κατηγορία των γεγονότων εδώ η γλώσσα VRML δεν έχει τίποτα να προσφέρει. Έτσι έγινε ορισµός νέων τύπών κόµβου για την VRML µέσω των εντολών PROTO και EXTERNPROTO (βλέπε [VRML97] ή κεφάλαιο 2). Αυτή η εντολή δίνει την δυνατότητα ορισµού των νέων τύπου κόµβων σε διαφορετικά αρχεία από το κύριο αρχείο της εφαρµογής. Ορίστηκαν οι νέοι τύποι σε διαφορετικά αρχεία τα οποία περιέχουν και ενσωµατωµένο κώδικα γλώσσας JavaScript για τον έλεγχο της λειτουργίας των γεγονότων αλλά και για την παραγωγή των γεγονότων. Ο κυρίως όµως αλγόριθµος που εκτελεί τις παραπάνω λειτουργίες έχει υλοποιηθεί σε γλώσσα Java. 4.3.1 Παρουσίαση κυρίως αλγόριθµου Ο κυρίως αλγόριθµος προέρχεται από το άρθρο "Fast Collision Detection of Moving Convex Polyhedra" του Rich Rabbitz το οποίο περιέχεται στο [PSH94]. Στο άρθρο αυτό περιγράφεται ένας γρήγορος αλγόριθµος ο οποίος υπολογίζει εάν η τοµή δύο κυρτών πολυέδρων είναι κενή ή όχι. Το άρθρο επίσης περιέχει µία υλοποίηση του αλγόριθµου σε γλώσσα C. Για τις ανάγκες της παρούσας εργασίας ο αλγόριθµος υλοποιήθηκε σε γλώσσα Java σε δύο κύριες κλάσεις, τις Collide και Utilities. Τα δεδοµένα τα οποία εισάγονται στον αλγόριθµο είναι : Οι συντεταγµένες των κορυφών των δύο πολυέδρων. Οι συντεταγµένες αυτές υπολογίζονται ως προς ένα σύστηµα το οποίο έχει ως προς το κέντρο του κάθε πολυέδρου εφόσον η συµµετρία του πολυέδρου επιτρέπει να οριστεί ένα τέτοιο σηµείο ή αλλιώς ένα εσωτερικό σηµείο του. Οι συντεταγµένες των δύο «κέντρων» που αναφέρθηκαν προηγουµένως ως προς ένα κοινό σύστηµα συντεταγµένων. Οι πληροφορίες οργανώνονται µε την παρακάτω. χρήση των δύο κλάσεων που παρουσιάζονται public static class Polyhedron { double[][] verts; /* 3-D vertices of polyhedron. */ int m; /* number of 3-D vertices. */ double[] trn; /*translational position in world coords*/ double[] itrn; /*inverse of translational position*/ Polyhedron (float v[][],int n,float t[]) { Η κλάση Polyhedron περιλαµβάνει : 41
Υλοποίηση Ένα πίνακα Ν*3 οποίος περιέχει τις συντεταγµένες των κορυφών ενός πολυέδρου µε Ν κορυφές, µε κέντρο του συστήµατος όπως περιγράφθηκε παραπάνω. Μια µεταβλητή µε των αριθµό των κορυφών. Μια µεταβλητή η οποία περιέχει της συντεταγµένες του κέντρου του συστήµατος που αναφέρθηκε πριν ως προς ένα σύστηµα το οποίο θα είναι κοινό και για τα δύο πολύεδρα Μία µεταβλητή η οποία περιέχει τις αντίθετες συντεταγµένες από αυτές της προηγούµενης µεταβλητής. Και έναν κατασκευαστή της κλάσης. public static class Couple { Polyhedron polyhdrn1; /*First polyhedron of collision test */ Polyhedron polyhdrn2; /*Second polyhedron of collision test*/ boolean plane_exists;/*prospective separating plane flag*/ double[] pln_pnt1 = new double[3]; /*1st point used to form separating plane*/ double[] pln_pnt2 = new double[3]; /*2nd point used to form separating plane*/ int[][] vert_indx = new int[4][2]; /*cached points for distance algorithm*/ int n; /*number of cached points, if any*/ Couple(Polyhedron poly1,polyhedron poly2,boolean plane_ex, int m) {... Η κλάση Couple περιλαµβάνει : ύο κλάσεις Polyhedron, οι οποίες αντιστοιχούν στα δύο πολύεδρα για τα οποία ο αλγόριθµος ανιχνεύει εάν συγκρούονται. Έναν κατασκευαστή της κλάσης. 42
Υλοποίηση Οι υπόλοιπες µεταβλητές χρησιµεύουν για την αποθήκευση στοιχείων τα οποία θα χρησιµοποιηθούν κατά την επανάληψη του αλγόριθµου προς αποφυγή επαναϋπολογισµού τους και τα οποία θα αναλυθούν παρακάτω. Η βασική ιδέα του αλγόριθµου είναι να υπολογίσει εάν υπάρχει ένα επίπεδο το οποίο να χωρίζει τον τρισδιάστατο χώρο σε δύο υποχώρους έτσι ώστε στον κάθε ένα να βρίσκεται και ένα από τα δύο πολύεδρα. Το επίπεδο αυτό µπορεί να ονοµαστεί διαχωριστικό επίπεδο. Ο αλγόριθµος ελέγχει κάθε φορά εάν υπάρχει τέτοιο διαχωριστικό επίπεδο. Για να αποφύγει κάθε φορά τον έλεγχο αυτό αποθηκεύει το επίπεδο που έχει βρει ( εάν έχει βρει) και κατά την επανάληψη του αλγόριθµου ελέγχει αν το προηγούµενο διαχωριστικό επίπεδο εξακολουθεί να διατηρεί αυτή την ιδιότητα του. Αν ναι τότε δεν είναι απαραίτητος ο επαναϋπολογισµός του. Οι µεταβλητές στις οποίες αποθηκεύεται το διαχωριστικό επίπεδο είναι οι µεταβλητές pln_pnt1 και pln_pnt2 της κλάσης Couple. Στην περίπτωση που αλγόριθµος εκτελείται για πρώτη φορά ή το διαχωριστικό επίπεδο που είχε βρεθεί δεν έχει πια αυτή την ιδιότητα ή αν την προηγούµενη φορά δεν υπήρχε διαχωριστικό επίπεδο υπήρχε δηλαδή σύγκρουση των δύο πολυέδρων, τότε για να καθοριστεί ένα υπάρχει τέτοιο επίπεδο ο αλγόριθµος βρίσκει τα δύο κοντινότερα σηµεία των δύο πολυέδρων και υπολογίζει την ευκλείδεια απόστασή τους. Εάν η απόσταση αυτή δεν είναι µηδέν τότε υπάρχει διαχωριστικό επίπεδο αλλιώς ο αλγόριθµος επιστρέφει πως τα δύο πολύεδρα συγκρούονται. Ο αλγόριθµος έχει σηµαντικά πλεονεκτήµατα. Πρώτον µε την µέθοδο που περιγράφθηκε προηγουµένως µειώνεται το υπολογιστικό κόστος του αλγορίθµου διότι στις περισσότερες των περιπτώσεων το διαχωριστικό επίπεδο θα διατηρείται και έτσι αποφεύγεται ο επαναϋπολογισµός του. εύτερον για την µετακίνηση των δύο πολυέδρων απλά µεταβάλλονται οι µεταβλητές trn της κλάσης Polyhedron και δεν χρειάζεται η µεταβολή των συντεταγµένων των κορυφών. Συνοπτικά η λογική του αλγόριθµου είναι : 43
Υλοποίηση Εάν κατά την προηγούµενη εκτέλεση υπήρχε διαχωριστικό επίπεδο έλεγξε εάν αυτό εξακολουθεί να είναι τέτοιο. Εάν είναι τότε δεν υπάρχει σύγκρουση. Αλλιώς βρες εάν υπάρχει καινούργιο διαχωριστικό επίπεδο. Πώς; Βρες τα δύο κοντινότερα σηµεία και υπολόγισε την απόστασή τους. Εάν υπάρχει τότε δεν υπάρχει σύγκρουση. Αλλιώς τα πολύεδρα συγκρούονται. Αλλιώς βρες εάν υπάρχει διαχωριστικό επίπεδο και ενήργησε όπως και πριν. 4.3.2 Προσαρµογή του αλγόριθµου στη VRML Για να χρησιµοποιηθεί ο παραπάνω αλγόριθµος στην VRML και κατά προέκταση στην STEDEL χρειάζονται αρκετές προσαρµογές. ηµιουργήθηκαν δύο νέοι τύποι κόµβων µε χρήση της εντολής PROTO. Ο πρώτος τύπος ονοµάστηκε CollideScript και η δήλωση του είναι : PROTO CollideScript [ field SFTime duration -1 field SFTime time_step 0.001 field SFNode law NULL eventin SFTime test eventin SFTime play eventin SFTime pause eventin SFTime kill eventout SFTime finished eventout SFTime entertime eventout SFTime exittime eventout SFTime collide ] Ένας κόµβος τύπου CollideScript έχει ως σκοπό να προσφέρει την διεπιφάνεια χρήσης του αλγόριθµου εντοπισµού των συγκρούσεων στα αρχεία VRML. Ο νέος αυτός τύπος κόµβων διαθέτει τρία πεδία (fields), τέσσερα γεγονότα τύπου eventin(γεγονότα τα οποία ειδοποιούν τον κόµβο) και τέσσερα τύπου eventout (γεγονότα µε 44
Υλοποίηση τα οποία ο κόµβος ειδοποιεί την εφαρµογή). Τα γεγονότα του τύπου eventin έχουν οµοιότητες µε τα γεγονότα των τύπων που ορίζουν τις δράσεις της STEDEL. Η οµοιότητα έγκειται ότι η χρήση των γεγονότων αυτών είναι ο έλεγχος της λειτουργίας του κόµβου (ελεγκτήρια). Ο συγκεκριµένος τύπος διαθέτει τα εξής ελεγκτήρια : test: Το συγκεκριµένο ελεγκτήριο προκαλεί την εκτέλεση του αλγόριθµου για µία µόνο φορά. play: Με αυτό το ελεγκτήριο προκαλείται η επαναληπτική εκτέλεση του αλγόριθµου για χρονικό διάστηµα που ορίζεται από το πεδίο duration (σε δευτερόλεπτα). Αν η µεταβλητή έχει την τιµή 1 τότε ο αλγόριθµος θα εκτελείται έπ άπειρον. Η εκτέλεση δεν είναι αδιάκοπη αλλά ξεκινάει σε χρονικές στιγµές που απέχουν όσο ορίζει το πεδίο time_step. pause: Το ελεγκτήριο αυτό προκαλεί την παύση της εκτέλεσης του αλγορίθµου. Η εκτέλεση θα ξεκινήσει πάλι αν ο κόµβος λάβει µήνυµα play. kill: Με την χρήση αυτού του ελεγκτηρίου προκαλείται διακοπή της εκτέλεσης και νέκρωση του κόµβου, δηλαδή ο κόµβος απενεργοποιείται και δεν αντιδρά πια στα ελεγκτήρια ούτε παράγει γεγονότα. Τα ελεγκτήρια υλοποιήθηκαν ώστε να δώσουν στον δηµιουργό την δυνατότητα καλύτερης χρήσης αυτού του κόµβου παραγωγής γεγονότων και κυρίως της δυνατότητας χρησιµοποίησης του κόµβου µόνο όταν αυτό απαιτείται έτσι ώστε να µην υπάρχει σπατάλη των πόρων του συστήµατος. Σύµφωνα µε τα παραπάνω ορίζονται και οι καταστάσεις στις οποίες µπορεί να βρεθεί ο κόµβος. Ένα διάγραµµα αυτών των καταστάσεων φαίνεται normal termination pause Initial play Playing play Paused normal termination test kill kill kill ιάγραµµα Καταστάσεων παρακάτω. Testing kill Killed 45
Υλοποίηση Η χρησιµότητα των τεσσάρων γεγονότων τύπου eventout που έχει ο νέος τύπος κόµβων είναι η εξής : finished: Το γεγονός αυτό παράγεται όταν το χρονικό διάστηµα που έχει οριστεί στο πεδίο duration έχει τελειώσει και ο έλεγχος για τον εντοπισµό των συγκρούσεων σταµατάει. entertime: Η παράγωγή αυτού του γεγονότος γίνεται µόλις εντοπιστεί σύγκρουση των αντικειµένων για πρώτη φορά, δηλαδή όταν το ένα αντικείµενο εισέρχεται µέσα στο άλλο. exittime: Το γεγονός αυτό παράγεται όταν κατά την προηγούµενη εκτέλεση του αλγόριθµου είχε εντοπιστεί σύγκρουση ενώ στη παρούσα εκτέλεση όχι, δηλαδή δηλώνει την στιγµή που το ένα αντικείµενο εξέρχεται από το άλλο. collide: Το γεγονός αυτό παράγεται µόλις εντοπιστεί σύγκρουση των αντικειµένων και θα συνεχίσει να παράγεται σε χρονικά διαστήµατα που ορίζονται στο πεδίο time_step εφόσον βέβαια τα αντικείµενα εξακολουθούν να συγκρούονται. Στο πεδίο law δηλώνεται ένας κόµβος ο οποίος θα εκτελέσει τον εντοπισµό των συγκρούσεων. Η εσωτερική λειτουργία του κόµβου, δηλαδή η αρχικοποίηση καθώς και η εξυπηρέτηση των γεγονότων που φθάνουν στον κόµβο (τα ελεγκτήρια) γίνονται από JavaScript συναρτήσεις όπως προβλέπει το πρότυπο της VRML. Οι συναρτήσεις αυτές επικοινωνούν στέλνοντας και λαµβάνοντας γεγονότα µε τον δεύτερο κόµβο νέου τύπου. Το όνοµα του τύπου είναι CollideLaw και η δήλωση του πρωτότυπου είναι : PROTO CollideLaw [ field SFNode nodea NULL field SFNode nodeb NULL field SFNode roota NULL field SFNode rootb NULL field SFString namea "" field SFString nameb "" eventin SFTime check eventout SFTime collision ] Στα πεδία nodea και nodeb δηλώνονται οι κόµβοι αντικείµενα για τους οποίους επιθυµείται η ανίχνευση των συγκρούσεών τους, ενώ στα πεδία namea και nameb 46
Υλοποίηση δηλώνονται τα ονόµατα των κόµβων αυτών σε µορφή συµβολοσειράς. Στα πεδία roota και rootb δηλώνονται οι κόµβοι ρίζες στο χωρικό γράφο των δύο προηγούµενων κόµβων. Ως ρίζα ορίζεται ο κόµβος που βρίσκεται υψηλότερα στην Ιεραρχία Μετασχηµατισµών όπως αυτή ορίστηκε στο κεφάλαιο 2 (βλέπε και [VRML97]). Στην περίπτωση της γλώσσας STEDEL η ρίζα αυτή είναι κοινή. Οι κόµβοι αυτοί δίνονται ως είσοδο στο νέο αυτό κόµβο γιατί όπως θα περιγραφθεί παρακάτω είναι απαραίτητη η διάσχισή του γράφου της εφαρµογής και επειδή ο γράφος θα µπορούσε να χαρακτηριστεί κατευθυνόµενος, δηλαδή δεν είναι δυνατόν να αντληθεί η πληροφορία ποιος είναι ο κόµβος πατέρας ενός κόµβου απαιτείται η πληροφορία αυτή έτσι ώστε να ξεκινήσει η διάσχιση του γράφου. Τα ονόµατα πάλι των κόµβων δίνονται διότι κατά την διάσχιση θα γίνει αναζήτηση των συγκεκριµένων κόµβων και εδώ όµως η VRML δεν δίνει την δυνατότητα όταν ένας κόµβος δηλώνεται ως πεδίο (field) ενός άλλου κόµβου τότε σ αυτόν τον κόµβο περνάνε ως δεδοµένα όλα τα χαρακτηριστικά του προηγούµενου κόµβου εκτός από το όνοµά του. Όταν ο κόµβος λάβει ένα γεγονός check τύπου eventin τότε εκτελείται ο αλγόριθµος, εάν εντοπιστεί σύγκρουση τότε από τον κόµβο παράγεται το γεγονός collision τύπου eventout. Ο κόµβος CollideLaw αποτελεί την διεπιφάνεια του κόµβου CollideScript µε την Java κλάση CollideScript η οποία είναι η διεπιφάνεια µε τον αλγόριθµο που περιγράφθηκε προηγουµένως. Η κλάση αυτή διαθέτει δύο public συναρτήσεις, τις initialize() και processevent(vrml.event e). Οι δύο αυτές συναρτήσεις ορίζονται από το πρότυπο της VRML για την συνεργασία των κόµβων µε Java κλάσεις. Η πρώτη καλείται όταν ένας κόµβος Script αρχικοποιείται (βλέπε κεφάλαιο 2 ή [VRML97]) στην προκειµένη περίπτωση ένας κόµβος τύπου CollideLaw. Η δεύτερη όταν ένα γεγονός φτάσει στον κόµβο τύπου CollideLaw. Ποια είναι όµως η λειτουργία της κλάσης αυτής; Όπως περιγράφθηκε προηγουµένως ο αλγόριθµος που εντοπίζει τις συγκρούσεις µεταξύ των πολυέδρων απαιτεί σαν είσοδο τις συντεταγµένες των κορυφών των πολυέδρων ως προς συστήµατα συντεταγµένων µε κέντρο διαφορετικό για κάθε πολύεδρο. Επίσης είναι απαραίτητο να δοθούν οι συντεταγµένες των δύο κέντρων ως προς ένα κοινό σύστηµα συντεταγµένων. Τα δύο αντικείµενα για τα οποία πρέπει να ανιχνευθεί η σύγκρουση µπορεί να έχουν τα εξής γεωµετρικά σχήµατα : ορθογώνιο παραλληλεπίπεδο, σφαίρα, κώνος και κύλινδρος. Ο ρόλος της συνάρτησης initialize() της κλάσης CollideScript είναι κατά την αρχικοποίηση του εικονικού κόσµου είναι να υπολογίσει τις συντεταγµένες των κορυφών των δύο πολυέδρων, τα οποία θα προσεγγίσουν τα δύο αντικείµενα, µε βάση το σχήµα και τις διαστάσεις τους, π.χ. για ένα παραλληλεπίπεδο µε διαστάσεις (10 15 40) θα δηµιουργηθεί ένα πολύεδρο του οποίο θα έχει οκτώ κορυφές και οι συντεταγµένες τους θα είναι : 47
Υλοποίηση 5 7,5 20-5 7,5 20 5-7,5 20-5 -7,5 20 5 7,5-20 -5 7,5-20 5-7,5-20 -5-7,5-20 Οι συντεταγµένες των κέντρων των δύο πολύεδρων πρέπει να υπολογιστούν ως προς το αρχικό καθολικό σύστηµα συντεταγµένων διότι κατά την δηµιουργία του εικονικού κόσµου ο συγγραφέας δηλώνει τις συντεταγµένες σε σχέση µε το σύστηµα που βρίσκεται ακριβώς στο προηγούµενο επίπεδο στην ιεραρχία των µετασχηµατισµών και όχι σε σχέση µε το αρχικό. Για αυτό υλοποιήθηκαν οι κατάλληλες συναρτήσεις οι οποίες εντοπίζουν το µονοπάτι των χωρικών σχέσεων από τον κόµβο ρίζα του χωρικού γράφου έως τον κόµβο αντικείµενο. Κατόπιν δηµιουργείται µία δοµή στην οποία αποθηκεύεται το µονοπάτι αυτό. Για παράδειγµα έστω ότι ο χωρικός γράφος της εφαρµογής είναι αυτός που φαίνεται παρακάτω και το ζητούµενο είναι να ανιχνευθεί η σύγκρουση των αντικειµένων Α6 και Α4. 48
Υλοποίηση SR1 A1 SR4 A2 A5 SR2 SR5 SR6 A3 A6 A7 SR3 A4 Τότε η συνάρτηση initialize() καλώντας διαδοχικά τις συναρτήσεις της κλάσης CollideScript εκτελεί δύο φορές αναζήτηση κατά βάθος στο παραπάνω δέντρο για να εντοπίσει τα αντικείµενα Α4 και Α6 αντίστοιχα. Το µονοπάτι των χωρικών σχέσεων που οδηγεί στον κάθε κόµβο αποθηκεύεται όπως αναφέρθηκε και χρησιµοποιείται για τον υπολογισµό της θέσης του κέντρου του συστήµατος συντεταγµένων του κάθε αντικειµένου. Ο υπολογισµός αυτός γίνεται δηµιουργώντας πίνακες γεωµετρικών µετασχηµατισµών (µετακίνηση, περιστροφή αλλαγή κλίµακας) για κάθε µία από τις ενδιάµεσες χωρικές σχέσεις και µε τον κατάλληλο πολλαπλασιασµό των πινάκων σχηµατίζεται ο συνολικός πινάκας µετασχηµατισµού. Παράλληλα στην περίπτωση που στις χωρικές σχέσεις υπάρχουν περιστροφές και αλλαγές κλίµακας σχηµατίζεται και ένας πίνακας ο οποίος περιγράφει την συνολική περιστροφή και αλλαγή κλίµακας του συστήµατος του αντικειµένου χωρίς να περιλαµβάνει τις µετατοπίσεις. Ο πίνακας αυτός απαιτείται για τον µετασχηµατισµό όχι του κέντρου αλλά των κορυφών των πολυέδρων. Οι δύο πίνακες αυτοί πολλαπλασιάζονται ο πρώτος µε το διάνυσµα των συντεταγµένων του κέντρου και δεύτερος µε τις συντεταγµένες όλων των κορυφών του πολυέδρου. Οι υπολογισµοί αυτοί που γίνονται κατά την αρχικοποίηση του εικονικού κόσµου έτσι ώστε να αρχικοποιηθεί η δοµή Couple που περιγράφθηκε και την οποία χρησιµοποιεί η κλάση Collide για την εκτέλεση του αλγόριθµου εντοπισµού των συγκρούσεων. Όµως κατά την διάρκεια της εφαρµογής οι χωρικές σχέσεις µεταξύ των αντικειµένων αλλάζουν αφού µε αυτό τον τρόπο επιτυγχάνεται κίνηση για τα αντικείµενα. Οπότε απαιτείται να γίνει επαναϋπολογισµός της θέσης των κέντρων των συστηµάτων των δύο αντικειµένων για τα οποία επιθυµείται ο εντοπισµός των συγκρούσεων µεταξύ τους, έτσι ώστε να εκτελεστεί ξανά ο αλγόριθµος που περιέχεται στην κλάση Collide µε δεδοµένα τα οποία ανταποκρίνονται στην συγκεκριµένη χρονική στιγµή. Για να γίνει αυτό οι χωρικές σχέσεις οι οποίες οδηγούν από το καθολικό σύστηµα συντεταγµένων στα δύο αντικείµενα. Οι 49
Υλοποίηση σχέσεις αυτές όπως περιγράφθηκε προηγουµένως είναι αποθηκευµένες σε µία δοµή της κλάσης CollideScript και µε χρήση του API της γλώσσας Java για την διασύνδεση µε τον εικονικό κόσµο σε VRML είναι δυνατόν να διαβάζονται οι νέες τιµές των σχέσεων αυτών από τον εικονικό κόσµο και να επαναλαµβάνονται οι υπολογισµοί οι οποίοι έγιναν και κατά την αρχικοποίηση του κόσµου. Εποµένως εάν µε την χρήση του ελεγκτηρίου play ζητηθεί η συνεχής ανίχνευση για συγκρούσεις των δύο αντικειµένων τότε µε την χρήση ενός TimeSensor (βλέπε κεφάλαιο 3 ή [VRML97] ) στο νέο τύπο κόµβου που ορίστηκε στο αρχείο CollideScript.wrl στέλνονται κατά τακτά χρονικά διαστήµατα γεγονότα στην κλάση CollideScript. Η κλάση αυτή υπολογίζει τον νέο συνολικό χωρικό µετασχηµατισµό του κάθε πολυέδρου και ένα αυτός έχει µεταβληθεί τότε ενηµερώνει την δοµή Couple. Στην συνέχεια καλείται η κλάση Collide για να ελεγχθεί εάν τα δύο πολύεδρα συγκρούονται. Η διασύνδεση των αρχείων που περιγράφθηκε παρουσιάζεται στο παρακάτω σχήµα. Αρχείο Περιγραφής Εικονικού κόσµου σε VRML.. Ορισµός ενός κόµβου τύπου CollideScript... CollideScript.wrl (Αρχείο VRML) CollideLaw.wrl (Αρχείο VRML) VRML JAVA API CollideScript.class (Java bytecode) Utilities.class (Java bytecode) Collide.class (Java bytecode) 50
Υλοποίηση 4.3.3 Υπολογισµός απόστασης αντικειµένων Για τον υπολογισµό της απόστασης µεταξύ των αντικειµένων ορίστηκε και εδώ δύο νέοι τύποι κόµβων VRML. Ο πρώτος τύπος ονοµάστηκε ProximityScript και η δήλωση του πρωτότυπου φαίνεται παρακάτω. PROTO ProximityScript [ field SFTime duration -1 field SFTime time_step 0.01 field SFFloat radius 20 field SFNode law NULL eventin SFTime test eventin SFTime play eventin SFTime pause eventin SFTime kill eventout SFTime finished eventout SFTime entertime eventout SFTime exittime eventout SFFloat distance ] Στο πεδίο radius δηλώνεται η απόσταση η οποία αποτελεί το όριο για την παραγωγή των γεγονότων. Τα πεδία duration, time_step, law και τα γεγονότα test, play, pause, kill, finished έχουν τις ίδιες λειτουργίες όπως και στο πρωτότυπο CollideScript. Τα υπόλοιπα γεγονότα τύπου eventout έχουν την εξής λειτουργικότητα : entertime: Το γεγονός αυτό παράγεται όταν τα δύο αντικείµενα πλησιάσουν σε απόσταση µικρότερη από αυτή που ορίζεται στο πεδίο radius. exittime: Αυτό το γεγονός παράγεται όταν η απόσταση µεταξύ των αντικειµένων γίνει µεγαλύτερη από το καθορισµένο όριο. distance: Το γεγονός αυτό παράγεται κάθε φόρα που εκτελείται ο αλγόριθµος για τον υπολογισµό της απόστασης και η τιµή του δηλώνει ακριβώς αυτό, την απόσταση των αντικειµένων. Για την διασύνδεση του κόµβου αυτού µε τις Java κλάσεις που εκτελούν την λειτουργία του αλγόριθµου ορίστηκε πάλι ένας νέος τύπος κόµβων, ο τύπος ProximityLaw. 51
Υλοποίηση PROTO ProximityLaw [ field SFNode nodea NULL field SFNode nodeb NULL field SFNode roota NULL field SFNode rootb NULL field SFString namea "" field SFString nameb "" ] eventin SFTime checkdistance eventout SFFloat distance Τα πεδία (fields) του κόµβου αυτού έχουν την ίδια λειτουργικότητα µε αυτή των πεδίων του κόµβου CollideLaw. Χρησιµοποιήθηκαν πάλι οι δύο Java κλάσεις που περιγράφθηκαν προηγουµένως µε ορισµένες προσθήκες. Στην κλάση Collide προστέθηκε µία συνάρτηση η οποία παρακάµπτει τους υπολογισµούς για την εύρεση του διαχωριστικού επιπέδου που περιγράφθηκε προηγουµένως και προχωράει κατευθείαν στην εύρεση των δύο κοντινότερών σηµείων των δύο πολυέδρων και στον υπολογισµό της απόστασής τους. Στην κλάση CollideScript προστέθηκε συνάρτηση για την διασύνδεση µε τον κόµβο τύπου ProximityLaw της VRML. Με αυτόν τον τρόπο µε την χρήση των ίδιων αλγόριθµων και κατ επέκταση µε την χρήση των ίδιων Java κλάσέων επιτυγχάνεται η υλοποίηση και των δύο γεγονότων, της σύγκρουσης µεταξύ των αντικειµένων αλλά και του υπολογισµού της απόστασης. Παρακάτω ακολουθούν δύο παραδείγµατα χρήσης των δύο τύπων γεγονότων. Έχουν ήδη δηλωθεί στο χωρικό γράφο ένα ορθογώνιο παραλληλεπίπεδο µε όνοµα Box1 και µία σφαίρα µε όνοµα Sphere1. Εδώ φαίνονται οι δηλώσεις δύο αισθητήρων για την παραγωγή γεγονότων όταν τα δύο αντικείµενα συγκρουστούν ή πλησιάσουν σε απόσταση µικρότερη του 5. ίνονται οι δηλώσεις σε γλώσσα STEDEL όπως και οι παραγόµενες από τον compiler δηλώσεις σε γλώσσα VRML. ήλωση σε STEDEL: DetectProximity Box1 Sphere2 radius 5 WithLaw [ roota USE World rootb USE World] is DISTANCE 52
Υλοποίηση Παραγόµενη δήλωση σε VRML: DEF DISTANCE ProximityScript { duration -1 radius 5 law ProximityLaw { nodea USE Box1 nodeb USE Sphere2 namea "Box1" nameb "Sphere2" roota USE World rootb USE World ήλωση σε STEDEL: DetectCollision Box1 Sphere2 WithLaw [ roota USE World rootb USE World] is COLLISION Παραγόµενη δήλωση σε VRML: DEF COLLISION CollideScript { duration -1 law CollideLaw { nodea USE Box1 nodeb USE Sphere2 namea "Box1" nameb "Sphere2" roota USE World rootb USE World 53
Υλοποίηση 4.3.4 Τροποποίηση της γραµµατικής Για να ενσωµατωθούν οι παραπάνω δυνατότητες στη γλώσσα STEDEL υλοποιήθηκε ο κανόνας παραγωγής <Event>, ο κανόνας αυτός είχε προβλεφθεί από την αρχική γραµµατική της γλώσσας αλλά δεν είχε υλοποιηθεί. <Event> ::= ( <DETECTCOLLISION> <DETECTPROXIMITY> ) [is <ID>] <DETECTCOLLISION> ::= DetectCollision <Node1ID> <Node2ID> [For <NUM> sec] WithLaw [<EventParameters>] <DETECTPROXIMITY> ::= DetectProximity <Node1ID> <Node2ID> [radius <NUM>] [For <NUM> sec] WithLaw [ <EventParameters> ] 4.4 Υλοποίηση σύνθετων γεγονότων Για την υλοποίηση των σύνθετων γεγονότων χρειάστηκε να δηµιουργηθούν νέοι τύποι κόµβων VRML, ένας για κάθε τελεστή σύνθεσης γεγονότων που παρουσιάστηκε στο κεφάλαιο 4. 4.4.1 Τελεστής AND Ο τελεστής αυτός όπως περιγράφθηκε συνδέει δύο γεγονότα και παράγει το σύνθετο γεγονός µόνο όταν έχουν συµβεί και τα δύο γεγονότα. Ο ορισµός του νέου τύπου κόµβου που έγινε µε χρήση της εντολής PROTO περιλαµβάνεται στο αρχείο AndScript.wrl και είναι ο εξής : PROTO AndScript [ eventin SFTime inputa eventin SFTime inputb eventout SFTime output ] Στα δύο γεγονότα inputa και inputb τύπου eventin δηλώνονται τα γεγονότα τα οποία πρέπει να συµβούν για να παραχθεί το γεγονός output. Ακολουθεί ένα παράδειγµα χρήσης 54
Υλοποίηση του τελεστή αυτού στην γλώσσα STEDEL καθώς και το παραγόµενο αποτέλεσµα σε γλώσσα VRML. ήλωση σε STEDEL: When Enter DISTANCE And Touch T1 play MOVE_BOX Παραγόµενη δήλωση σε VRML: DEF XX11 AndScript { ROUTE DISTANCE.enterTime TO XX11.inputA ROUTE T1.touchTime ROUTE XX11.output TO XX11.inputB TO MOVE_BOX.play 4.4.2 Τελεστής AND NOT Ο τελεστής αυτός συνδέει δύο γεγονότα και παράγει το σύνθετο γεγονός µόνο όταν συµβεί το πρώτο από αυτά και δεν έχει συµβεί το δεύτερο. Ο ορισµός περιλαµβάνεται στο αρχείο AndNotScript.wrl και είναι ο εξής : PROTO AndNotScript [ eventin SFTime inputa eventin SFTime inputb eventout SFTime output ] Στο γεγονός inputa δηλώνεται το γεγονός το οποίο όταν συµβεί εάν δεν έχει συµβεί το γεγονός που δηλώνεται στο πεδίο inputb τότε παράγεται το γεγονός output. Ακολουθεί ένα παράδειγµα χρήσης στη STEDEL. Το παραγόµενο αποτέλεσµα σε VRML είναι αντίστοιχο του προηγούµενου παραδείγµατος. ήλωση σε STEDEL: When Enter DISTANCE And Not Touch T1 play MOVE_BOX 4.4.3 Τελεστής EXCLUSIVE OR Ο τελεστής αυτός λειτουργεί παρόµοια µε τον προηγούµενο µόνο που δεν διαχωρίζει τα γεγονότα σε πρώτο και δεύτερο, δηλαδή παράγει το σύνθετο γεγονός µόνο όταν έχει συµβεί το ένα από τα δύο γεγονότα. Ο ορισµός περιλαµβάνεται στο αρχείο XorScript.wrl και είναι ο εξής : 55
Υλοποίηση PROTO XorScript [ eventin SFTime inputa eventin SFTime inputb eventout SFTime output ] Στα πεδία inputa και inputb δηλώνονται τα δύο γεγονότα. Ακολουθεί ένα παράδειγµα χρήσης στη STEDEL. Το παραγόµενο αποτέλεσµα σε VRML είναι αντίστοιχο του προηγούµενου παραδείγµατος. ήλωση σε STEDEL: When Enter DISTANCE Exclusive Or Touch T1 play MOVE_BOX 4.4.4 Τελεστής SEQUENCE Ο τελεστής SEQUENCE καθορίζει την χρονική σειρά των γεγονότων. Ο ορισµός του περιλαµβάνεται στο αρχείο SeqScript.wrl. PROTO SeqScript [ eventin SFTime first eventin SFTime second eventout SFTime output ] Στο γεγονός first δηλώνεται το γεγονός το οποίο πρέπει να συµβεί πρώτο και στο γεγονός second αυτό που πρέπει να συµβεί δεύτερο για να παραχθεί το γεγονός output. Ο τρόπος χρήσης του τελεστή είναι αντίστοιχος των προηγούµενων περιπτώσεων. 4.4.5 Τελεστής INTIME Ο τελεστής INTIME καθορίζει και αυτός την χρονική σειρά των γεγονότων µε έναν όµως επιπλέον περιορισµό. Ο ορισµός του περιλαµβάνεται στο αρχείο IntimeScript.wrl. PROTO IntimeScript [ eventin SFTime first eventin SFTime second field SFTime timegap -1 56
Υλοποίηση eventout SFTime output ] Στο γεγονός first δηλώνεται το γεγονός το οποίο πρέπει να συµβεί πρώτο και στο γεγονός second αυτό που πρέπει να συµβεί µέσα στο χρονικό διάστηµα που ορίζεται στο πεδίο timegap έτσι ώστε να παραχθεί το γεγονός output. Ακολουθεί ένα παράδειγµα χρήσης του τελεστή αυτού στην γλώσσα STEDEL καθώς και το παραγόµενο αποτέλεσµα σε γλώσσα VRML. Στο παράδειγµα δηλώνεται ότι πρέπει να συµβεί πρώτα το γεγονός Enter DISTANCE και µέσα χρονικό διάστηµα τεσσάρων δευτερολέπτων να συµβεί το γεγονός Touch T1 έτσι ώστε να παραχθεί το σύνθετο γεγονός και να ξεκινήσει η δράση MOVE_BOX. ήλωση σε STEDEL: When Enter DISTANCE Intime 4 sec Touch T1 play MOVE_BOX Παραγόµενη δήλωση σε VRML: DEF XX10 IntimeScript { timegap 4 ROUTE DISTANCE.enterTime TO XX10.first ROUTE T1.touchTime ROUTE XX10.output TO XX10.second TO MOVE_BOX.play 4.4.6 Τελεστής NOT INTIME Ο τελεστής NOT INTIME ανήκει και αυτός στην ίδια κατηγορία γεγονότων µε τους δύο προηγούµενους. Ο ορισµός του περιλαµβάνεται στο αρχείο NotIntimeScript.wrl. PROTO NotIntimeScript [ eventin SFTime first eventin SFTime second field SFTime timegap -1 eventout SFTime output ] Στο γεγονός first δηλώνεται το γεγονός το οποίο πρέπει να συµβεί πρώτο και στο γεγονός second αυτό δεν που πρέπει να συµβεί µέσα στο χρονικό διάστηµα που ορίζεται στο πεδίο timegap έτσι ώστε να παραχθεί το γεγονός output. 57
Υλοποίηση 4.4.7 Τελεστής N TIMES Ο τελεστής n TIMES εφαρµόζεται σε ένα µόνο γεγονός. Ο ορισµός του περιλαµβάνεται στο αρχείο TimesScript.wrl. PROTO TimesScript [ eventin SFTime input field SFInt32 times 0 eventout SFTime output ] Στο γεγονός input δηλώνεται ένα γεγονός και στο πεδίο times ο αριθµός που πρέπει να συµβεί αυτό το γεγονός έτσι ώστε να παραχθεί το γεγονός output. Στο παράδειγµα που ακολουθεί πρέπει το γεγονός Touch T1 να συµβεί 3 φορές για να παραχθεί το σύνθετο γεγονός. ήλωση σε STEDEL: When Touch T1 3 Times play MOVE_BOX Παραγόµενη δήλωση σε VRML: DEF XX9 TimesScript { times 3 ROUTE T2.touchTime TO XX9.input ROUTE XX9.output TO MOVE_BOX.play 4.4.8 Τελεστής FIRST N TIMES Ο τελεστής FIRST n TIMES εφαρµόζεται σε ένα µόνο γεγονός και παράγει σύνθετο γεγονός µόνο τις πρώτες ν φορές που θα συµβεί το απλό γεγονός. Ο ορισµός του περιλαµβάνεται στο αρχείο FirstTimesScript.wrl. PROTO FirstTimesScript [ eventin SFTime input field SFInt32 times 0 eventout SFTime output ] 58
Υλοποίηση Στο γεγονός input δηλώνεται ένα γεγονός και στο πεδίο times ο µέγιστος αριθµός των φορών που αν συµβεί το γεγονός αυτό θα παράγεται κάθε φόρα το γεγονός output. Τις επόµενες φορές που θα συµβεί το γεγονός input δεν θα παραχθεί σύνθετο γεγονός. Στο παράδειγµα που ακολουθεί τις πρώτες 3 φορές που θα συµβεί το γεγονός Touch T1 θα ξεκινάει η δράση MOVE_BOX. ήλωση σε STEDEL: When Touch T1 First 3 Times play MOVE_BOX Παραγόµενη δήλωση σε VRML: DEF XX9 FirstTimesScript { times 3 ROUTE T2.touchTime TO XX9.input ROUTE XX9.output TO MOVE_BOX.play 4.4.9 Σύνθεση τελεστών Όπως αναφέρθηκε και στο κεφάλαιο τέσσερα, είναι δυνατόν να δηµιουργηθούν ακόµα πιο σύνθετα γεγονότα από αυτά τα οποία µπορούν να οριστούν µε την εφαρµογή των τελεστών που περιγράφηκαν προηγουµένως. Αυτό µπορεί να επιτευχθεί µε συνδυασµό ήδη σύνθετων γεγονότων. Ο συνδυασµός αυτός θα γίνει µε την χρήση πάλι των ίδιων τελεστών. ηλαδή να υπάρχει η δυνατότητα παράθεσης τελεστών. Για παράδειγµα When Enter DISTANCE And Touch T1 3 Times play MOVE_BOX Όπως αναφέρθηκε και στο προηγούµενο κεφαλαίο η προτεραιότητα των τελεστών είναι από δεξιά προς τα αριστερά. Αυτό µπορεί να τροποποιηθεί µε την χρήση παρενθέσεων, π.χ. When ( Enter DISTANCE And Touch T1 ) 3 Times play MOVE_BOX Για να προστεθεί στην γλώσσα STEDEL αυτή η δυνατότητα ξανασχεδιάστηκε η παραγωγή <Rule> της γραµµατικής της. Παρακάτω δίνεται το νέο συντακτικό της παραγωγής <Rule>. <Rule> ::= When <TriggeringEvent> <ActionGenerated> [ <Rule> ] <TriggeringEvent> ::= (<TriggeringEvent>) [<ComplementaryEvent>] <SimpleEvent> [ <ComplementaryEvent> ] <ComplementaryEvent> ::= And <TriggeringEvent> And Not <TriggeringEvent> Exclusive Or <TriggeringEvent> <NUM> Times 59
Υλοποίηση Seq <TriggeringEvent> Intime <NUM> sec <TriggeringEvent> Not Intime <NUM> sec <SimpleEvent> ::= Touch <ID> Finished <ID> Startup Enter <ID> Exit <ID> Collide <ID> Visible <ID> Not Visible <ID> DetectedCollision <ID> <ActionGenerated> ::= <CONTROL> <ActionID> <Control> ::= play pause kill rewind <ActionID> ::= <ID> 60
5 Έλεγχος και παράδειγµα λειτουργίας Στο κεφάλαιο αυτό θα αναπτυχθεί µία µέθοδος η οποία εφαρµόστηκε για να ελεγχθεί η σωστή λειτουργία των νέων δυνατοτήτων της γλώσσας STEDEL καθώς και ένα παράδειγµα σεναρίου περιγραφής ενός εικονικού κόσµου σε γλώσσα STEDEL που επιδεικνύει τις νέες δυνατότητες της γλώσσας. 5.1 Έλεγχος σωστής λειτουργίας Για να ελεγχθεί εάν ο αλγόριθµος που υπολογίζει την θέση του συστήµατος συντεταγµένων του αντικειµένου σε σχέση µε το καθολικό σύστηµα, τροποποιήθηκε ο νέος τύπος κόµβου CollideLaw. Στα πεδία του κόµβου προστέθηκε δύο πεδία τύπου SFNode. Στα πεδία αυτά κατά την δήλωση ενός κόµβου αισθητήρα CollideScript δηλώνεται ένας κόµβος Shape { geometry IndexedFaceSet {... Στα πεδία του κόµβου IndexedFaceSet δηλώνονται οι συνταγµένες σηµείων καθώς και ποια από αυτά θα σχηµατίσουν την κάθε πλευρά ενός κυρτού πολυέδρου. Αυτοί οι κόµβοι µέσω του κόµβου CollideLaw περνάν στην κλάση CollideScript. Για να γίνει ο
Έλεγχος και παράδειγµα λειτουργίας έλεγχος σωστής λειτουργίας της κλάσης έγιναν οι κατάλληλες τροποποιήσεις έτσι ώστε µέσω των δύο κόµβων IndexedFaceSet να δηµιουργούνται τα αντίγραφα των αντικειµένων για τα οποία ανιχνεύεται η σύγκρουση. Όπως περιγράφθηκε προηγουµένως για να λειτουργήσει ο αλγόριθµος της ανίχνευσης, η κλάση CollideScript δηµιουργεί πίνακες µε τις συντεταγµένες των κορυφών των αντικειµένων και υπολογίζει και την χωρική σχέση τους µε το καθολικό σύστηµα συντεταγµένων. Τα στοιχεία αυτά επιστρέφουν στα πεδία των κόµβων IndexedFaceSet οπότε έτσι δηµιουργούνται στον εικονικό κόσµο δύο αντικείµενα τα οποία αντιστοιχούν στα πολύεδρα για τα οποία γίνεται η ανίχνευση σύγκρουσης. Εάν τώρα τα δύο αυτά πολύεδρα ταυτίζονται στον εικονικό κόσµο µε τα αντικείµενα για τα οποία ζητήθηκε η ανίχνευση των συγκρούσεων τους τότε είναι φανερό ότι ο αλγόριθµος για την ανίχνευση (κλάση Collide) τροφοδοτείται µε τα σωστά στοιχεία. Ύστερα από πολλές δοκιµές µε αντικείµενα όλων των δυνατών σχηµάτων και µε ποικιλία κινήσεων για τα αντικείµενα αυτά διαπιστώθηκε ότι τα αντίγραφα των αντικειµένων που δηµιουργήθηκαν ταυτίστηκαν µε τα ίδια τα αντικείµενα. Το παρακάτω σχήµα περιγράφει τον παραπάνω τρόπο ελέγχου του αλγόριθµου Εικονικός κόσµος Παραγωγή αντίγραφου αντικειµένου Κόµβος IndexedFaceSet Αντικείµενο CollideLaw.wrl (Αρχείο VRML) Συντεταγµένες κορυφών VRML JAVA API CollideScript.class (Java bytecode) Παραγωγή συντεταγµένων κορυφών σε σχέση µε το καθολικό σύστηµα συντεταγµένων 62
Έλεγχος και παράδειγµα λειτουργίας 5.2 Παράδειγµα λειτουργίας Στην ενότητα αυτή θα περιγραφεί ένα παράδειγµα λειτουργίας, ένα σενάριο περιγραφής ενός εικονικού κόσµου σε γλώσσα STEDEL. Το παράδειγµα αυτό δηµιουργήθηκε µε στόχο την επίδειξη των νέων δυνατοτήτων της γλώσσας αλλά και συνολικά την λειτουργικότητα που εµφανίζει το µοντέλο αυτό. 5.2.1 Περιγραφή σεναρίου Το σενάριο αποτελείται από δύο διαδοχικά αυτοτελή µέρη. Και στα δύο αυτά µέρη το σενάριο βασίζεται στη συµµετοχή του χρήστη για να εξελιχθεί, επιδεικνύονται έτσι οι δυνατότητες αλληλεπίδρασης που παρέχει πια η γλώσσα STEDEL. Το πρώτο µέρος είναι µία ηλεκτρονική κλειδαριά και ο χρήστης καλείται να βρει ένα συνδυασµό. Η κλειδαριά αυτή αποτελείται από τέσσερα πλήκτρα. Ο χρήστης µπορεί κάνοντας χρήση του ποντικιού να πιέσει αυτά τα πλήκτρα και ο στόχος του είναι να εντοπίσει τον κατάλληλο συνδυασµό ώστε να ξεκλειδώσει την κλειδαριά. Τα πλήκτρα διαχωρίζονται µε βάση το χρώµα τους, µπλε, πράσινο, κόκκινο και κίτρινο. Ο σωστός συνδυασµός είναι πρώτα τρία πατήµατα του µπλε πλήκτρου, ύστερα πρέπει να περάσει χρονικό διάστηµα πέντε δευτερολέπτων και µετά να πατηθεί το πράσινο πλήκτρο. Στη συνέχεια πρέπει να πατηθεί το κόκκινο πλήκτρο και µέσα χρονικό διάστηµα δύο δευτερολέπτων πρέπει να πατηθεί το πράσινο πλήκτρο. Η εύρεση αυτού του συνδυασµού θα οδηγήσει τον χρήστη στο δεύτερο µέρος του σεναρίου. Στο δεύτερο µέρος υπάρχει ένα δάσος, µέσα σε αυτό βρίσκεται ένας κυνηγός ο οποίος κυνηγά µε παραδοσιακές µεθόδους, δηλαδή µε ένα ακόντιο. Γύρω του υπάρχουν δύο ζώα τα οποία κινούνται και πρέπει αυτός να πετύχει καθώς και ένα πουλάκι το οποίο όµως δεν αποτελεί στόχο για τον κυνηγό. Ο κυνηγός µπορεί να κινηθεί προς τα µπροστά καθώς και να περιστραφεί. Σκοπός του χρήστη είναι να κατευθύνει τον κυνηγό στο κατάλληλο σηµείο και ύστερα να εκτοξεύσει το ακόντιο στην κατάλληλη χρονική στιγµή έτσι ώστε να πετύχει τα δύο ζώα. Το πουλάκι κινείται στο έδαφος και µόνο εάν ο κυνηγός το πλησιάσει το πουλί πετάει και αποµακρύνεται από τον άνθρωπο. 5.2.2 Η Λύση σε STEDEL Η επίλυση του προβλήµατος, δηλαδή η περιγραφή του παραπάνω σεναρίου σε γλώσσα STEDEL συνίσταται στα εξής στάδια: Αναγνώριση των αντικειµένων της εφαρµογής Σχεδιασµός και Κατασκευή των αντικειµένων σε STEDEL 63
Έλεγχος και παράδειγµα λειτουργίας Αναγνώριση των χωρικών σχέσεων των αντικειµένων Σχεδιασµός της ράσης Αναγνώριση των Γεγονότων και της Αλληλεπίδρασης που απαιτείται µε το χρήστη Υλοποίηση σε STEDEL της ράσης και της Αντίδρασης του Σεναρίου στα Γεγονότα 5.2.2.1 Αντικείµενα της Εφαρµογής Τα αντικείµενα της εφαρµογής για το πρώτο µέρος είναι απλά : Η βάση των πλήκτρων της ηλεκτρονικής κλειδαριάς. Τα πλήκτρα Tο δεύτερο µέρος απαιτεί για την περιγραφή του αρκετά πιο πολύπλοκα αντικείµενα τα οποία είναι τα ακόλουθα : Ο άνθρωπος κυνηγός Τα δύο ζώα Το πουλί Το δάσος που αποτελείται από αρκετά δέντρα δύο διαφορετικών ειδών και το έδαφος 5.2.2.2 Σχεδιασµός και Κατασκευή των Αντικειµένων σε STEDEL Ο σχεδιασµός και κατασκευή των αντικειµένων παρόλο που είναι αρκετά ενδιαφέροντα δεν είναι στα ζητούµενα αυτής της εργασίας. Ο αναγνώστης που ενδιαφέρεται όµως µπορεί να ανατρέξει ΠΑΡΑΡΤΗΜΑ όπου παρατίθεται όλος ο κώδικας του παραδείγµατος. Στο σηµείο απλώς θα παρουσιαστούν τα αντικείµενα όπως αυτά φαίνονται κατά την διάρκεια της εκτέλεσης του παραδείγµατος. Στην πρώτη εικόνα φαίνεται η κλειδαριά µε τα τέσσερα πλήκτρα διαφορετικού χρώµατος. 64
Έλεγχος και παράδειγµα λειτουργίας Στη δεύτερη εικόνα φαίνεται ένα τµήµα του δεύτερου µέρους του παραδείγµατος όπου διακρίνεται ο άνθρωπος κυνηγός, τα δύο ζώα θηράµατα, το πουλάκι και ένα τµήµα του δάσους. 65
Έλεγχος και παράδειγµα λειτουργίας 5.2.2.3 Αναγνώριση των Χωρικών Σχέσεων ανάµεσα στα Αντικείµενα Για το πρώτο µέρος η χωρική σχέση που συνδέει τα αντικείµενα είναι απλή. Όλα τα πλήκτρα βρίσκονται πάνω στην βάση της κλειδαριάς. Για το δεύτερο πάλι υπάρχει µία βάση, αυτή είναι το έδαφος του δάσους. Επάνω σε αυτό βρίσκονται τα δέντρα, ο άνθρωπος, τα ζώα καθώς και το πουλάκι. 5.2.2.4 Σχεδιασµός της δράσης Στο πρώτο µέρος οι δράσεις που πρέπει να υλοποιηθούν είναι οι κινήσεις των πλήκτρων της κλειδαριάς. Οι κινήσεις αυτές είναι σύντοµες µετατοπίσεις κατά τον άξονα z. Στο δεύτερο µέρος οι δράσεις που απαιτούνται για την υλοποίηση του σεναρίου είναι περισσότερες. Η κίνηση των δύο ζώων, η οποία αποτελείται από δυο µετατοπίσεις κατά τον άξονα x, οι οποίες είναι αντίθετης φοράς και ίση χρονικής διάρκείας και ταχύτητας, δηλαδή το κάθε ζώο µετακινείται µεταξύ δύο ακραίων θέσεων. Όταν φτάνει στις δύο ακραίες θέσεις δεν ξεκινάει αµέσως την αντίστροφη κίνηση αλλά πραγµατοποιεί πρώτα µία περιστροφή 180 ο γύρω από τον άξονα y έτσι ώστε κατά την αντίστροφη κίνηση να µετακινείται πάλι προς το µέρος που δείχνει το κεφάλι του. Και τα δύο ζώα πραγµατοποιούν τις ίδιες ακριβώς κινήσεις, µόνο που το ένα µετακινείται κάθε φόρα για µεγαλύτερο χρονικό διάστηµα µε αποτέλεσµα οι ακραίες θέσεις µεταξύ των οποίων κινείται να απέχουν περισσότερο καθώς επίσης οι κινήσεις του εµφανίζονται να πραγµατοποιούνται σε άξονα κάθετο σε σχέση µε του άλλου ζώου γιατί το σύστηµα συντεταγµένων του ζώου αυτού έχει περιστραφεί κατά 90 ο έτσι ώστε τα δύο ζώα να κινούνται σε διαφορετικές κατευθύνσεις. Η κίνηση του πουλιού, το οποίο πραγµατοποιεί µία κίνηση παρόµοια µε την κίνηση των δύο ζώων, δηλαδή µετακινείται µεταξύ δύο ακραίων θέσεων, στις οποίες όταν φτάνει εκτελεί µία περιστροφή 180 ο µοιρών. Εκτός από αυτές το πουλάκι εκτελεί µία συνδυασµένη κίνηση που αποτελείται από δύο µετατοπίσεις. Η πρώτη είναι µία απλή ευθεία µετατόπιση µε σταθερή ταχύτητα κατά τον άξονα z και η δεύτερη είναι µία αρµονική µετατόπιση κατά τον άξονα y. Ο συνδυασµός των δύο κινήσεων δηµιουργεί µία κίνηση µε καµπύλη τροχιά η οποία βρίσκεται στο επίπεδο που ορίζουν οι άξονες z και y. Η κίνηση αυτή προσοµοιώνει το πέταγµα του πουλιού. Η κίνηση του άνθρωπου. Η κίνηση αυτή αποτελείται από ένα πλήθος άλλων κινήσεων. Η κυριότερη είναι η µετατόπιση του σώµατος στον άξονα z. Συγχρόνως εκτελούνται περιστροφές των σφαιρών που αποτελούν τους συνδέσµους των µελών του σώµατος του ανθρώπου. Με τις περιστροφές αυτές υλοποιούνται οι κινήσεις των ποδιών και των χεριών του ανθρώπου που γίνονται κατά το περπάτηµά του. Επειδή τα µέλη ανήκουν στο σύστηµα 66
Έλεγχος και παράδειγµα λειτουργίας συντεταγµένων του σώµατος του ανθρώπου και εποµένως είναι απόγονοί του στο χωρικό γράφο, µε την µετακίνηση του σώµατος µετακινούνται και αυτά. Επίσης όταν γίνεται η ρίψη του ακοντίου από τον άνθρωπο γίνεται µια περιστροφή του ώµου ώστε να σηκωθεί το χέρι και ύστερα γίνεται µία ευθεία µετατόπιση του ακοντίου. 5.2.2.5 Καταγραφή των γεγονότων Στο πρώτο µέρος τα γεγονότα που παράγονται είναι από τα πατήµατα των πλήκτρων της κλειδαριάς. Εδώ τα γεγονότα είναι απλά χρειάζεται όµως ένας πολύπλοκος κανόνας για να αναγνωρίσει τον σωστό συνδυασµό των γεγονότων αυτών. Μόλις επιτευχθεί ο συνδυασµός αυτός παράγεται ένα σύνθετο γεγονός το οποίο οδηγεί µε την βοήθεια κάποιο κανόνα στο δεύτερο µέρος της εφαρµογής. Στο δεύτερο µέρος τα γεγονότα που ανιχνεύονται είναι περισσότερα. Πρώτον ανιχνεύονται κλικ του ποντικιού στα δύο κουτιά που βρίσκονται εκατέρωθεν του ανθρώπου και προκαλούν το ένα την προς τα εµπρός κίνηση του ανθρώπου και το άλλο την περιστροφή του. Επίσης ανιχνεύονται τα κλικ του ποντικιού στο χέρι του ανθρώπου που κρατάει το ακόντιο καθώς και πάνω στο ακόντιο. Τα γεγονότα αυτά προκαλούν την ανύψωση του χεριού του ανθρώπου και την ρήψη του ακοντίου. εύτερον ανιχνεύεται η απόσταση του χρήστη από τον άνθρωπο καθώς και από το πουλάκι. Το πρώτο από αυτά τα γεγονότα οδηγεί την εφαρµογή σε µία κάµερα η οποία βρίσκεται πίσω από τον άνθρωπο, ξεκινάει ένα ηχητικό µήνυµα και επίσης εµφανίζονται τα δύο κουτιά που χρησιµεύουν για να εκκινούν τις κινήσεις του ανθρώπου. Το γεγονός αυτό παράγεται για µία µόνο φορά, δηλαδή µόνο την πρώτη φορά που ο χρήστης θα πλησιάσει τον άνθρωπο - κυνηγό. Το δεύτερο γεγονός απλώς ξεκινάει ένα ηχητικό σήµα µόλις ο χρήστης πλησιάσει το πουλάκι. Τρίτον, υπολογίζεται η απόσταση του ανθρώπου από το πουλάκι και όταν αυτή γίνει µικρότερη από κάποιο όριο τότε αυτό πραγµατοποιεί την κίνηση που περιγράφθηκε προηγουµένως και προσοµοιώνει το πέταγµα του πουλιού. Τέταρτον ανιχνεύονται οι συγκρούσεις του κονταριού µε τα δύο ζώα. Έτσι µπορεί η εφαρµογή να καταλάβει εάν το ακόντιο πέτυχε τα δύο ζώα. Τα παραπάνω γεγονότα που παράγονται προκαλούν την εκκίνηση κάποιων νέων δράσεων είτε από µόνα τους, είτε δηµιουργώντας σύνθετα γεγονότα σε συνδυασµό µε άλλα γεγονότα και µε τον τρόπο που αναπτύχθηκε στο προηγούµενο κεφάλαιο. 67
Έλεγχος και παράδειγµα λειτουργίας 5.2.2.6 Υλοποίηση σε STEDEL Στην παράγραφο αυτή θα δοθεί η υλοποίηση σε STEDEL των γεγονότων καθώς και των κανόνων συµπεριφοράς που χρησιµοποιούν τα γεγονότα. Όπως ήδη αναφέρθηκε ο πλήρες κώδικας παρατίθεται στο ΠΑΡΑΡΤΗΜΑ. Παρακάτω φαίνονται οι δηλώσεις δύο αισθητήρων παραγωγής γεγονότων. Ο πρώτος παράγει γεγονότα όταν γίνονται κλικ του ποντικιού επάνω στο ορθογώνιο που περιγράφεται ενώ ο δεύτερος όταν το avatar εισέλθει ή εξέλθει από το αντίστοιχο ορθογώνιο. SpatialGraph < Touch Bton1 > Button1 Box { size 20 20 5 SpatialGraph < Proximity Prox1 { size 80 80 80 Sound SOUND > Bird Στη συνέχεια ακολουθούν οι δηλώσεις τριών γεγονότων, το πρώτο παράγει γεγονότα όταν τα δύο αντικείµενα πλησιάσουν µεταξύ τους ή όταν αποµακρυνθούν. Τα δύο επόµενα παράγουν γεγονότα όταν τα αντικείµενα συγκρουστούν. #EVENTS DetectProximity Body Bird radius 80 WithLaw [ roota USE World rootb USE World] is PROX DetectCollision Stick Animal WithLaw [ roota USE World rootb USE World] is COLL DetectCollision Stick Animal2 WithLaw [ roota USE World rootb USE World] is COLL2 Και τέλος δίνεται ένα παράδειγµα συγγραφής κανόνων συµπεριφοράς #RULES # Rules for STARTUP When Startup play PREACTION... # Rules for moving the Human When Touch T2 play ACR... # Rules for moving the knees When Finished MOVE_RLEG play ACRK When Finished MOVE_LLEG1 play ACLK1 When Finished MOVE_LLEG play ACLK # Rules for moving the Bird 68
Έλεγχος και παράδειγµα λειτουργίας When Startup play BirdEat... When (Finished BirdTurn1 Seq Finished BirdTurn) Intime 3 sec Enter PROX play Fly When (Enter PROX Intime 4 sec Finished BirdTurn) play Fly # Rules for moving the first Animal When Startup play Eat... # Rules for moving the second Animal When Startup play Eat2... # Rules for shooting When Touch T3 play Fire When Finished Shoot rewind Raise When Finished Shoot rewind Shoot # Rules for finding the first target When DetectedCollision COLL pause Eat When DetectedCollision COLL pause EatBack When DetectedCollision COLL play Fall When DetectedCollision COLL pause COLL # Rules for finding the second target... When Enter Prox1 play SOUNDTRACK When Enter Prox2 play HUNT When DetectedCollision COLL And DetectedCollision COLL2 play SOUNDTRACK2 # Rules for pushing the buttons of the Lock When Touch Bton1 play Push1 When Finished Push1 rewind Push1... # The combination of the Lock When ((Touch Bton1 3 Times) Not Intime 5 sec Touch Bton2 ) Seq (Touch Bton3 Intime 2 sec Touch Bton4 ) play ACTION Ακολουθούν ορισµένα στιγµιότυπα από την εκτέλεση του παραδείγµατος. 69
Έλεγχος και παράδειγµα λειτουργίας Στις δύο επόµενες εικόνες φαίνεται ο άνθρωπος που περπατάει ενώ στην δεύτερη φαίνεται επίσης το πουλάκι το οποίο πετάει για να αποµακρυνθεί όταν ο άνθρωπος το πλησιάζει. Στην επόµενη εικόνα φαίνεται η ρίψη του ακοντίου µε στόχο το ζώο. 70
Έλεγχος και παράδειγµα λειτουργίας Στην τελευταία εικόνα φαίνεται η επιτυχής ρίψη του ακοντίου προς το δεύτερο ζώο καθώς και αριστερά στη εικόνα φαίνεται το πρώτο ζώο το οποίο έχει ήδη χτυπηθεί. 71