Γραφικά µε Υπολογιστές Μετασχηµατισµοί Σύνθετη Γεωµετρία
Σύστηµα Συντεταγµένων Κάθε VRML κόσµος έχει το δικό του σύστηµα συντεταγµένων, το οποίο είναι ένα τρισδιάστατο καρτεσιανό σύστηµα, µε τηθετική πλευρά του άξονα x να δείχνει προς τα δεξιά, τη θετική πλευρά του άξονα y να δείχνει προς τα πάνω και τη θετική πλευρά του άξονα z να δείχνει προς το χρήστη (προς τα "έξω"). 2/ 24
3D Μετασχηµατισµοί By default όλατασχήµατα στη VRML δηµιουργούνται στην αρχή του συστήµατος συντεταγµένων Οκόµβος Transform µας δίνει τη δυνατότητα να εφαρµόσουµε 3 µετασχηµατισµούς στα αντικείµενα της VRML. O κόµβος Transform δηµιουργεί ένα καινούργιο σύστηµα συντεταγµένων σε σχέση µε τοparent σύστηµα συντεταγµένων. Τα αντικείµενα που ανήκουν σε αυτόν τον κόµβο (δηλ. είναι children του κόµβου Transform) δηµιουργούνται σε σχέση µε το κέντρο του καινούργιου συστήµατος συντεταγµένων. 3/ 24
4/ 24 Οκόµβος Transform Transform { children [] #exposedfield translation #exposedfield rotation #exposedfield scale #exposedfield scaleorientation #exposedfield bboxcenter #field bboxsize #field center #exposedfield addchildren #eventin removechildren #eventin } To πεδίο children µπορεί να περιέχει είτε shapes είτε groups συµπεριλαµβανοµένου και άλλων κόµβων Transform
Translation-Μετατόπιση Transform { # X Y Z translation 5.0 0.0 0.0 children [... ] } Α) Παγκόσµιο Σύστηµα Συντεταγµένων Β) Μετατοπισµένο κατά 5 µονάδες στον άξονα Χ 5/ 24
Rotation - Περιστροφή Transform { # X Y Z Angle rotation 0.0 0.0 1.0 0.52 children [... ] } όπου radians = (degrees / 180.0) * 3.14 Α) Παγκόσµιο Σύστηµα Συντεταγµένων Β) Το καινούργιο σύστηµα µετά την περιστροφή 6/ 24
Το Πεδίο Rotation Το πεδίο rotation παίρνει µια ειδική τιµή (ονοµάζεται τιµή περιστροφής ή SFRotation) που αποτελείται από τέσσερις αριθµούς κινητής υποδιαστολής. Οι τρεις πρώτοι χρησιµοποιούνται για τον καθορισµό του άξονα περιστροφής και ο τέταρτος για τον καθορισµό της γωνίας περιστροφής. Ως άξονας περιστροφής ορίζεται συνήθως ένας από τους άξονες x, y και z και αυτό γίνεται µε τον εξής τρόπο: Άξονας περιστροφής ιάνυσµα Περιστροφής x 1.0 0.0 0.0 y 0.0 1.0 0.0 z 0.0 0.0 1.0 7/ 24
Περιστροφή ως προς Άξονα Οι θετικές περιστροφές έχουν φορά αντίθετη απ' αυτή του δείκτη του ρολογιού. Ένας πρακτικός τρόπος για να βρίσκουµε την κατεύθυνση της κάθε περιστροφής είναι ο κανόνας του δεξιού χεριού. Αν τοποθετήσουµε τον αντίχειρα παράλληλα µε τηθετική φορά ενός άξονα, τότε τα υπόλοιπα δάχτυλά µας δείχνουν τη θετική περιστροφή ως προς τον άξονα αυτό. 8/ 24
Scaling - Αλλαγή κλίµακας Transform { # X Y Z scale 0.5 0.5 0.5 children [... ] } Α) Παγκόσµιο Σύστηµα Συντεταγµένων B) Το καινούργιο σύστηµα µετά την αλλαγή κλίµακας 9/ 24
Ταυτόχρονη Μετατόπιση, Περιστροφή & Αλλαγή Μεγέθους Ανεξάρτητα από τη σειρά αναγραφής των πεδίων translation, rotation και scale, το σύστηµα συντεταγµένων (και τα παιδιά του) πρώτα αλλάζει µέγεθος, µετά περιστρέφεται και στο τέλος µετατοπίζεται (αν το σκεφτούµε ανάποδα, το αποτέλεσµα δενείναιτοίδιο). Transform { translation 2.0 0.0 0.0 rotation 0.0 0.0 1.0 0.52 scale 0.5 0.5 0.5 children [... ] } 10 / 24
Άσκηση 1 ηµιουργήστε τον κλόουν του σχήµατος. Ο κλόουν αποτελείται από 9 σχήµατα: το σώµα έχειδιαστάσεις(1.7, 2.5, 0.7) ολαιµός έχει ύψος 0.3 και ακτίνα 0.4 το κεφάλι έχει ακτίνα 0.8 το καπέλο έχει ύψος 1.2 και ακτίνα βάσης 0.6 τα χέρια έχουν ύψος 1.8 και ακτίνα 0.2 και τα πόδια διαστάσεις (0.5 1.7 0.4) 11 / 24
ηµιουργία Οµάδων Μπορούµε ναοµαδοποιήσουµε κόµβους χρησιµοποιώντας τον κόµβο Group Group { children [ ] bboxcenter bboxsize addchildren removechildren } Ητιµή του πεδίου children είναι µία λίστα από child κόµβους οι οποίοι αποτελούν την οµάδα. 12 / 24
Οκόµβος Anchor H VRML µας δίνει τη δυνατότητα να συνδέουµε VRML κόσµους µε τη βοήθεια ενός ειδικού συνδέσµου όπως είναι ο κόµβος Anchor. Όταν ο χρήστης κάνει κλικ σε ένα αντικείµενο του κόµβου Anchor, τότε ο VRML browser ακολουθεί τη σύνδεση που έχει οριστεί µέσα στον κόµβο για να προβάλλει τον καινούργιο κόσµο. Anchor { } children [ ] bboxcenter bboxsize url [ ] parameter [ ] description addchildren removechildren 13 / 24
ΗεντολήInline Η εντολή Inline είναι µία τεχνική δηµιουργίας VRML κόσµων η οποία µας επιτρέπει να διατηρούµε σε διαφορετικά αρχεία διαφορετικά τµήµατα της σκηνής µας. Inline { url [ ] bboxcenter bboxsize } -1.0-1.0-1.0 #field 0.0 0.0 0.0 #exposedfield Ητιµή του πεδίου url καθορίζειτηθέσηπουβρίσκεται το VRML αρχείο. 14 / 24
Άσκηση 2 Χρησιµοποιώντας τα αρχεία table.wrl και chair.wrl δηµιουργήστε τη σκηνή της τελικής εικόνας. 15 / 24
Σύνθετη Γεωµετρία HVRML παρέχει ένα σύνολο από στοιχεία µε ταοποίαµπορούµε να κατασκευάσουµε σύνθετασχήµατα µε τηχρήσησηµείων, γραµµών και εδρών. Τα σηµεία (points) της VRML είναι απλές κουκκίδες που σχεδιάζονται στο τρισδιάστατο χώρο. Οι γραµµές (lines) της VRML είναι δυδιάστατα ευθύγραµµα τµήµατα, τα οποία συνδέουν τις κορυφές ενός σχήµατος. Οι έδρες (faces ή facets) της VRML είναι επίπεδα σχήµατα, µε πολλές ακµές, όπως τρίγωνα, τετράγωνα, πεντάγωνα κ.ό.κ. ιευθετώντας πολλές γειτονικές έδρες, µπορεί κανείς να κατασκευάσει σύνθετες δυδιάστατες και τρισδιάστατες πολυεδρικές επιφάνειες. 16 / 24
Οκόµβος Coordinate Οκόµβος αυτός χρησιµοποιείται σε συνδυασµό µε ταστοιχεία Pointset, IndexedLineSet και IndexedFaceSet για τη δηµιουργία σηµείων, γραµµών και εδρών αντίστοιχα και συγκεκριµένα, χρησιµοποιείται ως η τιµή του πεδίου coord (το πεδίο που καθορίζει τις κορυφές των σύνθετων σχηµάτων) των 3 αυτών στοιχείων γεωµετρίας. Coordinate { point [ # X Y Z 2.0 1.0 3.0, # 1ο σηµείο 4.0 2.5 5.3, # 2ο σηµείο... ] } 17 / 24
Οκόµβος Color Ένα στοιχείο Color περιλαµβάνει µία λίστα από RGB τιµές χρώµατος, όπως το στοιχείο Coordinate περιλαµβάνει µία λίστα από σηµεία στο χώρο. Η σύνταξή του είναι: Color { color [ 1.0 0.0 0.0, 0.5 0.3 0.3] } 18 / 24
Οκόµβος PointSet PointSet { color SFNode exposedfield coord SFNode exposedfield } 19 / 24
Οκόµβος IndexedLineSet IndexedLineSet { set_colorindex MFInt32 eventin set_coordindex MFInt32 eventin color SFNode exposedfield coord SFNode exposedfield colorindex [] MFInt32 field colorpervertex TRUE SFBool field coordindex [] MFInt32 field } 20 / 24
ηµιουργία Γραµµών Ο κόµβος IndexedLineSet αναπαριστά µια τρισδιάστατη γεωµετρία που σχηµατίζεται από γραµµές (lines ή polylines) που ενώνουν τα σηµεία που καθορίζονται στο πεδίο coord. Εκτός από το πεδίο αυτό, το στοιχείο IndexedLineSet έχει και το πεδίο coordindex. Τα στοιχεία της λίστας coordindex είναι δείκτες προς τα στοιχεία της λίστας του Coordinate. Όταν δεν αποδίδεται στο coordindex κάποια τιµή τότε τα σηµεία που προσδιορίζονται από το πεδίο coord ενώνονται διαδοχικά. coordindex [ 1, 0, 3, 8, -1, 5, 9, 0 ] # 1, 0, 3, 8, Σχεδίασε γραµµή απότοσηµείο 1 στο 0 στο 3 στο 8 # -1, Τερµάτισε την τρέχουσα γραµµή, δηµιούργησε νέα # 5, 9, 0 Σχεδίασε γραµµή απότοσηµείο 5 στο 9 στο 0 21 / 24
Χρωµατισµός Γραµµών Πεδία colorpervertex FALSE colorpervertex TRUE colorindex έχει τιµή colorindex δεν έχει τιµή Τα χρώµατα της λίστας του colorindex αποδίδονται σε κάθε γραµµή (polyline) του IndexedLineSet σειριακά. Θα πρέπει, λοιπόν, να υπάρχουν στη λίστα του colorindex τουλάχιστον τόσοι δείκτες σε χρώµατα της λίστας του Color, όσες είναι οι τεθλασµένες γραµµές. Τα χρώµατα της λίστας του Color αποδίδονται σε κάθε γραµµή (polyline) του IndexedLineSet σειριακά. Θα πρέπει, λοιπόν, να υπάρχουν στη λίστα του Color τουλάχιστον τόσα χρώµατα, όσες είναι οι τεθλασµένες γραµµές. Αποδίδονται χρώµατα σε κάθε κορυφή του IndexedLineSet ακριβώς µε τον ίδιο τρόπο που αποδίδονται οι συντεταγµένες της κάθε κορυφής από το πεδίο coordindex. Το πεδίο colorindex πρέπει να περιέχει τουλάχιστον τόσους δείκτες όσους περιέχει το coordindex, και µάλιστα να έχει τιµές -1 στις ίδιες θέσεις µε το coordindex, ώστε να υπάρχει πλήρης αντιστοιχεία. Χρησιµοποιείται το πεδίο coordindex για την επιλογή χρωµάτων από τη λίστα του Color, σανναήταντοπεδίοcolorindex.. 22 / 24
Οκόµβος IndexedFaceSet IndexedFaceSet { set_colorindex MFInt32 eventin set_coordindex MFInt32 eventin set_normalindex MFInt32 eventin set_texcoordindex MFInt32 eventin color NULL SFNode exposedfield coord NULL SFNode exposedfield normal NULL SFNode exposedfield texcoord NULL SFNode exposedfield ccw TRUE SFBool field colorindex [] MFInt32 field colorpervertex TRUE SFBool field convex TRUE SFBool field coordindex [] MFInt32 field creaseangle 0 SFFloat field normalindex [] MFInt32 field normalpervertex TRUE SFBool field solid TRUE SFBool field texcoordindex [] MFInt32 field } 23 / 24
Βασικά πεδία του IndexedFaceSet Το πεδίο solid (συµπαγής) είναι τύπου Boolean (SFBool) και προσδιορίζει αν το σχήµα είναι συµπαγές (τιµή TRUE) ή όχι (τιµή FALSE). Σε ένα συµπαγές σχήµα δεν είναι ορατές οι εσωτερικές του επιφάνειες και οι πίσω πλευρές των επιφανειών, οπότε και δε χρειάζεται να τις σχεδιάζουµε. Προεπιλεγµένα, τα σχήµατα είναι συµπαγή. Το πεδίο ccw είναι τύπου Boolean (SFBool) και προσδιορίζει τη φορά µε την οποία ενώνονται οι κορυφές για το σχηµατισµό τωνεδρών. Η µπροστινή πλευρά ενός σχήµατος είναι αυτή όπου το πεδίο ccw έχει τιµή TRUE (προεπιλεγµένη τιµή). Έτσι, αν θέσουµε την τιµή της ιδιότητας αυτής σε FALSE, τότε σχεδιάζουµε τις πίσω πλευρές των εδρών. Το πεδίο convex (κυρτός) είναι επίσης τύπου Boolean (SFBool) και προσδιορίζει αν οι έδρες που σχεδιάζονται είναι κυρτές (convex TRUE, προεπιλεγµένη τιµή) ή κοίλες. Οι κοίλες επιφάνειες (convex FALSE) σπάνε αυτόµατα σε πολλές µικρές κυρτές επιφάνειες ώστε να µπορέσουν να σχεδιαστούν. 24 / 24