Διδάσκων: Αθανάσιος Γ. Μαλάμος, αναπλ.. καθηγητής. Ίδρυμα / Τμήμα: Τ.Ε.Ι. Κρήτης /Τμήμα Εφαρμοσμένης Πληροφορικής και Πολυμέσων Τίτλος Μαθήματος :Κωδικός :Εξάμηνο : Ειδικά Θέματα Πολυμέσων Τύπος Μαθήματος : ΕΥΘεωρητικό/Ασκήσεις 2/1 Εργαστηριακό 2
Λίγα λόγια για το 3D Source Wikipedia
Modeling constructive solid geometry implicit surfaces NURBS modeling polygonal modeling subdivision surfaces Source Wikipedia
constructive solid geometry (-) Source Wikipedia
implicit surfaces Source Wikipedia
NURBS (non-uniform, rational B-spline) Source Wikipedia
polygonal modeling Source Wikipedia
subdivision surfaces Source Wikipedia
Texture mapping Bump mapping Clamping Normal mapping Displacement mapping Texture splatting Wrapping
Bump mapping Source Wikipedia
Normal mapping Source Wikipedia
Displacement mapping Source Wikipedia
Texture splatting Source Wikipedia
Clamping & Wrapping Source Wikipedia
X3D Architecture «X3D, defines a software system that integrates network-enabled 3D graphics and multimedia. Conceptually, each X3D application is a 3D time-based space that contains graphic and aural objects that can be dynamically modified through a variety of mechanisms.» Προδιαγραφές 1.Καθιερώνει ένα παγκόσμιο εικονικό χώρο αναφοράς για όλα τα αντικείμενα 2.Ρητά καθορίζει και συνθέτει ένα σύνολο τρισδιάστατων μοντέλων και αντικειμένων πολυμέσων 3.Υποστηρίζει συνδέσμους υπερ-κειμένου σε άλλα αρχεία και εφαρμογές 4.Καθορίζει τρόπους καθοδήγησης της συμπεριφορές αντικειμένου μέσω προγραμματισμού 5.Συνδέεται με εξωτερικές οντότητες και εφαρμογές μέσω των γλωσσών προγραμματισμού και scripting 6.Ρητά δηλώνει τις λειτουργικές απαιτήσεις του με τη διευκρίνιση ενός σχεδιαγράμματος Profilling 7.Είναι ανοικτό ώστε να επιτρέπει πρόσθετες λειτουργικές απαιτήσεις με τη εισαγωγή νέων συστατικών
X3D Architecture
X3D Architecture - Scene graph Η βασική μονάδα του X3D run-time περιβάλλοντος είναι το scene graph (γράφος σκηνής). Αυτή η δομή περιέχει όλα τα αντικείμενα στο σύστημα και σχέσεις τους. Οι σχέσεις περιλαμβάνονται κατά μήκος διάφορων αξόνων του scene graph. Η ιεραρχία μετασχηματισμού περιγράφει τη χωρική σχέση της απόδοσης των αντικειμένων. Το scene graph περιγράφει τις συνδέσεις μεταξύ των τομέων και της ροής των γεγονότων μέσω του συστήματος. Ο γράφος σκηνής έχει τα εξής χαρακτηριστικά: Root nodes Ένα X3D αρχείο περιέχει μηδέν ή περισσότερους Root nodes. Οι Root nodes για ένα X3D αρχείο είναι εκείνοι οι κόμβοι που καθορίζονται από τις δηλώσεις κόμβων που δεν περιλαμβάνονται σε άλλες κόμβο. Ιεραρχία του γράφου σκηνής Μια X3D γραφική παράσταση σκηνής είναι ένας κατευθυνόμενος ακυκλικός γράφος. Οι κόμβοι μπορούν να περιέχουν ειδικά πεδία fields με έναν ή περισσότερους κόμβους παιδιών που συμμετέχουν στην ιεραρχία. Αυτοί μπορούν, στη συνέχεια, να περιέχουν τους κόμβους (ή τις περιπτώσεις κόμβων). Αυτή η ιεραρχία των κόμβων καλείται γράφος. Κάθε τόξο στο γράφο από το Α στο Β σημαίνει ότι εκείνος ο κόμβος Α έχει έναν πεδίο το οποίο άμεσα περιέχει τον κόμβο Β. (Descendant and ancestor nodes)
X3D Architecture - Scene graph Transformation hierarchy Η ιεραρχία μετασχηματισμού περιλαμβάνει όλους τους κόμβους ρίζας και απογόνους κόμβων ρίζας που έχουν μια ή περισσότερες ιδιαίτερες θέσεις στον εικονικό κόσμο. X3D περιλαμβάνει την έννοια των τοπικών συστημάτων αναφοράς, καθορισμένοι σχετικά (σαν μετασχηματισμός) με τα ισότιμα συστήματα προγόνων. Το ισότιμο σύστημα στο οποίο αναφέρονται οι κόμβοι ρίζας καλείται παγκόσμιο ισότιμο σύστημα. Ο στόχος ενός X3D browsers είναι να παρουσιάζει ένα X3D αρχείο στο χρήστη. Το κάνει αυτό με την παρουσίαση της ιεραρχίας μετασχηματισμού στο χρήστη. Η ιεραρχία μετασχηματισμού περιγράφει τα άμεσα αντιληπτά μέρη του εικονικού κόσμου. Μερικοί κόμβοι, όπως οι αισθητήρες και οι περιβαλλοντικοί κόμβοι, είναι στο γράφο σκηνής αλλά δεν επηρεάζονται από την ιεραρχία μετασχηματισμού. Η ιεραρχία μετασχηματισμού είναι ένας κατευθυνόμενος ακυκλικός γράφος.
X3D Architecture - Scene graph Standard units and coordinate system ISO/IEC καθορίζει τη μονάδα του μέτρου του παγκόσμιου ισότιμου συστήματος για να είναι μέτρα. Όλα τα άλλα συστήματα συντεταγμένων χτίζονται με μετασχηματισμούς που βασίζονται στο παγκόσμιο σύστημα. Standard units CategoryUnit Linear distanceMetres AnglesRadians TimeSeconds Colour spaceRGB ([0.,1.], [0.,1.], [0., 1.])
X3D Object model Το X3D σύστημα αποτελείται από βασικές μεμονωμένες οντότητες που καλούνται αντικείμενα. Αντικείμενα που χειρίζονται τις ελαφριές έννοιες όπως η αποθήκευση στοιχείων και διαδικασίες στα στοιχεία καλούνται Fields και προέρχονται από το αντικείμενο X3DField. Αντικείμενα που αναπαριστούν πληρέστερες χωρικές ή χρονικές έννοιες καλούνται Nodes και προέρχεται από το αντικείμενο X3DNode. Οι κόμβοι περιέχουν ένα ή περισσότερα πεδία που κρατούν τις τιμές στοιχείων ή στέλνουν ή λαμβάνουν τα γεγονότα για εκείνο τον κόμβο. Μερικοί κόμβοι έχουν πρόσθετη λειτουργία από την κληρονομιά των διεπαφών που αντιπροσωπεύουν τις κοινή ιδιότητες ή τη λειτουργία, όπως η οριοθέτηση των bounding box για τα οπτικά αντικείμενα και η ομαδοποίηση των κόμβων ή μιας προδιαγραφής ότι ένα ιδιαίτερο αντικείμενο αντιπροσωπεύει τα μεταδεδομένα. Επιπλέον, το X3D καθορίζει τύπους αντικειμένων που δεν είναι Field ή Node και περιέχονται στο γράφο σκηνής, όπως Routes, οι δηλώσεις PROTO, τα μεταδεδομένα του κόσμου. Ένα Field μπορεί να περιέχει είτε μια τιμή δεδομένου τύπου είτε μια σειρά τέτοιων τιμών. Ένα Field που περιέχει μια τιμή λέγεται ότι είναι του δεδομένου τύπου.... και προτάσσεται από τους χαρακτήρες SF (π.χ., είναι του τύπου SFVec3f), ενώ ένα πεδίο που περιέχει μια σειρά τιμών προτάσσει τον τύπο του από το MF χαρακτήρων (π.χ., είναι τύπου MFVec3f). Ένα πεδίο μπορεί να περιέχει μια αναφορά σε έναν ή περισσότερους κόμβους με τη χρησιμοποίηση των τύπων των τομέων SFNode και MFNode.
X3D Object model Επιπλέον, το X3D παρέχει τη δυνατότητα δημιουργίας πρωτοτύπων. Τα πρωτότυπα είναι αντικείμενα που ο συντάκτης δημιουργεί με τη χρησιμοποίηση των δηλώσεων PROTO ή EXTERNPROTO. Αυτά τα αντικείμενα γράφονται στην ίδια δηλωτική σημείωση που χρησιμοποιείται για να περιγράψει τους κόμβους στο γράφο σκηνής. Προσθέτουν νέους τύπους αντικειμένου στο σύστημα που είναι μόνο διαθέσιμοι για τη διάρκεια ζωής της συνόδου στην οποία φορτώνονται.
Τύποι Field Τα Fields καθορίζουν την κατάσταση των κόμβων, και τις τιμές που οι κόμβοι μπορούν να στείλουν ή να λάβουν υπό μορφή γεγονότων. To X3D υποστηρίζει τέσσερις τύπους προσβάσεων στους τομείς ενός κόμβου: 1.initializeOnly πρόσβαση, η οποία επιτρέπει στο περιεχόμενο για να παρέχει μια αρχική τιμή για Field αλλά δεν επιτρέπει αλλαγές στην τιμή αυτή 2.inputOnly πρόσβαση, που σημαίνει ότι ο κόμβος μπορεί να λάβει ένα γεγονός για να αλλάξει την τιμή του Field, αλλά δεν επιτρέπει στην τιμή αυτή να διαβαστεί 3. outputOnly πρόσβαση, το οποίο σημαίνει ότι ο κόμβος μπορεί να στείλει ένα γεγονός γίνεται αλλαγή στην τιμή αλλά δεν επιτρέπει να τροποποιηθεί 4.input-output πρόσβαση, η οποία επιτρέπει την πλήρη πρόσβαση στο Field: το περιεχόμενο μπορεί να παρέχει μια αρχική τιμή, ο κόμβος μπορεί να λάβει ένα γεγονός για να αλλάξει την τιμή, και ο κόμβος μπορεί να στείλει ένα γεγονός όταν αλλάζει αυτή η τιμή.
Modifying objects Υπάρχουν διάφοροι τρόποι να τροποποιηθούν τα πεδία ενός αντικειμένου. Χρησιμοποιώντας ένα από τα X3D σχήματα αρχείων, ένας συντάκτης μπορεί να δηλώσει ένα σύνολο κόμβων, την αρχική κατάσταση των Fields, και τις διασυνδέσεις μεταξύ των Fields που καλούνται ROUTES. To X3D χρησιμοποιεί μια διάδοση γεγονότος, ή το πρότυπο ροής πληροφοριών για να αλλάξει τις τιμές των Fields στο χρόνο εκτέλεσης. Είναι δυνατό να δημιουργηθεί μια σκηνή σε χρόνο εκτέλεσης που χρησιμοποιεί μόνο το πρότυπο διάδοσης γεγονότος. Παραδείγματος χάριν:
DEF TS TimeSensor { loop TRUE cycleInterval 5 } DEF I PositionInterpolator { key [ ] keyValue [ , 0 1 0, ] } DEF T Transform { children [ Shape { geometry Box { } } ] } ROUTE ts.fraction_changed TO I.set_fraction ROUTE I.value_changed TO T.set_translation Αυτό το παράδειγμα αναπηδά ένα κιβώτιο πάνω-κάτω επανειλημμένα κατά τη διάρκεια ενός διαστήματος 5 δευτερολέπτων. Το αντικείμενο TimeSensor καθορίζεται για να στείλει ένα γεγονός συνεχώς. Αυτό το γεγονός στέλνει μια τιμή κινητής υποδιαστολής που ποικίλλει από 0 έως 1 κατά το διάστημα των 5 δευτερολέπτων, όπως διευκρινίζεται από το cycleInterval. Το Field LOOP του λέει να εκτελείτε επανειλημμένα. Αυτή η τιμή Floating Point στέλνεται στο Field ενός PositionInterpolator. Αυτό το αντικείμενο καθορίζεται για να στείλει ένα γεγονός όποτε λαμβάνει ένα γεγονός. Η τιμή καθορίζεται από το key και keyValue στα πεδία του. Σε αυτήν την περίπτωση στέλνει ένα διάνυσμα η του οποίου αξία Υ ποικίλλει μεταξύ -1 και +1 και πίσω πάλι μέσα σε το διάστημα. Αυτή η αξία στέλνεται στο Field translation του κόμβου transform. Αυτός ο κόμβος δίνει τη θέση των παιδιών του σύμφωνα με την τιμή της μετακίνησης.
DEF/USE Αν στη δήλωση ονόματος ενός κόμβου χρησιμοποιείται η λέξη κλειδί DEF τότε μπορεί να παραπεμφθεί (κλιθεί) από το όνομα του αργότερα στο ίδιο αρχείο με τις δηλώσεις USE ή ROUTE. Η δήλωση USE δεν δημιουργεί ένα αντίγραφο του κόμβου. Αντ' αυτού, ο ίδιος κόμβος παρεμβάλλεται στο γράφο σκηνής για δεύτερη φορά, με συνέπεια ο κόμβος να έχει πολλαπλούς γονείς. Η χρησιμοποίηση ενός στιγμιότυπου κόμβου πολλαπλές φορές καλείται instantiation.
Συμβατότητα και Συμμόρφωση Ένα X3D αρχείο είναι συντακτικά σωστό σύμφωνα με το ISO/IEC εάν ικανοποιούνται οι ακόλουθοι όροι : 1.Το X3D αρχείο περιέχει ως πρώτο στοιχείο του μια X3D επιγραφή που διευκρινίζει την έκδοση στην οποία αυτό το αρχείο προσαρμόζεται. 2.Όλες οι οντότητες που περιλαμβάνονται εκεί μέσα ταιριάζουν με τη λειτουργική προδιαγραφή των οντοτήτων αυτού του μέρους ISO/IEC που αντιστοιχούν στην έκδοση που διευκρινίζεται στη δήλωση επιγραφών. Το X3D αρχείο θα υπακούσει τις σχέσεις που καθορίζονται σε επίσημη γραμματική και όλες τις άλλες συντακτικές απαιτήσεις. 3.Κανένας κόμβος δεν εμφανίζεται στο X3D αρχείο εκτός από εκείνους που διευκρινίζονται για το εφαρμόσιμο γράφο όπως διευκρινίζεται σε αυτό το μέρος ISO/IEC εκτός αν διευκρινισμένος σε μια COMPONENT δήλωση, που απαιτείται για την τεχνική κωδικοποίησης, ή είναι εκείνοι που καθορίζονται από τις οντότητες PROTO ή EXTERNPROTO εάν τέτοιες είναι διαθέσιμες στο γράφο.
Συμβατότητα και Συμμόρφωση Συμμόρφωση για τους Browser Είναι σε θέση να διαβάσει οποιοδήποτε X3D αρχείο που προσαρμόζεται στους γράφους και τα συστατικά που υποστηρίζονται. Εφαρμόζει τη λειτουργία που διευκρινίζεται για όλες τις αφηρημένες διεπαφές, στο μέτρο που παρέχονται στους συγκεκριμένους κόμβους που προέρχονται από εκείνες τις διεπαφές, μέσα στο γεωγραφικό πλάτος που καθορίζεται για τον συγκεκριμένο γράφο, τα συστατικά, και την έκδοση. Παρουσιάζει τα γραφικά και ακουστικά χαρακτηριστικά των X3D κόμβων σε οποιοδήποτε X3D αρχείο που προσαρμόζεται στο γράφο, τα συστατικά, και την έκδοση. Χειρίζεται σωστά την αλληλεπίδραση χρηστών και την παραγωγή των γεγονότων όπως διευκρινίζεται για το συγκεκριμένο γράφο, τα συστατικά, και την έκδοση, μέσα στο γεωγραφικό πλάτος. Ικανοποιεί τις ελάχιστες απαιτήσεις υποστήριξης για Browser
Field types SFBool and MFBool The SFBool field specifies a single Boolean value. The MFBool field specifies multiple Boolean values. Each Boolean value represents either TRUE or FALSE. How these values are represented is encoding dependent. The default value of an uninitialized SFBool field is FALSE. The default value of an uninitialized MFBool field is the empty list. SFColor and MFColor The SFColor field specifies one RGB (red-green-blue) colour triple. MFColor specifies zero or more RGB triples. Each colour is written to the X3D file as an RGB triple of floating point numbers in the range 0.0 to 1.0. The default value of an uninitialized SFColor field is (0 0 0). The default value of an uninitialized MFColor field is the empty list.
Field types SFColorRGBA and MFColorRGBA The SFColorRGBA field specifies one RGBA (red-green-blue-alpha) colour quadruple that includes alpha (opacity) information. MFColorRGBA specifies zero or more RGBA quadruples. Each colour is written to the X3D file as an RGBA quadruple of floating point numbers in the range 0.0 to 1.0. Alpha values range from 0.0 (fully transparent) to 1.0 (fully opaque). The default value of an uninitialized SFColorRGBA field is ( ). The default value of an uninitialized MFColorRGBA field is the empty list. SFDouble and MFDouble The SFDouble field specifies one double-precision floating point number. MFDouble specifies zero or more double-precision floating point numbers. SFDouble and MFDouble are represented in the X3D file as specified in the respective encoding. Implementation of these fields is targeted at the double precision floating point capabilities of processors. However, it is allowable to implement this field using fixed point numbering provided at least 14 decimal digits of precision are maintained and that exponents have range of at least [-12, 12] for both positive and negative numbers. The default value of an uninitialized SFDouble field is 0.0. The default value of an MFDouble field is the empty list.
Field types SFFloat and MFFloat The SFFloat field specifies one single-precision floating point number. MFFloat specifies zero or more single-precision floating point numbers. SFFloats and MFFloats are represented in the X3D file as specified in the respective encoding. Implementation of these fields is targeted at the single precision floating point capabilities of processors. However, it is allowable to implement this field using fixed point numbering provided at least six decimal digits of precision are maintained and that exponents have range of at least [-12, 12] for both positive and negative numbers. The default value of an uninitialized SFFloat field is 0.0. The default value of an MFFloat field is the empty list. SFInt32 and MFInt32 The SFInt32 field specifies one 32-bit integer. The MFInt32 field specifies zero or more 32-bit integers. SFInt32 and MFInt32 fields are signed integers. The default value of an uninitialized SFInt32 field is 0. The default value of an MFInt32 field is the empty list.
Field types SFImage and MFImage The SFImage field specifies a single uncompressed 2-dimensional pixel image. SFImage fields contain three integers representing the width, height and number of components in the image, followed by width×height hexadecimal or integer values representing the pixels in the image. MFImage fields contain zero or more SFImage fields. Each image in an MFImage field may contain different values for the width, height, and number of components in the image and hence may have a different number of hexadecimal or integer values. Pixel values are limited to 256 levels of intensity (i.e., decimal or 0x00-0xFF hexadecimal). A one-component image specifies one-byte hexadecimal or integer values representing the intensity of the image. For example, 0xFF is full intensity in hexadecimal (255 in decimal), 0x00 is no intensity (0 in decimal). A two-component image specifies the intensity in the first (high) byte and the alpha opacity in the second (low) byte. Pixels in a three-component image specify the red component in the first (high) byte, followed by the green and blue components (e.g., 0xFF0000 is red, 0x00FF00 is green, 0x0000FF is blue). Four-component images specify the alpha opacity byte after red/green/blue (e.g., 0x0000FF80 is semi-transparent blue). A value of 0x00 is completely transparent, 0xFF is completely opaque. Note that alpha equals (1.0 -transparency), if alpha and transparency each range from 0.0 to 1.0. Each pixel is read as a single unsigned number. For example, a 3-component pixel with value 0x0000FF may also be written as 0xFF (hexadecimal) or 255 (decimal). Pixels are specified from left to right, bottom to top. The first hexadecimal value is the lower left pixel and the last value is the upper right pixel. The default value of an SFImage outputOnly field is (0 0 0). The default value of an MFImage field is the empty list.
Field types SFMatrix3d and MFMatrix3d The SFMatrix3d field specifies a 3×3 matrix of double-precision floating point numbers. MFMatrix3d specifies zero or more 3×3 matrices of double-precision floating point numbers. Each floating point number is represented in the X3D file as specified in the respective encoding. SFMatrix3d matrices are organized in row-major fashion. The first row of the matrix stores information for the x dimension, and the second for the y dimension. Since these data types are commonly used for transformation matrices, translation values are stored in the third row. The default value of an uninitialized SFMatrix3d field is the identity matrix [ ]. The default value of an uninitialized MFMatrix3d field is the empty list. SFMatrix3f and MFMatrix3f The SFMatrix3f field specifies a 3×3 matrix of single-precision floating point numbers. MFMatrix3f specifies zero or more 3×3 matrices of single-precision floating point numbers. Each floating point number is represented in the X3D file as specified in the respective encoding. SFMatrix3f matrices are organized in row-major fashion. The first row of the matrix stores information for the x dimension, and the second for the y dimension. Since these data types are commonly used for transformation matrices, translation values are stored in the third row. The default value of an uninitialized SFMatrix3f field is the identity matrix [ ]. The default value of an uninitialized MFMatrix3f field is the empty list.
Field types SFMatrix4d and MFMatrix4d The SFMatrix4d field specifies a 4×4 matrix of double-precision floating point numbers. MFMatrix4d specifies zero or more 4×4 matrices of double-precision floating point numbers. Each floating point number is represented in the X3D file as specified in the respective encoding. SFMatrix4d matrices are organized in row-major fashion. The first row of the matrix stores information for the x dimension, the second for the y dimension, and the third for the z dimension. Since these data types are commonly used for transformation matrices, translation values are stored in the fourth row. The default value of an uninitialized SFMatrix4d field is the identity matrix [ ]. The default value of an uninitialized MFMatrix4d field is the empty list. SFMatrix4f and MFMatrix4f The SFMatrix4f field specifies a 4x4 matrix of single-precision floating point numbers. MFMatrix4f specifies zero or more 4x4 matrices of single-precision floating point numbers. Each floating point number is represented in the X3D file as specified in the respective encoding. SFMatrix4f matrices are organized in row-major fashion. The first row of the matrix stores information for the x dimension, the second for the y dimension, and the third for the z dimension. Since these data types are commonly used for transformation matrices, translation values are stored in the fourth row. The default value of an uninitialized SFMatrix4f field is the identity matrix [ ]. The default value of an uninitialized MFMatrix4f field is the empty list.
Field types SFRotation and MFRotation The SFRotation field specifies one arbitrary rotation. The MFRotation field specifies zero or more arbitrary rotations. An SFRotation is written to the X3D file as four floating point values. The allowable form for a floating point number is defined in the specific encoding. The first three values specify a normalized rotation axis vector about which the rotation takes place. The fourth value specifies the amount of right-handed rotation about that axis in radians. The 3x3 matrix representation of a rotation (x y z a) is [ tx2+c txy+sz txz-sy txy-sz ty2+c tyz+sx txz+sy tyz-sx tz2+c ] where c = cos(a), s = sin(a), and t = 1-c. The default value of an uninitialized SFRotation field is ( ). The default value of an MFRotation field is the empty list.
Field types SFString and MFString The SFString and MFString fields contain strings encoded with the UTF-8 universal character set (see ISO/IEC 10646). SFString specifies a single string. The MFString specifies zero or more strings. Strings are specified as a sequence of UTF-8 octets. Any characters (including linefeeds and '#') may appear within the string. The default value of an uninitialized SFString outputOnly field is the empty string. The default value of an MFString field is the empty list. Characters in ISO/IEC are encoded in multiple octets. Code space is divided into four units, as follows: | Group-octet | Plane-octet | Row-octet | Cell-octet |
Field types In addition, two transformation formats (UCS Transformation Format or UTF) are accepted: UTF-8 and UTF-16. Each represents the nature of the transformation: 8-bit or 16-bit. UTF- 8 and UTF-16 are referenced in ISO/IEC UTF-8 maintains transparency for all ASCII code values ( ). It allows ASCII text (0x0..0x7F) to appear without any changes and encodes all characters from 0x80.. 0x7FFFFFFF into a series of six or fewer bytes. If the most significant bit of the first character is 0, the remaining seven bits are interpreted as an ASCII character. Otherwise, the number of leading 1 bits indicates the number of bytes following. There is always a zero bit between the count bits and any data. The first byte is one of the following. The X indicates bits available to encode the character: 0XXXXXXX only one byte 0..0x7F (ASCII) 110XXXXX two bytes Maximum character value is 0x7FF 1110XXXX three bytes Maximum character value is 0xFFFF 11110XXX four bytes Maximum character value is 0x1FFFFF XX five bytes Maximum character value is 0x3FFFFFF X six bytes Maximum character value is 0x7FFFFFFF All following bytes have the format 10XXXXXX. As a two byte example, the symbol for a registered trade mark ®, encoded as 0x00AE in UCS- 2 of ISO 10646, has the following two byte encoding in UTF-8: 0xC2, 0xAE.
Field types SFNode and MFNode The SFNode field specifies an X3D node. The MFNode field specifies zero or more nodes. The default value of an uninitialized SFNode field is NULL. The default value of an MFNode field is the empty list. SFTime and MFTime The SFTime field specifies a single time value. The MFTime field specifies zero or more time values. Time values are specified as a double-precision floating point number. The allowable form for a double precision floating point number is defined in the specific encoding. Time values are specified as the number of seconds from a specific time origin. Typically, SFTime fields represent the number of seconds since Jan 1, 1970, 00:00:00 GMT.
Field types SFVec2d and MFVec2d The SFVec2d field specifies a two-dimensional (2D) vector. An MFVec2d field specifies zero or more 2D vectors. SFVec2d's and MFVec2d's are represented as a pair of double- precision floating point values (see SFDouble and MFDouble). The allowable form for a double-precision floating point number is defined in the specific encoding. The default value of an uninitialized SFVec2d field is (0 0). The default value of an MFVec2d field is the empty list. SFVec2f and MFVec2f The SFVec2f field specifies a two-dimensional (2D) vector. An MFVec2f field specifies zero or more 2D vectors. SFVec2f's and MFVec2f's are represented as a pair of single-precision floating point values (see SFFloat and MFFloat). The allowable form for a single- precision floating point number is defined in the specific encoding. The default value of an uninitialized SFVec2f field is (0 0). The default value of an MFVec2f field is the empty list.
Field types SFVec3d and MFVec3d The SFVec3d field or event specifies a three-dimensional (3D) vector. An MFVec3d field or event specifies zero or more 3D vectors. SFVec3d's and MFVec3d's are represented as a 3- tuple of double-precision floating point values (see SFDouble and MFDouble). The allowable form for a double-precision floating point number is defined in the specific encoding. The default value of an uninitialized SFVec3d field is (0 0 0). The default value of an MFVec3d field is the empty list. SFVec3f and MFVec3f The SFVec3f field or event specifies a three-dimensional (3D) vector. An MFVec3f field or event specifies zero or more 3D vectors. SFVec3f's and MFVec3f's are represented as a 3- tuple of single-precision floating point values (see SFFloat and MFFloat). The allowable form for a single-precision floating point number is defined in the specific encoding. The default value of an uninitialized SFVec3f field is (0 0 0). The default value of an MFVec3f field is the empty list.
Field types SFVec4d and MFVec4d The SFVec4d field or event specifies a three-dimensional (3D) homogeneous vector. An MFVec4d field or event specifies zero or more 3D homogeneous vectors. SFVec4d's and MFVec4d's are represented as a 4-tuple of double-precision floating point values (see SFDouble and MFDouble). The allowable form for a double-precision floating point number is defined in the specific encoding. The default value of an uninitialized SFVec4d field is ( ). The default value of an MFVec4d field is the empty list. SFVec4f and MFVec4f The SFVec4f field or event specifies a three-dimensional (3D) homogeneous vector. An MFVec4f field or event specifies zero or more 3D homogeneous vectors. SFVec4f's and MFVec4f's are represented as a 4-tuple of single-precision floating point values (see SFFloat and MFFloat). The allowable form for a single-precision floating point number is defined in the specific encoding. The default value of an uninitialized SFVec4f field is ( ). The default value of an MFVec4f field is the empty list.
Core components Το Core component παρέχει την ελάχιστη λειτουργία που απαιτείται από όλες τις x3D- υποχωρητικές εφαρμογές. Το Core component παρέχει τα ακόλουθα αφηρημένα κατασκευάσματα: 1.X3D field types descended from the abstract type X3DField; 2.the base abstract node types X3DNode and X3DPrototypeInstance; 3.commonly used interfaces such as X3DBindableNode and X3DUrlObject; 4.the X3D event model and routing; 5.abstract file structure; and 6.prototyping. Το Core component είναι ένα προαπαιτούμενο συστατικό για όλα τα άλλα X3D συστατικά. Το Core component μπορεί να υποστηριχθεί σε ποικίλα επίπεδα, που επιτρέπουν μια σειρά των εφαρμογών που είναι conformant στη X3D αρχιτεκτονική, το πρότυπο αντικειμένου και το πρότυπο γεγονότος.
sensor Οι αισθητήρες (sensors) είναι κόμβοι που παράγουν τα γεγονότα βασισμένα στις εξωτερικές εισαγωγές στο γράφο σκηνής, όπως η εισαγωγή στοιχείων από τους χρήστες, αλλαγές στο περιβάλλον παρακολούθησης, τα μηνύματα από το δίκτυο ή τους χτύπους του ρολογιού του συστήματος. Το X3D καθορίζει τους ακόλουθους τύπους αισθητήρων: Pointing device sensors Environmental sensors Key device sensors Load sensors Time sensors Picking sensors Οι αισθητήρες είναι παιδιά στην ιεραρχία. Κάθε τύπος αισθητήρα καθορίζει πότε ένα γεγονός παράγεται. Είναι δυνατό να δημιουργηθούν οι εξαρτήσεις μεταξύ των διάφορων τύπων αισθητήρων. EXAMPLE A TouchSensor may result in a change to a VisibilitySensor node's transformation, which in turn may cause the VisibilitySensor node's visibility status to change.
Route X3D οι εφαρμογές διευκρινίζουν τις συνδέσεις μεταξύ των Fields ενός κόμβου στα Fields άλλων κόμβων χρησιμοποιώντας τη δήλωση Route. Οι δηλώσεις Route μπορούν να εμφανιστούν οπουδήποτε στο αρχείο και να έχουν την ακόλουθη μορφή: ROUTE όπου προσδιορίζει τον κόμβο που θα παραγάγει ένα γεγονός, είναι το όνομα του Field στον παραγωγό κόμβο από τον οποίο το γεγονός θα προέλθει, προσδιορίζει τον κόμβο που θα λάβει ένα γεγονός, και προσδιορίζει το Field στον κόμβο προορισμού που θα λάβει το γεγονός.
Profile Κάθε X3D εφαρμογή θα δηλώσει ένα προφίλ (Profile) στην αρχή της εκτέλεσης. Αυτή η δήλωση λεει στο browser το ακριβές σύνολο συστατικών και επιπέδων υποστήριξής τους που απαιτούνται για την εφαρμογή για να τρέξει, επιτρέποντας σε ένα browser να φορτώσει δυναμικά τα κατάλληλα συστατικά εάν επιθυμεί, και παρέχοντας έναν μηχανισμό για την ακριβή προσαρμογή. Εάν ένας browser υποστηρίζει το συνδυασμό δηλωμένου profile και συστατικών μπορεί να συνεχίσει με την παρουσίαση του κόσμου διαφορετικά, θα αποτύχει. Το profile δηλώνεται μέσω μιας δήλωσης PROFILE αμέσως μετά από τη δήλωση επιγραφών στην κορυφή του αρχείου. Η μορφή της δήλωσης PROFILE είναι: PROFILE όπου το όνομα είναι μια σειρά που δεν περιέχει whitespace. Τα ακόλουθα PROFILES έχουν ήδη καθοριστεί: Core Interchange Interactive MPEG-4 interactive Immersive Full CADInterchange
Time component Ο χρόνος (0.0) είναι ισοδύναμος στις 00:00: 00 GMT 1 Ιανουαρίου Οι απόλυτοι χρόνοι διευκρινίζονται στους τομείς SFTime ή MFTime ως αριθμοί κινητής υποδιαστολής διπλός-ακρίβειας που αντιπροσωπεύουν τα δευτερόλεπτα. Οι αρνητικοί απόλυτοι χρόνοι ερμηνεύονται όπως συμβαίνοντας πριν από το 1970.
Time sensor TimeSensor TimeSensor : X3DTimeDependentNode, X3DSensorNode { SFTime [in,out] cycleInterval 1 (0,∞) SFBool [in,out] enabled TRUE SFBool [in,out] loop FALSE SFNode [in,out] metadata NULL [X3DMetadataObject] SFTime [in,out] pauseTime 0 (-∞,∞) SFTime [in,out] resumeTime 0 SFTime [in,out] startTime 0 (-∞,∞) SFTime [in,out] stopTime 0 (-∞,∞) SFTime [out] cycleTime SFTime [out] elapsedTime SFFloat [out] fraction_changed SFBool [out] isActive SFBool [out] isPaused SFTime [out] time
Time sensors Οι κόμβοι TimeSensor παράγουν τα events με το πέρασμα του χρόνου. Οι κόμβοι TimeSensor μπορούν να χρησιμοποιηθούν για πολλούς λόγους συμπεριλαμβανομένου: να οδηγήσουν συνεχείς προσομοιώσεις και animation έλεγχος των περιοδικών δραστηριοτήτων (π.χ., μια ανά λεπτό) έναρξη των ενιαίων γεγονότων περιστατικού όπως ένα ρολόι συναγερμών. Ο κόμβος TimeSensor περιέχει δύο ιδιαίτερους outputOnly fields: isActive και cycleTime. Το isActive outputOnly τομέας στέλνει true όταν αρχίζει ο κόμβος TimeSensor, και false όταν σταματά. Το cycleTime outputOnly στέλνει ένα χρονικό γεγονός στο startTime και στην αρχή κάθε νέου κύκλου (χρήσιμου για το συγχρονισμό με άλλα χρόνος-βασισμένα αντικείμενα). Τα υπόλοιπα outputOnly πεδία παράγουν τα συνεχή γεγονότα. Το fraction_changed outputOnly πεδίο, ένα SFFloat στο κλειστό διάστημα [0.1], δίνει την ολοκλήρωση του τρέχοντος κύκλου. Το Time outputOnly πεδίο στέλνει τον απόλυτο χρόνο για έναν δεδομένο tic προσομοίωσης. Εάν το Enabled πεδίο είναι True, ο κόμβος TimeSensor λειτουργεί. Εάν δεχθεί ένα set_enabled FALSE event ενώ ο κόμβος TimeSensor τρέχει, ο sensor εκτελεί τις ακόλουθες ενέργειες: αξιολογεί και στέλνει όλα τα σχετικά αποτελέσματα στέλνει μια false αξία για isActive τίθεται εκτός λειτουργίας.
Grouping nodes Group : X3DGroupingNode { MFNode [in] addChildren [X3DChildNode] MFNode [in] removeChildren [X3DChildNode] MFNode [in,out] children [] [X3DChildNode] SFNode [in,out] metadata NULL [X3DMetadataObject] SFVec3f [] bboxCenter (-∞,∞) SFVec3f [] bboxSize [0,∞) or −1 −1 −1 } Ένας κόμβος Group περιέχει τους κόμβους παιδιών χωρίς εισαγωγή ενός νέου μετασχηματισμού. Είναι ισοδύναμο με έναν κόμβο transform που περιέχει ένα σύστημα μετασχηματισμού. Το bboxCenter και το bboxSize διευκρινίζει ένα bounding box που εσωκλείει τα παιδιά του κόμβου ομάδας. Αυτή είναι μια δυνατότητα που μπορεί να χρησιμοποιηθεί για λόγους βελτιστοποίησης. Μια τιμή, (- 1, -1, -1), υπονοεί ότι το bounding box δεν διευκρινίζεται και, εάν είναι απαραίτητο, υπολογίζεται από τον browser.
Grouping nodes StaticGroup : X3DChildNode, X3DBoundedObject { SFNode [in,out] metadata NULL [X3DMetadataObject] MFNode [] children [] [X3DChildNode] SFVec3f [] bboxCenter 0 0 (-∞,∞) SFVec3f [] bboxSize [0,∞) or −1 −1 −1 } Ο κόμβος StaticGroup περιέχει τους κόμβους παιδιών που δεν μπορούν να τροποποιηθούν.
Grouping nodes Transform : X3DGroupingNode { MFNode [in] addChildren [X3DChildNode] MFNode [in] removeChildren [X3DChildNode] SFVec3f [in,out] center (-∞,∞) MFNode [in,out] children [] [X3DChildNode] SFNode [in,out] metadata NULL [X3DMetadataObject] SFRotation [in,out] rotation [-1,1] or (-∞,∞) SFVec3f [in,out] scale (-∞, ∞) SFRotation [in,out] scaleOrientation [-1,1] or (-∞,∞) SFVec3f [in,out] translation (-∞,∞) SFVec3f [] bboxCenter (-∞,∞) SFVec3f [] bboxSize [0,∞) or −1 −1 −1 } Ο κόμβος Transform είναι ένας κόμβος ομαδοποίησης που καθορίζει ένα σύστημα αναφοράς για τα παιδιά του που είναι σχετικό με τα συστήματα των προγόνων του.
Grouping nodes Τα translation, rotation, scale, scaleOrientation and center fields περιγράφουν ένα μετασχηματισμό: μια (ενδεχομένως) ανομοιόμορφη κλιμάκωση ως προς ένα αυθαίρετο σημείο μια περιστροφή γύρω από ένα αυθαίρετο σημείο και άξονες μια μεταφορά Το center πεδίο διευκρινίζει ένα offset από τo κέντρο του τοπικού συστήματος συντεταγμένων (0.0.0). rotation field - rotation of the coordinate system. scale field - a non-uniform scale of the coordinate system scaleOrientation a rotation of the coordinate system before the scale (to specify scales in arbitrary orientations).
Shape nodes Appearance : X3DAppearanceNode { SFNode [in,out] fillProperties NULL [FillProperties] SFNode [in,out] lineProperties NULL [LineProperties] SFNode [in,out] material NULL [X3DMaterialNode] SFNode [in,out] metadata NULL [X3DMetadataObject] MFNode [in,out] shaders [] [X3DShaderNode] SFNode [in,out] texture NULL [X3DTextureNode] SFNode [in,out] textureTransform NULL [X3DTextureTransformNode] } Ο κόμβος Appearance διευκρινίζει τις οπτικές ιδιότητες της γεωμετρίας. Η αξία για κάθε έναν από τους τομείς σε αυτόν τον κόμβο μπορεί να είναι NULL. Εντούτοις, εάν ο τομέας είναι non-NULL, περιέχει έναν κόμβο του κατάλληλου τύπου.
Shape nodes FillProperties FillProperties : X3DAppearanceChildNode { SFBool [in,out] filled TRUE SFColor [in,out] hatchColor [0,1] SFBool [in,out] hatched TRUE SFInt32 [in,out] hatchStyle 1 [0,∞) SFNode [in,out] metadata NULL [X3DMetadataObject] } LineProperties LineProperties : X3DAppearanceChildNode { SFBool [in,out] applied TRUE SFInt32 [in,out] linetype 1 [1,∞) SFFloat [in,out] linewidthScaleFactor 0 (-∞,∞) SFNode [in,out] metadata NULL [X3DMetadataObject]
Shape nodes 1 Solid 2 Dashed 3 Dotted 4 Dashed-dotted 5 Dash-dot-dot 6 (single) 7 (single dot) 8 (double arrow) 10 (chain line) 11 (center line) 12 (hidden line) 13 (phantom line) 14 (break line 1) 15 (break line 2) 16 User-specified dash pattern
Shape nodes Material Material : X3DMaterialNode { SFFloat [in,out] ambientIntensity 0.2 [0,1] SFColor [in,out] diffuseColor [0,1] SFColor [in,out] emissiveColor [0,1] SFNode [in,out] metadata NULL [X3DMetadataObject] SFFloat [in,out] shininess 0.2 [0,1] SFColor [in,out] specularColor [0,1] SFFloat [in,out] transparency 0 [0,1] The fields in the Material node determine how light reflects off an object to create colour: The ambientIntensity field specifies how much ambient light from light sources this surface shall reflect. Ambient light is omnidirectional and depends only on the number of light sources, not their positions with respect to the surface. Ambient colour is calculated as ambientIntensity × diffuseColor. The diffuseColor field reflects all X3D light sources depending on the angle of the surface with respect to the light source. The more directly the surface faces the light, the more diffuse light reflects. The emissiveColor field models "glowing" objects. This can be useful for displaying pre-lit models (where the light energy of the room is computed explicitly), or for displaying scientific data. The specularColor and shininess fields determine the specular highlights (e.g., the shiny spots on an apple). When the angle from the light to the surface is close to the angle from the surface to the viewer, the specularColor is added to the diffuse and ambient colour calculations. Lower shininess values produce soft glows, while higher values result in sharper, smaller highlights. The transparency field specifies how "clear" an object is, with 1.0 being completely transparent, and 0.0 completely opaque.
Shape node Shape Shape : X3DShapeNode { SFNode [in,out] appearance NULL [X3DAppearanceNode] SFNode [in,out] geometry NULL [X3DGeometryNode] SFNode [in,out] metadata NULL [X3DMetadataObject] SFVec3f [] bboxCenter (-∞,∞) SFVec3f [] bboxSize [0,∞) or −1 −1 −1 }
Shape node TwoSidedMaterial TwoSidedMaterial : X3DMaterialNode { SFFloat [in,out] ambientIntensity 0.2 [0,1] SFFloat [in,out] backAmbientIntensity 0.2 [0,1] SFColor [in,out] backDiffuseColor [0,1] SFColor [in,out] backEmissiveColor [0,1] SFFloat [in,out] backShininess 0.2 [0,1] SFColor [in,out] backSpecularColor [0,1] SFFloat [in,out] backTransparency 0 [0,1] SFColor [in,out] diffuseColor [0,1] SFColor [in,out] emissiveColor [0,1] SFNode [in,out] metadata NULL [X3DMetadataObject] SFFloat [in,out] shininess 0.2 [0,1] SFBool [in,out] separateBackColor FALSE SFColor [in,out] specularColor [0,1] SFFloat [in,out] transparency 0 [0,1] }
3D Geometry Box Box : X3DGeometryNode { SFNode [in,out] metadata NULL [X3DMetadataObject] SFVec3f [] size (0,∞) SFBool [] solid TRUE }
3D Geometry Cone Cone : X3DGeometryNode { SFNode [in,out] metadata NULL [X3DMetadataObject] SFBool [] bottom TRUE SFFloat [] bottomRadius 1 (0,∞) SFFloat [] height 2 (0,∞) SFBool [] side TRUE SFBool [] solid TRUE }
3D Geometry Cylinder Cylinder : X3DGeometryNode { SFNode [in,out] metadata NULL [X3DMetadataObject] SFBool [] bottom TRUE SFFloat [] height 2 (0,∞) SFFloat [] radius 1 (0,∞) SFBool [] side TRUE SFBool [] solid TRUE SFBool [] top TRUE }
3D Geometry ElevationGrid ElevationGrid : X3DGeometryNode { MFFloat [in] set_height MFNode [in,out] attrib [] [X3DVertexAttributeNode] SFNode [in,out] color NULL [X3DColorNode] SFNode [in,out] fogCoord [] [FogCoordinate] SFNode [in,out] metadata NULL [X3DMetadataObject] SFNode [in,out] normal NULL [X3DNormalNode] SFNode [in,out] texCoord NULL [X3DTextureCoordinateNode] SFBool [] ccw TRUE SFBool [] colorPerVertex TRUE SFFloat [] creaseAngle 0 [0,∞) MFFloat [] height [] (-∞,∞) SFBool [] normalPerVertex TRUE SFBool [] solid TRUE SFInt32 [] xDimension 0 [0,∞) SFFloat [] xSpacing 1.0 (0,∞) SFInt32 [] zDimension 0 [0,∞) SFFloat [] zSpacing 1.0 (0,∞) }
3D Geometry Extrusion : X3DGeometryNode { MFVec2f [in] set_crossSection MFRotation [in] set_orientation MFVec2f [in] set_scale MFVec3f [in] set_spine SFNode [in,out] metadata NULL [X3DMetadataObject] SFBool [] beginCap TRUE SFBool [] ccw TRUE SFBool [] convex TRUE SFFloat [] creaseAngle 0 [0,∞) MFVec2f [] crossSection [ ] (-∞,∞) SFBool [] endCap TRUE MFRotation [] orientation [-1,1] or (-∞,∞) MFVec2f [] scale 1 1 (0,∞) SFBool [] solid TRUE MFVec3f [] spine [ ] (-∞,∞) }
3D Geometry Shapes are constructed as follows. The cross-section curve, which starts as a curve in the Y=0 plane, is first scaled about the origin by the first scale parameter (first value scales in X, second value scales in Z). It is then translated by the first spine point and oriented using the first orientation parameter (as explained later). The same procedure is followed to place a cross-section at the second spine point, using the second scale and orientation values. Corresponding vertices of the first and second cross-sections are then connected, forming a quadrilateral polygon between each pair of vertices. This same procedure is then repeated for the rest of the spine points, resulting in a surface extrusion along the spine.
3D Geometry IndexedFaceSet IndexedFaceSet : X3DComposedGeometryNode { MFInt32 [in] set_colorIndex MFInt32 [in] set_coordIndex MFInt32 [in] set_normalIndex MFInt32 [in] set_texCoordIndex MFNode [in,out] attrib [] [X3DVertexAttributeNode] SFNode [in,out] color NULL [X3DColorNode] SFNode [in,out] coord NULL [X3DCoordinateNode] SFNode [in,out] fogCoord [] [FogCoordinate] SFNode [in,out] metadata NULL [X3DMetadataObject] SFNode [in,out] normal NULL [X3DNormalNode] SFNode [in,out] texCoord NULL [X3DTextureCoordinateNode] SFBool [] ccw TRUE MFInt32 [] colorIndex [] [0,∞) or -1 SFBool [] colorPerVertex TRUE SFBool [] convex TRUE MFInt32 [] coordIndex [] [0,∞) or -1 SFFloat [] creaseAngle 0 [0,∞) MFInt32 [] normalIndex [] [0,∞) or -1 SFBool [] normalPerVertex TRUE SFBool [] solid TRUE MFInt32 [] texCoordIndex [] [-1,∞) }
3D Geometry Sphere Sphere : X3DGeometryNode { SFNode [in,out] metadata NULL [X3DMetadataObject] SFFloat [] radius 1 (0,∞) SFBool [] solid TRUE }