The VRML tutor

Πίνακας περιεχομένων

  1. Τι είναι η VRML ;
  2. Ιστορία της VRML
  3. VRML Browsers
  4. Θεμελιώδης γλωσσικές έννοιες

Αγωγός γραφικών παραστάσεων

Από τοπικούς σε παγκόσμιους μετασχηματισμούς
Φωτισμός

Μετασχηματισμοί θέασης

Αποκόμματα

Προοπτική προβολής και χαρτογράφηση στο Viewport

Περιοχή αναπαραγωγής ειδώλου

Ιεραρχία και κληρονομιά στο VRML

Το σύστημα συντεταγμένων

  1. Βασικά στοιχεία για την VRML 1.0

Εισαγωγική γραμμή VRML

Πρωτογενή σχήματα

Σφαίρα

Κώνος

Κύλινδρος

Κύβος

Παραδείγματα βασικών σχημάτων

Μετασχηματισμοί

Κόμβος μετασχηματισμού

Μετάφραση , περιστροφή και κόμβοι σφραγίσματος

Μήτρα κόμβου μετασχηματισμού

Κείμενο

Κόμβος κειμένου ASCII

Κόμβος στυλ γραμματοσειράς

Σημεία ,γραμμές και πολύγωνα

Πολύγωνα

Γραμμές

Σημεία

ΟΡΙΣΜΟΣ ΚΑΙ ΧΡΗΣΗ-- Επαναχρησιμοποίηση αντικειμένων

Υπερσυνδέσεις, Τηλελιμάνια και εσωτερικές γραμμές

Εσωτερικές γραμμές

Υπερσυνδέσεις και τηλελιμάνια

6.   Προσθέτοντας ρεαλισμό στις σκηνές VRML

 
Φωτογραφικές μηχανές και φωτισμός

Φώτα κατευθύνσεως

Φώτα σημείων

Προβολείς

Φωτογραφικές μηχανές

Υλικά

Ο κόμβος υλικού

Δεσμευτικά πολλαπλά υλικά

Σύσταση

Ο κόμβος ύφανσης 2
 

Εφαρμόζοντας υφάνσεις

7.Βελτιώνοντας την VRML

Μειώνοντας το μέγεθος των αρχείων

Βελτιώνοντας την πραγματικότητα
 
 
 
 

ΚΕΦΑΛΑΙΟ 1

Τι είναι η VRML ;

Η γλώσσα σχηματισμού εικονικής πραγματικότητας χρησιμοποιείται με τον ίδιο τρόπο για να σχηματίζει τρισδιάστατους κόσμους στο παγκόσμιο δίκτυο όπως και η HTML χρησιμοποιείται για να σχηματίσει συγκεκριμένες σελίδες δικτύου. Και οι δύο είναι γλώσσες γραπτού κειμένου ascii και χρησιμοποιούν HTTP βοηθούς/φορείς. Όμως η HTML είναι γλώσσα με αυξανόμενη τιμή ενώ η VRML (προφέρεται ‘ver-mul’) δεν είναι. Αν και το M στο VRML αρχικά σήμαινε Markup άλλαξε σύντομα σε Modeling(πλάσιμο - σχηματισμός) επειδή η γλώσσα δεν περιέχει ετικέτες για να μαρκάρει κοινές δομές όπως επικεφαλίδες και έμφαση στο κείμενο. Αντί για αυτό είναι γλώσσα σχηματισμού περιέχοντας διάφορους κόμβους και τομείς για να περιγράψει πως ένα αντικείμενο αποδίδεται .Άλλα όπως η HTML έτσι και η VRML μπορεί να περιέχει συνδέσμους με άλλα HTML ή VRML τεκμήρια. Στο δεύτερο (που ονομάζεται teleport) o χρήστης βρίσκεται σε ένα νέο κόσμο( Stanek 598-99).

 
                                  ΕΙΚΟΝΑ 1.1
Παρ.1.1. Το τσαγιερό της Utah. Πρωτοκατασκευάστηκε στο
πανεπιστήμιο της Γιούτα το 1975 από τον Μ.Newell. To πολύ-
γωνικό πλέγμα τσαγιερού έχει γίνει ένα σημαντικό στοιχείο στα
κομπιούτερ γρφικών. Αυτή η εκδοχή του VRML περιέχει 1976
κορυφές και 3751 πολύγωνα.
 

Οι VRML Browsers δουλεύουν με τον ίδιο περίπου τρόπο όπως τα web browsers (δίκτυα browsers - ανάγνωση δικτύων).
Αφού έχει αποθηκευτεί ένα world αρχείο, το VRML browser το αποδίδει και επιτρέπει στον χρήστη να πλεύσει μέσα του. Τυπικά ο χρήστης έχει την επιλογή να περπατήσει ή να πετάξει μέσα στον χώρο οποιαδήποτε στιγμή χρησιμοποιώντας το ποντίκι ή τους πίνακες ελέγχου πάνω στο browser. Ένας χρήστης μπορεί να κοιτάξει τριγύρω ή πάνω από αντικείμενα, να περπατήσει ή να πετάξει μέσα στο περιβάλλον, να εξετάσει πράγματα μέχρι την τελευταία λεπτομέρεια και σε μερικά browsers να στριφογυρίσει ή να πετάξει αντικείμενα.
 
 
 
 
 

ΚΕΦΑΛΑΙΟ 2

Λίγη ιστορία για την VRML

Η VRML έχει την προέλευσή της στο πρώτο παγκόσμιο συνέδριο δικτύου το Μάρτιο του 1994. Εκεί στην Γενεύη της Ελβετίας ο Tim Bernes-Lee, εφευρέτης των υπερσυνδέσμων (hyperlinks) και πατέρας του παγκοσμίου δικτύου , μαζί με τον David Raggett οργάνωσαν μία σύνοδο(B-O-F) Birds of a feather, που την ονόμασαν ¨Virtual Reality Markup Languages and the World Wide Web (Γλώσσες μαρκαρίσματος εικονικής πραγματικότητας και το παγκόσμιο δίκτυο). Πολλοί σύνεδροι συγκεντρώθηκαν και οι διαδικασίες προχώρησαν γρήγορα. Σύντομα σχηματίστηκε ένα e-mail που θα συγκέντρωνε μία λίστα με σκοπό να εκπονήσουν μία περιγραφή-προσδιορισμό. Μέσα σε μία εβδομάδα υπήρχαν πάνω από 1000 μέλη στην λίστα. Ο δημιουργός της λίστας , Marc Pesce του γκρουπ ¨Λαβύρινθος¨, είχε την εποπτεία για να σχηματίσουν μία VRML περιγραφή για την WWW σύσκεψη του Φθινοπώρου του 1994(Bell , VRML 1.0 Spec.).

Αφού πολλές προτάσεις συνενώθηκαν , τα μέλη της λίστας αποφάσισαν να επινοήσουν ξανά τον τροχό και επέλεξαν ένα υποσύνολο του Silicon Graphics μοντέλου 3-D με την ονομασία Ανοικτός Εφευρέτης ,το οποίο είχε την έγκριση του SGI. Με προεκτάσεις για υπερσυνδέσεις και άλλες επαυξήσεις, το σχέδιο της VRML σχηματίστηκε από τον Gavin Bell του SGI (Stanec 600).

Ένα προσχέδιο της περιγραφής για την VRML 1.0 παρουσιάστηκε στο επόμενο παγκόσμιο συνέδριο δικτύου τον Οκτώβριο του 1994 στο Σικάγο. Τον επόμενο Απρίλιο , η VRML 1.0 παρουσιάστηκε επίσημα στον κόσμο και αμέσως μετά δημιουργήθηκε το προσχέδιο για το VRML 1.1. για να διευκρινήσει κάποιες από τις ασάφειες στο VRML 1.0 .Όμως, μέσα στην βιασύνη τους να δώσουν στο VRML πιο προηγμένα χαρακτηριστικά ,αυτοί που μετείχαν προχώρησαν για το VRML 2.0. Το VRML 1.1 παρέμεινε ένα προσχέδιο και ποτέ δεν τελειοποιήθηκε. Οι διάφορες διευκρινήσεις και προτάσεις για την VRML μπορούν να βρεθούν στα ακόλουθα δίκτυα:
 

Version 1.0:http://vrml.wired.com/vrml.tech/vrml10-3.html

Version 1.1:http://vag.vrml.org/vrml1-1.html

Version 2.0:http://webspace.sgi.com/moving-worlds/index.html
 
 

Το πρώτο συμπόσιο VRML έγινε στο San Diego τον Δεκέμβριο του 1995 και εταιρίες από παντού μαζεύτηκαν με τις δικές τους προτάσεις για το πως η VRML θα έπρεπε να εξελιχθεί. Τον Ιανουάριο του 1996 το VRML αρχιτεκτονικό γκρουπ πρόβαλε μία αίτηση για τις προτάσεις του VRML2.0. Από τις έξι προτάσεις που ακούστηκαν, η πρόταση «Κινούμενοι κόσμοι» από το Silicon graphics σε συνεργασία με την Sony και Mitra κατέληξε σε ισχυρή ομοφωνία. Ο ¨Κινούμενος Κόσμος ¨ κέρδισε και το VAG το επισημοποίησε την 27η Μαρτίου. Το πρώτο ,δεύτερο και τρίτο VRML 2.0 προσχέδιο δημοσιεύτηκαν τον Μάιο , Ιούνιο και Ιούλιο αντίστοιχα και την 4η Αυγούστου 1996, το VRML2.0 τελειοποιήθηκε.
 
 

ΚΕΦΑΛΑΙΟ 3

VRML browsers

Το σύστημα ανάγνωσης VRML (browser) είναι η είσοδος σου στον κυβερνοχώρο για να επιθεωρείς VRML κόσμους. Δουλεύει με περίπου ίδιο τρόπο σαν browser δικτύου αλλά η πλεύση είναι λίγο πιο περίπλοκη από το να κοιτάς εικόνες και κείμενο και να κάνεις κλικ εδώ και κει. Το VRML browser επίσης αποφασίζει πόσο καλά τα αντικείμενα θα εμφανιστούν στην οθόνη. Τα αντικείμενα φαίνονται διαφορετικά σε διαφορετικούς browsers και μερικοί browsers είναι πιο γρήγοροι από ότι άλλοι. Αυτό το κεφάλαιο θα κοιτάξει πόσο καλά τα VRML browsers δουλεύουν και πως να μπορεί κανείς να δουλεύει με ένα web browser.
 

3.1  ΠΩΣ ΔΟΥΛΕΥΟΥΝ ΤΑ VRML BROWSERS

VRML και web browsers είναι πολύ παρόμοια εννοιολογικά και δουλεύουν μαζί αρμονικά. Τα VRML αρχεία τελειώνουν σε (.wrl) από την λέξη κόσμο. Αφού το VRML browser αποθηκεύσει ένα κόσμο αποδίδει τον κόσμο αυτό σε τριδιάστατες παραστάσεις και επιτρέπει στον χρήστη να περιπλανηθεί σε αυτόν. Η πολλαπλής χρήσης διεύθυνση ταχυδρομείου INTERNET(Multiple Internet Mail Extension) MIME επιτρέπει στον web browser και σ’έναν υπολογιστή εξυπηρέτησης δικτύου να μεταφέρει δεδομένα και λέει στο καθένα τι να κάνει με αυτό.Web και VRML browsers επικοινωνούν έτσι ώστε όταν ένας σύνδεσμος επιλέγεται σε ένα HTML αρχείο σε ένα συνηθισμένο browser , το brοwser αναγνωρίζει το MIME είδος του x-world/x-vrml και περνά το VRML αρχείο ή URL στο VRML browser. Αντιστρόφως ένας HTML σύνδεσμος που επιλέγεται από έναν εικονικό κόσμο έχει σαν αποτέλεσμα να περαστεί στο WEB browser.

Αν και οι VRML θεατές κοινά αναφέρονται σαν browsers ,η πλειοψηφία είναι στην πραγματικότητα συνδεόμενοι(plug-ins_ στο WWW browsers όπως το Netscape. Plug-ins είναι οι εφαρμογές που αναφέρονται στο Helper Applications dialog box του browser (βοηθητικό κουτί εφαρμογών) και συσχετίζονται με ένα συγκεκριμένο τύπο MIME. Έτσι όταν ένας σύνδεσμος αρχείου VRML επιλέγεται και ένας τύπος MIME αναγνωρίζεται, το VRML plug-in δείχνει τον εικονικό κόσμο στην περιοχή του πελάτη του τρέχοντος web browser. Γρήγορα! Ο εικονικός κόσμος εμφανίζεται και ο χρήστης μπορεί να περπατήσει ή να πετάξει μέσα του με το ποντίκι.

Αλλά δεν συμβαίνει απαραίτητα τόσο σύντομα. Αφού ο χρήστης έχει αποθηκεύσει το αρχείο του κόσμου, αρχίζει να ερμηνεύει τους διάφορους κόμβους και τομείς. Αφού οι υπολογισμοί ολοκληρωθούν αποδίδει αυτό που έχει ερμηνευτεί. Όμως τα VRML περιβάλλοντα μπορούν να διανεμηθούν σε όλο το δίκτυο και να χρησιμοποιήσουν άλλων ανθρώπων τα αντικείμενα. Σε εκείνη την περίπτωση ο χρήστης πρώτα φορτώνει την βασική περιγραφή της σκηνής και μετά αποθηκεύει οποιεσδήποτε ένθετες σκηνές. Καθώς ο χρήστης μετακινείται μέσα στο περιβάλλον, το browser συνεχώς ελέγχει να δει αν νέο υλικό χρειάζεται καθώς η άποψη του χρήστη αλλάζει (Matsuba 148) . Όσο πιο πολύ δύναμη επεξεργασίας και μνήμης έχει το κομπιούτερ τόσο πιο γρήγορη και ομαλή είναι η αναλογία οργάνωσης πλαισίου.
 
 

  3.2  ΔΙΑΜΟΡΦΩΝΟΝΤΑΣ ΤΟ ΔΙΚΟ ΣΟΥ VRML BROWSER

Αφού απoκτήσεις ένα browser , είτε φορτώνοντάς το από το internet ή από CD-ROM ,αυτό πρέπει να αποσυμπιεστεί. Τα σχέδια συμπύκνωσης θα διαφέρουν σε σχέση με την πλατφόρμα του κομπιούτερ του χρήστη αλλά οι πιθανότητες είναι ότι αν το σχέδιο συμπύκνωσης δεν είναι τόσο οικείο, ο browser είναι για διαφορετική πλατφόρμα. Αφού το browser έχει αποσυμπιεστεί και εν συνεχεία εγκατασταθεί, είναι σημαντικό να σημειώσουμε αν το browser τοποθετήθηκε στο web browser σαν βοηθός εφαρμογής όπως περιγράφτηκε πιο πάνω. Μερικοί browsers θα το κάνουν αυτό, αλλά οι πιο πολλοί όχι, ειδικά αν ένα άλλο VRML browser έχει εγκατασταθεί εκ των προτέρων. Για να αποφασίσουμε αν το VRML browser έχει εγκατασταθεί στο web browser εξετάστε το web browsers MIME settings dialog box. Στον πλοηγό netscape επιλέγουμε Γενικές προτάσεις από το μενού των επιλογών. Τώρα επιλέξτε το Helpers tab (ετικέτα) από το κουτί διαλόγου . Ένα μενού παρόμοιο με το σχέδιο 3.1 θα πρέπει να εμφανιστεί.(Σημειώστε ότι ο πλοηγός Netscape χρησιμοποιείται στα ακόλουθα παραδείγματα ,αλλά η διαδικασία στον Internet Explorer της Microsoft και σε άλλα browsers είναι πολύ απλή.

                                                ΕΙΚΟΝΑ 3.1 Netscape Navigator’s Helper Applications menu
 
 

Κοιτάξτε προσεκτικά να δείτε αν υπάρχει μία εγγραφή/καταχώρηση για τον VRML τύπο δεδομένων, x-world / x-vrml. Αν δεν υπάρχει καταχώρηση γι’αυτό, τότε επιλέξτε το κουμπί επιλογής νέου τύπου.

Ένα κουτί διαλόγου εμφανίζεται το οποίο επιτρέπει έναν νέο τύπο στοιχείων να δημιουργηθεί. Τυπώστε x-world για το MIME TYPE και x-vrml για ΜΙΜΕ SubType. Θα πρέπει να φαίνεται σαν το σχήμα 3.2
 

ΕΙΚΟΝΑ 3.2 : Διαμορφώνοντας τα VRML στοιχεία στο Netscape.

Αφού επιλέξετε ΟΚ , ο νέος τύπος MIME θα εμφανιστεί στην οθόνη. Μετά βάλτε wrl , gz στον τομέα Επέκταση Αρχείων (File extensions Field) θα πρέπει να εμφανιστεί στην στήλη Extensions(Επεκτάσεις) στην οθόνη. (Σημειώστε ότι το .gz extension είναι για συμπιεσμένους κόσμους. Αυτό θα καλυφθεί με περισσότερες λεπτομέρειες αργότερα). Τώρα που ο τύπος MIME για τα αρχεία VRML έχει διαμορφωθεί, το web browser θα πρέπει να ξέρει πως να βρεις το δικό σου vrml browser . Επιλέξτε την γραμμή x-world/x-vrml και τότε στον τομέα δράσης του dialog box , επιλέξτε το λανσάρισμα το ραδιοφωνικό κουμπί εφαρμογών (Αpplication Radio Button). Μπείτε στο μονοπάτι για το VRML browser στο Launch Application field ή πατείστε το Browse button δίπλα του και εντοπίστε το. Επιλέξτε το OK και κλείστε το κουμπί επιλογής διαλόγων και αν είναι παρόν στο WEB browser, επιλέξτε το Save options (Αποθηκεύστε τις επιλογές) από το μενού των επιλογών. Τώρα είμαστε έτοιμοι να αρχίσουμε να σερφάρουμε στους κυβερνοχώρους: Επιλέξτε Open File από το File Menu και επιλέξτε VRML words ( *,wrl, *,gz ) από τα αρχεία ή τυπώστε το κουτί λίστας. Τώρα αρχίστε να ψάχνετε δείγματα VRML κόσμων συμπεριλαμβανομένων με το browser. Εντοπείστε ένα στον κατάλογο VRML και αρχίστε να σερφάρετε!
 
 

ΚΕΦΑΛΑΙΟ 4

Θεμελιώδης γλωσσικές έννοιες

Προτού να επιβιβαστείτε στον κώδικα VRML , είναι σημαντικό να καταλάβετε τις βασικές έννοιες των VRML worlds και τα browsers (σύστημα ανάγνωσης) που τα αποδίδουν . Αυτό το κεφάλαιο καλύπτει τον αγωγό γραφικών παραστάσεων την ιεραρχία και την κληρονομιά στο VRML και το σύστημα συντονισμού που χρησιμοποιείται στο VRML.

4.1 ΑΓΩΓΟΣ ΓΡΑΦΙΚΩΝ ΠΑΡΑΣΤΑΣΕΩΝ

Το πρώτο συστατικό για οποιοδήποτε επιτυχές σχέδιο γραφικών παραστάσεων κομπιούτερ είναι η τέλεια γνώση του αγωγού γραφικών παραστάσεων από τον δημιουργό τους. Καθαρή κατανόηση του αγωγού γραφικών παραστάσεων παράγει ικανοποιητικές και φορητές δημιουργίες. Μετά τους ακόλουθους τομείς , ο αναγνώστης θα πρέπει να προσπαθήσει να αποφασίσει ποια στάδια του αγωγού είναι σε εφαρμογή στο software και ποια στο hardware στο κομπιούτερ του αναγνώστη.

Ο αγωγός γραφικών παραστάσεων εκτελείται από την μηχανή απόδοσης. Διαφορετικά browsers έχουν κάνει χρήση διαφόρων μηχανών απόδοσης για να πετύχουν το τελικό προιόν (δείτε πίνακα 4.1 )

Πίνακας 4.1

Δημοφιλείς browsers και οι μηχανισμοί  απόδοσης
 

VRML Browser                                                Rendering Engine

WorldView                                                                           RealityLab

WebFX                                                                                 RenderWare

VR Scout                                                                               3DR

WebSpace                                                                             OpenGL

Fountain                                                                                 3DR

VRWeb                                                                                 Mesa

Whurlwind                                                                             Quickdraw 3D

Πηγή: Matsuba , Stephen and Bernie Roehl. Ειδική έκδοση

χρησιμοποίησης της VRML. (Indianapolis : Que Corporation , 1996 )640.

Κάθε φορά που ένας VRML κόσμος έχει επανασχηματισθεί στην οθόνη έχει διέλθει από τον αγωγό γραφικών παραστάσεων.
( Δείτε παράδειγμα 4.1 )
 

 
Figure 4.1 Ο αγωγός γραφικών παραστάσεων

4.1.1Από τοπικούς σε παγκόσμιους μετασχηματισμούς

Το πρώτο βήμα του μηχανισμού απόδοσης είναι να μετατρέψει τις αρχές γραφικών παραστάσεων από το συντονιστικό σύστημα κόσμων. Οι συνήθεις μετατροπές κλίμακας, περιστροφής και ερμηνείας εκτελούνται με ένα απλό καλούπι μετατροπής. Επόμενο είναι η εκλογή αντικειμένου. Τα αντικείμενα που είναι εξ’ ολοκλήρου έξω από την ένταση θέασης ,ή όπως είναι γνωστό viewing frustum , πετάγονται έξω. Αυτά που δεν μπορούν να γίνουν επιπόλαια δεκτά ή να απορριφθούν θα αποκοπούν στο στάδιο αποκοπής (Foley et.al 867-68)

4.1.2 Φωτισμός

Σχεδόν όλα τα VRML browsers χρησιμοποιούν Gourand σκίαση. Αν αυτή είναι η περίσταση , οι υπολογισμοί φωτισμού για κάθε κορυφή θα γίνουν στην συνέχεια. Οι αξίες έντασης και χρώματος ακολουθούν από το διάχυτο φως του κομπιούτερ κατοπτρική και περικλείουσα αντανάκλαση , εκπομπή και διαφάνεια. Ένα καλό VRML browser θα έχει μία επιλογή να θέσει τον αλγόριθμο σκίασης σε συνεχή σκίαση Phong ή καθόλου σκίαση ( καλωδίαση ) επίσης. Στο πρώτο αναφερόμενο , ο αλγόριθμος σκίασης παρουσιάζεται μία φορά ανά πολύγωνο. Στην σκίαση Phong το μοντέλο φωτισμού πρέπει να εκτιμηθεί σε κάθε pixel. Όμως αυτοί οι σημαντικοί υπολογισμοί συμβαίνουν κατά την διάρκεια του σταδίου της αναπαραγωγής του ειδώλου του αγωγού (Foley et.al. 864)

4.1.3 Μετασχηματισμοί θέασης

Σ’αυτό το στάδιο όλες οι κορυφές μετατρέπονται από συντεταγμένες κόσμου σε συντεταγμένες κάμερας ή ματιών του χρήστη. Αυτό το σύστημα συντεταγμένων θέασης δείχνει στην αρνητική κατεύθυνση Ζ. Όμως αυτό το σύστημα συντεταγμένων είναι απλώς νοητικό για τον δημιουργό κόσμου.
4.1.4 Αποκόμματα

Τα αρχέτυπα που είναι εξ’ ολοκλήρου έξω από την ένταση θέασης πετάγονται έξω στο πρώτο στάδιο. Στο στάδιο αποκοπής τα πρόσωπα που είναι μόνο μερικώς μέσα στην ένταση θέασης αποκόπτονται. Αυτό μπορεί να είναι πολύ εντατικό αν πολλά αρχέτυπα διασχίζουν τα όρια αποκοπής.

4.1.5 Προοπτική προβολής και χαρτογράφηση στο Viewport
 

Προοπτική προβολής που εφαρμόζεται για να δώσει βάθος στην εικόνα. Αυτό γίνεται διαιρώντας τις x και y αξίες με την z αξία για κάθε κορυφή. Οι προκύπτουσες x και y συντεταγμένες κορυφών χαρτογραφούνται στις αντίστοιχες συντεταγμένες οθόνης.

4.1.6 Περιοχή αναπαραγωγής ειδώλου

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

Στην μετατροπή ανίχνευσης , οι κορυφές κάθε αρχετύπου πρέπει να μειωθούν σε pixels που ορίζουν τις πλευρές του αντικειμένου. Στην συνέχεια ο καθορισμός της ορατής επιφάνειας (μερικές φορές ονομάζεται εξάλειψη κρυμμένης επιφάνειας) κατατάσσει τα αντικείμενα για να βεβαιώσει ότι εμφανίζονται στην σωστή σειρά βάθους. Αυτό συνήθως γίνεται χρησιμοποιώντας έναν αλγόριθμο ορατότητας γνωστό σαν z προφυλακτήρας.

Όπως καλύφθηκε παραπάνω τα πρόσωπα μπορούν να αποδοθούν στα περισσότερα VRML browsers χρησιμοποιώντας καλωδιώσεις, συνεχή σκίαση Phong σκίαση ή Gourard σκίαση. Οι καλωδιώσεις είναι πολύ γρήγορες επειδή περιλαμβάνουν μόνο γραμμές σχεδιασμού , όμως το μοτίβο ‘chicken wire’ είναι μάλλον μη ελκυστικό. Η συνεχής σκίαση είναι επίσης πολύ γρήγορη επειδή δεν απαιτεί κανέναν επιπλέον υπολογισμό. Το χρώμα του πολυγώνου καθορίστηκε στο στάδιο του φωτισμού. Η σκίαση Gourard ή όπως είναι γνωστή ‘απαλός σκίαση’ περιλαμβάνει το να παρεμβάλεις το χρώμα των κορυφών σε κάθε πρόσωπο. Η σκίαση Phong απαιτεί σημαντικά πιο πολύ υπολογισμό για να αποφασίσουμε το χρώμα και την ένταση σε κάθε pixel ,αλλά στα πιο πολλά VRML browsers ο έξτρα ρεαλισμός που προκύπτει δεν είναι ασυνήθης. Η χαρτογράφηση και η έξαψη της υφής είναι μία τεχνική που προσπαθεί να εξαλείψει φαινόμενα Mach banding αλλά δείχνει επίσης και τον χρόνο αναπαραγωγής ειδώλου.

4.2 ΙΕΡΑΡΧΙΑ ΚΑΙ ΚΛΗΡΟΝΟΜΙΚΟΤΗΤΑ ΣΤΗ VRML

Κάθε VRML κόσμος είναι κατανεμημένος σε ιεραρχική δομή. Στην βάση αυτής της δομής είναι οι κόμβοι. Οι κόμβοι αποτελούνται από γεωμετρικά σχήματα όπως σφαίρες και κύβους καθώς και ιδιότητες όπως περιστροφικοί και υλικοί κόμβοι. Ένα γράφημα σκηνής είναι μία συλλογή από κόμβους και καθορίζει μία ταξινόμηση για τους κόμβους. Ένα VRML αρχείο είναι το πιο υψηλό επίπεδο γραφήματος σκηνής.

Οι κόμβοι αποτελούνται από τομείς που περιέχουν συμπεριφορές συγκεκριμένες προς τους κόμβους. Π.χ. ο κόμβος σφαίρα αποτελείται από τον τομέα ακτίνα. Με αυτόν τον τρόπο οι κόμβοι μπορούν να ληφθούν σαν κοντέηνερς για τους τομείς και ένα γράφημα σκηνής σαν υποδοχέας για τους κόμβους (Bell et.al.,VRML 1.0 Spec ). Παρατηρείστε τους τομείς για τα υλικά ,τους μετασχηματισμούς και τους κόμβους σφαίρας στο ακόλουθο παράδειγμα:
 

Listing 4.1

#VRML V1.0 ascii
# An example of Hierarchy and Inheritance
Separator {
    Separator {
        # Red ball
        Material  { diffuseColor 1 0 0 }
        Transform { translation  3 3 0 }
        Sphere    { radius 3 }
        # Green ball
        Material  { diffuseColor 0 1 0 }
        Transform { translation  0 4 0 }
        Sphere    { radius 1 }
    }
    # Blue ball
    Separator {
        Material {diffuseColor 0 0 1}
        Sphere   { } # radius defaults to 2
        }
}
 

Μαζί με τους κόμβους σχήματος και τους κόμβους ιδιοτήτων, άλλη μία κατηγορία κόμβων υπάρχει. Ο διαχωριστικός κόμβος είναι η νέα κατηγορία όπου στο παραπάνω παράδειγμα χωρίζει τον εικονικό κόσμο σε τρία γραφήματα σκηνής: τον ίδιο τον κόσμο , τις κόκκινες και πράσινες μπάλλες και την μπλέ μπάλλα. Ο διαχωριστικός κόμβος επίσης ελέγχει την κληρονομικότητα στους VRML κόσμους. Στο παραπάνω παράδειγμα, η κόκκινη μπάλλα μεταφράζεται σε (3,3,0) . Η πράσινη μπάλλα κληρονομεί αυτήν την ερμηνεία και με μία επιπλέον μετάφραση του (0,4,0) η πράσινη μπάλλα μετακινείται στο (3,7,0) . Οι μετατροπές κληρονομούνται και συσσωρεύνται. Όμως οι ιδιότητες του χρώματος υλικού είναι κληρονομήσιμες αλλά δεν συσσωρεύονται.Αυτό σημαίνει ότι το χρώμα της δεύτερης μπάλλας δεν είναι (1,1,0) και επίσης αν ο δεύτερος υλικός κόμβος μετακινηθεί , θα μπορούσε να κληρονομήσει το κόκκινο χρώμα. Επειδή η μπλε σφαίρα είναι μέσα στο δικό της γράφημα σκηνής και επειδή αυτό το γράφημα σκηνής δεν είναι παιδί του υποδοχέα παραπάνω δεν κληροδοτεί αυτές τις μεταφράσεις. Γι αυτόν τον λόγο η μπλε μπάλλα επικεντρώνεται στην απουσία του (0,0,0).

4.3  ΤΟ ΣΥΣΤΗΜΑ ΣΥΝΤΕΤΑΓΜΕΝΩΝ

Ο προηγούμενος τομέας ασχολήθηκε με τις συντεταγμένες μέσα σε έναν VRML κόσμο. Ο σχεδιαστής του VRML πρέπει να έχει πλήρη κατανόηση του συστήματος συντεταγμένων που χρησιμοποιείται. Το VRML χρησιμοποιεί ένα καρτεσσιανό δεξιόχειρο, τρισδιάστατο σύστημα συντεταγμένων. Αντικείμενα προβάλλονται πάνω στην οθόνη στην κατεύθυνση του θετικού άξονα Ζ , με τον θετικό άξονα Χ στα δεξιά και τον θετικό άξονα Υ πάνω. Η θέση της κάμερας ή το ‘μάτι του θεατή’ μπορεί να χρησιμοποιηθεί με τρόπο ώστε να δει τον κόσμο από διαφορετική θέση. Η μονάδα για μήκη και αποστάσεις είναι μέτρα και οι γωνίες καθορίζονται σε ακτίνια (Bell et.al. ,VRML 1.0 Spec).
 
 

ΚΕΦΑΛΑΙΟ 5

Βασικά στοιχεία για την VRML 1.0
 
 

Τα εργαλεία που χρειάζονται να κατασκευαστούν ερεθιστικοί εικονικοί κόσμοι παρουσιάστηκαν με τον καθορισμό της VRML 1.0. Αυτό το κεφάλαιο εξερευνεί το πώς να χρησιμοποιείς αυτά τα εργαλεία να δημιουργήσεις εικονικούς κόσμους χρησιμοποιώντας πρωτόγονα σχήματα, μετασχηματισμούς, κείμενο, γραμμές πολύγονα και υπερσυνδέσμους.

5.1 ΕΙΣΑΓΩΓΗ ΓΡΑΜΜΗ VRML

Η πρώτη γραμμή κάθε αρχείου VRML προσδιορίζει το αρχείο ως αρχείο VRML και την έκδοση του VRML που εφαρμόζει το αρχείο, Τα αρχεία VRML αρχίζουν με τις παρακάτω γραμμές εξαρτάται από την έκδοση της προδιαγραφής VRML τους

Έκδοση 1,0: # VRML ν1,0 ascii

Έκδοση 1,1: # VRML ν1,1 υtf8

Έκδοση 2,0: # VRML ν2,0 υtf8

Παρατηρήσετε ότι αρχεία έκδοσης 1.0 χρησιμοποιούν τον πίνακα χαρακτήρων τύπου ASCII. Το «υtf8» στην πρώτη γραμμή της έκδοσης 1,1 και 2,0 σημαίνει ότι και τα δύο χρησιμοποιούν έναν διεθνή πίνακα χαρακτήρων, Μετά την πρώτη γραμμή όλες οι άλλες γραμμές που αρχίζουν με «#» είναι σχόλια.
 
 

5.2 ΠΡΩΤΟΓΕΝΗ ΣΧΗΜΑΤΑ

Το VRML συμπεριλαμβάνει τα παρακάτω βασικά σχήματα : σφαίρες, κώνους, κυλίνδρους και κύβους. Εξ ορισμού κεντράρονται όλα στην αρχή. Όλα μετατρέπονται από την τρέχουσα αθροιστική μετατροπή και σχεδιάζονται με τις τρέχουσες ύλες και υφάνσεις (textures).

5.2.1 Σφαίρα

Ο κόμβος της σφαίρας έχει ακτίνα ενός μέτρου εξ ορισμού, Όταν μία ύφανση εφαρμόζεται σε μία σφαίρα, η ύφανση καλύπτει ολόκληρη την επιφάνεια, τυλίγοντας αριστερόστροφα από το πίσω μέρος της σφαίρας με ένωση στο πίσω μέρος της Επίπεδης Επιφάνειας y,z.

Sphere {

radius radius # single float

}

5.2.2 Κώνος

Ένας κώνος μπορεί να έχει πλευρές, το κάτω μέρος ή και τα δύο, Κατά συνέπεια, το κάτω μέρος μπορεί να χρησιμοποιηθεί μόνο του για να σχηματίσει έναν γεμισμένο κύκλο. Ένας κώνος έχει εξ ορισμού κάτω ακτίνα ενός μέτρου και εξορισμού ύψος δύο μέτρων, Ο ορισμός του κώνου είναι στα μισά του ύψους κατά μήκος του κύριου άξονα, Όταν μία ύφανση εφαρμόζεται, τυλίγει αριστερόστροφα από το πίσω μέρος του κώνου. Για το κάτω μέρος, ένας κύκλος κόβεται από το τετράγωνο ύφανσης.

Cone {

bottomRadius radius # single float

height height # single float

parts parts # SIDES, BOTTOM, or ALL

}

5.2.3 Κύλινδρος

Ένας κύλινδρος είναι παρόμοιος με έναν κώνο, περιέχοντας πλευρές, το κάτω μέρος και το πάνω μέρος Όποιος συνδυασμός τους είναι πιθανός αν ενωθούν με κάθετες μπάρες και περικυκλωθούν με παρενθέσεις, όπως (πλευρές πάνω μέρος) Εξ ορισμού, ο κύλινδρος έχει μέγεθος -1 έως +1 σε όλες τις τρεις διαστάσεις και κεντράρεται γύρω από τον άξονα Υ.

Cylinder {

bottomRadius radius # single float

height height # single float

parts parts # ALL, SIDES, TOP, BOTTOM,

# (TOP|BOTTOM), ...

}

5.2.4 Κύβος

Ένας κύβος είναι δύο μέτρα σε κάθε διάσταση, από -1 έως +1 εξ ορισμού, Έχει μόνο πλάτος, ύψος και βάθος

Cube {

width width # single float

height height # single float

depth depth # single float

}

5.2.5 Παράδειγματα Βασικών Σχημάτων

Σε αυτό το σημείο ο αναγνώστης μάλλον διψάει για ένα παράδειγμα, Εξάλλου, πώς λειτουργούν στ' αλήθεια αυτοί οι εξ ορισμού τιμές: Εξετάστε την καταχώρηση 5.1 η οποία είναι παράδειγμα όλων των πρωτογενών σχημάτων σε μία σκηνή. Προσπάθησε να προσδιορίσεις πως θα φαίνεται το παράδειγμα όταν αποδοθεί. Μετά ρίξε μια ματιά στο αποτέλεσμα στο σχέδιο 5.1.

Listing 5.1
 

#VRML V1.0 ascii
# Basic Shapes Example
Separator {
    Separator {
        Cone { }                     # default radius of 1
    }                                # and default height of 2
    Separator {
        Transform {
            translation 0 2 0        # put on top of cone
        }
   Sphere { }                 # default radius of 1
    }
    Separator {
        Transform {
       translation 5 0 0      # move it right
       rotation 1 0 0 0.7854  # tip 45 degrees over X axis
   }
   Cylinder { }               # default dimensions of 2
    }
    Separator {
        Transform {
            translation -5 0 0       # move it left
            rotation 1 0 0 0.7854    # tip 45 degrees over X axis
        }
   Cube { }                   # default dimensions of 2
    }
}
 
 
 
 


 
 
 

5.3 ΜΕΤΑΣΧΗΜΑΤΙΣΜΟΙ

Σφραγίσματα, περιστροφή, και μετάφραση όλα μαζί λέγονται μετασχηματισμοί (transforms). Υπάρχουν πολλοί τρόποι να ορίσεις μετασχηματισμούς στο VRML.

5.3.1 Κόμβος Μετασχηματισμού

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

Transform {

translation 0 0 0 # three floats

rotation 0 0 1 0 # three floats & angle in radians

scaleFactor 1 1 1 # three floats

scaleOrientation 0 0 1 0 # three floats & angle in radians

center 0 0 0 # three floats

}

Τα πεδία δεν μπορούν να βρίσκονται στην λίστα σε κάθε εντολή αλλά μπορούν να εκτελεστούν πάντα σε ακόλουθες εντολές. (ΒeΙΙ VRML 1.0 Spec.).
 
 

Το πεδίο ((κέντρο)) ορίζει το σημείο γύρο από το οποίο το αντικείμενο προσαρμόζεται και περιστρέφεται, Το αντικείμενο πρώτα μετατοπίζεται ώστε η αρχή του είναι στο κεντρικό σημείο, Μετά περιστρέφεται σύμφωνα με τον προσανατολισμό της κλίμακας του 1 μετά προσαρμόζεται από τον συντελεστή κλίμακας του, και μετά περιστρέφεται πίσω. Αφού περιστραφεί ξανά από την τιμή περιστροφής, μετατοπίζεται πίσω στο αρχικό του κεντρικό σημείο και μετά μετατοπίζεται σύμφωνα με την με τη μετάφραση. (Matsuba 218)

5.3.2 Μετάφραση Περιστροφή, και Κόμβοι Σφραγίσματος

O κόμβος μετασχηματισμού παρέχει μία ((όλα σε ένα)) προσέγγιση, αλλά αν ο δημιουργός του εικονικού κόσμου χρειάζεται πιο πολύ έλεγχο, το VRML έχει κόμβους να κάνει τον κάθε μετασχηματισμό ως ξεχωριστό βήμα.

Translation { translation x y z }

Rotation { rotation x y z angle }

Scale { scaleFactor x y z }

Αυτά μπορούν να χρησιμοποιηθούν όσες φορές χρειάζεται και σε οποιαδήποτε σειρά. Ωστόσο, παρατηρήστε στο εξ ορισμού παράδειγμα μετασχηματισμού στο 5.3.1 ότι τα πεδία καταρτίζονται αντίστροφα στην σειρά με την οποία εφαρμόστηκαν, αν και δεν έχει καμία σημασία στην οποία βρίσκονται μέσα στον κόμβο μετασχηματισμού, Αυτό θα είναι σταθερό Μετασχηματισμοί οι οποίοι καταρτίζονται πριν ένα αντικείμενο δηλωθεί εφαρμόζονται σε αντίστροφη σειρά
 
 

Separator {

Scale { scaleFactor 3 2 1 }

Rotation { rotation 1 0 0 0.7854 }

Cube { }

}
 
 

Συνεπώς, θα περιέστρεφε τον κύβο 45 μοίρες (0.7854 ακτίνια) γύρω από τον άξονα γ, μετά θα τον τέντωνε με ένα συντελεστή του 3 στην χ κατεύθυνση και ένα συντελεστή Ζ στην κατεύθυνση Υ.

Ιεραρχία αντικειμένων και κληρονομικότητα παίζουν ζωτικό ρόλο στους μετασχηματισμούς, Όλοι οι μετασχηματισμοί εφαρμόζονται όχι μόνο σε ένα αντικείμενοι αλλά επίσης στα παιδιά του. Επίσης, όλοι οι μετασχηματισμοί εφαρμόζονται σε σχέση με τον γονέα (ρίζα) ενός αντικειμένου,

5.3.3 Μήτρα Κόμβου Μετασχηματισμού

Ο πίνακας κόμβου μετασχηματισμού ορίζει έναν τρισδιάστατο μετασχηματισμό με έναν πίνακα 4 επί 4 Αυτός ο κόμβος σπάνια χρησιμοποιείται και γενικά είναι μόνο χρήσιμο αν μετατρέπεις από άλλο στυλ. Το εξ ορισμού σχήμα για τον κόμβο είναι όπως παρακάτω:

MatrixTransform {

matrix 1 0 0 0 # 16 floats

0 1 0 0

0 0 1 0

0 0 0 1

}

5.4 ΚΕΙΜΕΝΟ

Αν και ο κατασκευαστής του εικονικού κόσμου μπορεί να απεικονίσει πολλά με τρισδιάστατα αντικείμενα, είναι καμιά φορά ανάγκη να χρησιμοποιήσει λίγα λόγια επίσης στο VRML 1.Ο αυτό μπορεί να επιτευχθεί με το κείμενο ASCII και τους κόμβους του στυλ γραμματοσειράς.

Παρατηρείστε ότι στο VRML 2.0 ο κόμβος κειμένου ASCII αντικαθίσταται από τον κόμβο κειμένου ώστε να υποστηρίξει διεθνούς χαρακτήρες ωστόσο, ο κόμβος κειμένου ASCII θα καλυφθεί συντόμως εδώ ώστε να προσαρμοστεί στην έμφαση του κεφαλαίου στο VRML 1.0. Επίσης θα χρειαστεί κάποιος χρόνος για πολλά προγράμματα ανάγνωσης VRML να είναι πλήρως συμβατά με την προδιαγραφή του VRML 2.Ο

5.4.1 Κόμβος Κειμένου ASCII

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

AsciiText {

string ["University","of","Arkansas",

"Computer Science Department"]

spacing 1.5 # single float

justification CENTER # LEFT, RIGHT, or CENTER

width 0 # multiple floats

# use 0 for natural width

}
 
 

Κάθε σειρά που περικυκλώνεται από διπλά εισαγωγικά τοποθετείται σε νέα γραμμή. Αν ήταν μόνο μία γραμμή τότε οι αγκύλες δεν θα ήταν αναγκαίες. Εξ ορισμού, γραμμές χαρακτήρων αποδίδονται με την αριστερή τους άκρη στο x=0, ΚΕΝΤΡΑΡΙΣΜΑ (center) χρησιμοποιείται για να κεντράρει όλες τις γραμμές στο x=0 ΔΕΞΙΑ (right) χρησιμοποιείται να τοποθετήσει το δεξή άκρο όλων των γραμμών στο x=0. Το πεδίο απόστασης προσδιορίζει την απόσταση γραμμών που χρησιμοποιείται και width (πλάτος) ορίζει ένα προτεινόμενο περιορισμό πλάτος για κάθε γραμμή.
 
 
 

Κοιτάξτε το αποτέλεσμα στο σχέδιο 5.2 .


 

FontStyle {

size size # single float

family family # SERIF, SANS, or TYPEWRITER

style style # BOLD, ITALIC, (BOLD|ITALIC),

# or NONE (default)

}
 
 

5.4.2 Κόμβος Στυλ Γραμματοσειράς

Αυτός ο κόμβος είναι σχετικά αυτονόητος. Απλά θυμηθείτε ότι εξαρτάται από το πρόγραμμα ανάγνωσης να ορίσει ειδικές γραμματοσειρές στις ορισμένες ιδιότητες και ότι το πεδίο μεγέθους (size) ορίζει το ύψος σε μέτρα!
 

5.5 ΣΗΜΕΙΑ, ΓΡΑΜΜΕΣ ΚΑΙ ΠΟΛΥΓΟΝΑ

Προφανώς, ώστε να κατασκευαστούν φανταστικοί εικονικοί κόσμοι πολύ παραπάνω από πρωτόγονα γεωμετρικά σχήματα και κείμενο χρειάζονται για να σώσουν την κατάσταση, έρχονται τα πολύγονα και τα πολυγωνικά πλέγματα.

5.5.1 Πολύγωνα

Το πρώτο βήμα στο να ορίζουμε πολύγονα είναι να καταρτίζουμε όλες τις συντεταγμένες κορυφής που θα χρησιμοποιούν. Αυτό γίνεται με τον κόμβο Συντεταγμένης3 (Coordinate3 node). Οι συντεταγμένες καταρτίζονται ως χ, y, z τριπλά που χωρίζονται από κόμμα όπως φαίνεται στην καταχώριση 5.2. Η σειρά με την οποία καταρτίζονται οι συντεταγμένες δεν έχει σημασία. Όταν χρησιμοποιούνται για να σχηματίσουν ένα πολύγονο ,οι δείκτες τους (indices) μέσα στην παράσταση ακίδων (point) χρησιμοποιούνται αντί για τις ίδιες τις συντεταγμένες. Ωστόσο, είναι πολύ πιο εύκολο να τις παρακολουθήσουμε αν είναι καταρτισμένες σε κάποια σταθερή σειρά.

Η καταχώριση 5.2 παρακάτω δημιουργεί ένα απλό σπίτι από ένα σετ συγκλινόντων πλευρών και ένα σετ προσόψεων.

Καταχώριση 5.2

#VRML V1.0 ascii
# Polygonal House Example
Separator {
    Coordinate3 {
        point [          # Point
              0 1.5 1,   #   0
              1 1 1,     #   1
              1 0 1,     #   2
              -1 0 1,    #   3
              -1 1 1,    #   4
              0 1.5 -1,  #   5
              1 1 -1,    #   6
              1 0 -1,    #   7
              -1 0 -1,   #   8
              -1 1 -1    #   9
              ]
    }
    IndexedFaceSet {
        coordIndex [
              0, 1, 2, 3,  4, -1,  # Front
              5, 9, 8, 7,  6, -1,  # Back
              1, 6, 7, 2, -1,      # Right side
              4, 3, 8, 9, -1,      # Left side
              0, 5, 6, 1, -1,      # Right roof
              0, 4, 9, 5, -1,      # Left roof
              2, 7, 8, 3, -1       # Bottom
              ]
    }
}
 
 
 

Ορίστε πως φαίνεται
 


Ο κόμβος των καταγραμμένων σετ προσόψεων (Indexed faced set node) αποθηκεύει τον κατάλογο προσόψεων το καθ' ένα ορίζεται από τους δείκτες των συγκλινόντων πλευρών και τερματίζεται από ένα –1. Σιγουρευτείτε ότι όλες οι συγκλίνουσες πλευρές μιας πρόσοψης είναι συνεπίπεδες (coplanar): αλλιώς το αντικείμενο θα φαίνεται πολύ περίεργο όταν κοιταχθεί από ορισμένες γωνίες.

5.5.2 Γραμμές

Οι γραμμές δημιουργούνται χρησιμοποιώντας τον κόμβο των καταγραμμένων σετ γραμμών (IndexedLineSet node). Η σύνταξη είναι ίδια με αυτήν για τον καταγραμμένων σετ προσόψεων (Indexed face set). Εδώ είναι το παράδειγμα με το σπίτι που δημιουργήθηκε με το καταγραμμένο σετ γραμμών (IndexedLineSet):
 


 

5.5.3 Σημεία

Ορισμένες φορές αυτό που χρειάζεται πραγματικά είναι απλώς ακίδες. Ο κόμβος σετ ακίδων (PointSet node) το πετυχαίνει αυτό χρησιμοποιώντας τις ακίδες που προσδιορίζονται στο σημείο συνάντησης των συγκλινόντων πλευρών της Συντεταγμένης3 (Coordinate3 vertex array). Τα εξ ορισμού πεδία και τιμές είναι όπως παρακάτω.

PointSet {

startIndex 0

numPoints -1

}

Το σετ ακίδων (PointSet) χρησιμοποιεί τις τρέχουσες συντεταγμένες με την σειρά, αρχίζοντας με τον πίνακα που ορίζεται το πεδίο start intex. Ο αριθμός ακίδων που πρέπει να χρησιμοποιηθεί ορίζεται στο πεδίο πυΠ7Ροίπεε. Μία τιμή του -1 εδώ, η προκαθορισμένη, δείχνει ότι όλες υπόλοιπες τιμές στο σημείο συνάντησης των συγκλινόντων πλευρών (vertex array) θα χρησιμοποιηθούν ως ακίδες.

5.5.4 ΟΡΙΣΜΟΣ ΚΑΙ ΧΡΗΣΗ (DEF & USE)

Ένας κόμβος στο VRML μπορεί να οριστεί μία φορά και να ξαναχρησιμοποιηθεί πολλές φορές, Αυτό λέγεται «επικειμενότητα» (instancing) ή «aliasing». Η λέξη κλειδί DEF ορίζει έναν κόμβο, αποδίδει όνομα σε έναν κόμβο και δημιουργεί μία και μόνο περίπτωση αυτού. Για παράδειγμα, να δημιουργήσεις μία δομή σφαίρας που μπορεί να ξαναχρησιμοποιηθεί και που λέγεται MyBall (η μπάλα μου):
 
 

DEF MyBall Sphere { }

Μετά το MyBall μπορεί να ξαναχρησιμοποιηθεί αφού μεταφερθεί σε διαφορετική τοποθεσία κατ' αυτόν τον τρόπο:
 
 

Translation { translation 4 0 0 }

USE MyBall

Είναι πολύ πιο εύκολο να ορίσεις τις στήλες στο κτήριο που απεικονίζεται στο σχήμα 5.5 ορίζοντας μία στήλη και ξαναχρησιμοποιώντας το αντί να ορίζεις κάθε μία ξεχωριστά. Αυτή είναι επίσης μία πολύ αποτελεσματική τακτική στο να μειώνουμε τα μεγέθη των αρχείων VRML.
 


 

Η πλάκα που εξέχει από το κτίριο πάνω και κάτω από τις κολώνες μπορεί επίσης να οριστεί μία φορά και να ξαναχρησιμοποιηθεί και μεταφραστεί. Εξετάστε στην καταχώριση 5.3 πως δημιουργούνται οι κολώνες και οι πλάκες.

Καταχώριση 5.3
 
 

#VRML V1.0 ascii
# VRML meets Greek Architecture
# Coded by hand!
Separator {
    Separator {         # Make body of building with cube
        Translation {
            translation 0 4 -8
        }
        Cube {
            width  12.5
            depth  16
            height 8
        }
    }

    Separator {         # Define slab under pillars
        Translation { translation 0 0.1875 3 }
        DEF Slab Cube {
                width 12.5
                depth  6
                height 0.375
        }
        Translation { translation 0 7.625 0 }
        USE Slab        # Reuse slab and put over pillars
    }

    Separator {         # Define one pillar and reuse it
        Translation { translation -5.75 4 5.5 } # Pillar 1
        DEF Pillar Cylinder {
                       parts SIDES
                       radius 0.5
                       height 7.25
        }
        Translation { translation 2.3 0 0 }     # Pillar 2
        USE Pillar
        Translation { translation 2.3 0 0 }     # Pillar 3
        USE Pillar
        Translation { translation 2.3 0 0 }     # Pillar 4
        USE Pillar
        Translation { translation 2.3 0 0 }     # Pillar 5
        USE Pillar
        Translation { translation 2.3 0 0 }     # Pillar 6
        USE Pillar
    }

    Coordinate3 {
        point [             # Index       Description
            -30 0 40,       #   0    Front left ground plane point
            -30 0 -40,      #   1    Back left ground plane point
            30 0 -40,       #   2    Back right ground plane point
            30 0 40,        #   3    Front right ground plane point
            0 10.75 6,      #   4    Front top roof point
            6.25 8 6,       #   5    Front right roof point
            -6.25 8 6,      #   6    Front left roof point
            0 10.75 -16,    #   7    Back top roof point
            -6.25 8 -16,    #   8    Back left roof point
            6.25 8 -16      #   9    Back right roof point

        ]
    }
    IndexedFaceSet {
        coordIndex [
            0, 1, 2, 3, -1,  # Ground plane
            4, 5, 6, -1,     # Front gable
            7, 8, 9, -1,     # Back gable
            7, 9, 5, 4, -1,  # Right-side roof
            7, 4, 6, 8, -1   # Left-side roof
        ]
    }
}
 
 
 
 
 

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

Δύο από τους πιο σημαντικούς κόμβους στην VRML είναι οι κόμβοι WWW εσωτερικός και WWW άγκυρας. Ο πρώτος επιτρέπει στον κόσμο να ενσωματώνει αντικείμενα από άλλα πλέγματα οικοπέδων. Ο δεύτερος επιτρέπει στο περιβάλλον να συνδέεται με VRML περιβάλλοντα ένα τηλελιμάνι, ή να συνδέεται με HTML τεκμήρια μία υπερσύνδεση.

5.6.1 Εσωτερικές γραμμές
 

Ο εσωτερικός κόσμος WWW έχει πολλά πλεονεκτήματα γιατί επιτρέπει αντικείμενα από το πουθενά στο πλέγμα να χρησιμοποιηθούν σε ένα VRML κόσμο. Επίσης ένας παγκόσμιος συγγραφέας μπορεί να επωφεληθεί γιατί τοποθετώντας τα δικά του αντικείμενα σε ατομικά αρχεία και χρησιμοποιώντας τις εσωτερικές γραμμές WWW μπορεί να τα τοποθετήσει σε ένα μοναδικό περιβάλλον. Με αυτόν τον τρόπο, ο συγγραφέας μπορεί εύκολα να τα χρησιμοποιήσει ξανά.

Η VRML1.0 προδιαγραφή λέει : Η WWW εσωτερική γραμμή διαβάζει τα παιδιά της οπουδήποτε μέσα στο διεθνές διευρημένο πλέγμα. Ακριβώς όταν τα παιδιά της διαβάζονται δεν ορίζεται. (Βell et.al. ,VRML 1.0 Spec). Επειδή σχεδόν όλοι διαβάζοντας στα πεταχτά πρώτα προσφέρουν την τωρινή σκηνή και μετά φορτώνουν και προσφέρουν αρχεία που είναι γραμμένα στον κατάλογο σαν WWW εσωτερικές γραμμές , μία καθυστέρηση στην προσφορά αυτών των αντικειμένων είναι αναμενόμενη. Αυτή η καθυστέρηση εξηγείτε στο σχέδιο του κόμβου :

WWWInline {

name ΄΄ URL here ΄΄

bboxSize 0 0 0

bboxCenter 0 0 0

}
 
 

Το όνομα βάζει στον κατάλογο τον URL του κόμβου σε εισαγωγικά. Οι τομείς bboxsize και bboxCenter καθορίζουν ένα φανταστικό κύβο ο οποίος σκιαγραφεί που το αντικείμενο θα εμφανιστεί αφού φορτωθεί . Παρ’ όλο που είναι προαιρετικά αυτοί οι δύο τομείς πρέπει πάντοτε να χρησιμοποιούνται. Τα πιο δημοφιλοί σκιαγραφούν το οριοθετημένο κουτί μέχρι το μοντέλο να προσφερθεί. Αυτό επιτρέπει στους χρήστεςνα αρχίσουν να επικοινωνούν με το περιβάλλον προτού φορτωθεί οτιδήποτε.

5.6.2 Υπερσυνδέσεις και τηλελιμάνια

Ο κόμβος WWW άγκυρα είναι εξίσου σημαντικός όσο και WWW εσωτερικός . Λειτουργεί σαν ένας HTML σύνδεσμος. Το σχέδιο του κόμβου WWW άγκυρας είναι όπως ακολουθεί :
 
 

WWWAnchor {

name ΄΄ URL here ΄΄

description ΄΄ ΄΄

map NONE # or POINT

}
 
 

Ο τομέας όνομα προσδιορίζει το URL μονοπάτι του αρχείου που συνδέεται και ο τομέας περιγραφή παρέχει κείμενο για να αναγνωρίσει τον σύνδεσμο. Ένας καλός χειριστής θα εμφανίσει στην οθόνη την περιγραφή αντί για το URL (ή ακόμα καλύτερα και τα δύο) όταν το ποντίκι δρομέας είναι πάνω στο αντικείμενο άγκυρα. Ένα ή περισσότερα αντικείμενα είναι δηλωμένα σαν αντικείμενα άγκυρα περικλείωντάς τα με τον κόμβο WWW άγκυρα. Επομένως ,αν μία σφαίρα θα γινόταν η άγκυρα σε ένα VRML μοντέλο της Γης , η σφαίρα θα οριζόταν ανάμεσα στον τελευταίο τομέα της WWW άγκυρας και στο κλειστό της κατσαρό στήλωμα.

Ο τομέας χάρτης μεταφέρει εικόνες χαρτών από το HTML και τα δημοσιεύει στο VRML . Αν ο τομέας χάρτης τοποθετηθεί σε ένα ΣΗΜΕΙΟ , τότε όταν διαλέξουμε το αντικείμενο άγκυρα τα συνεργαζόμενα σημεία του αντικειμένου προηγούνται με ένα ερωτηματικό και πηγαίνουν στο τέλος του URL να τοποθετηθούν στον βοηθό. Από αυτό το σημείο, ένα χειρόγραφο είναι απαραίτητο να μεταφράσει τα συντονισμένα και να τροποποιήσει το περιεχόμενο του εισερχόμενου αρχείου.
 
 

ΚΕΦΑΛΑΙΟ 6

Προσθέτοντας ρεαλισμό στις VRML σκηνές

Τώρα που ο αναγνώστης είναι ειδικός στο να δημιουργεί κόσμους στο VRML ,είναι καιρός να προσθέσουμε ‘πραγματικότητα’ στην ‘ουσιαστική πραγματικότητα’. Αυτό το κεφάλαιο καλύπτει επιπρόσθετες ελαφρές πηγές, θέσεις φωτογραφικής μηχανής, συστάσεις και ιδιότητες υλικού στις VRML σκηνές.

6.1  ΦΩΤΟΓΡΑΦΙΚΕΣ ΜΗΧΑΝΕΣ και ΦΩΤΙΣΜΟΣ
 

VRML είναι ένα μέτρο αλλά όλοι οι VRML browsers είναι διαφορετικοί. Ένα εμπόριο πάντα υπάρχει ανάμεσα στην ταχύτητα και στον ρεαλισμό, ειδικά όταν προσθέτει φως στις VRML σκηνές. Πολλές αποδοτικές μηχανές δεν εκπληρούν όλα τα διαθέσιμα χαρακτηριστικά φωτισμού. Αυτός ο τομέας μεταφέρει τα χαρακτηριστικά που θα διευκολύνουν και τους υπόλοιπους χρήστες να δουν τους πραγματικούς κόσμους του αναγνώστη και τα χαρακτηριστικά που δεν θα διευκολύνουν.

6.1.2 Φώτα κατεύθυνσης

Οι ακτίνες της κατευθυντήριας πηγής όλες προέρχονται από την ίδια κατεύθυνση και είναι παράλληλες σαν αυτές από τον ήλιο. Εάν μία επιφάνεια είναι κανονική ως προς τις ακτίνες του φωτός τότε είναι αρκετά φωτισμένη . Όσο πιο λοξή είναι η επιφάνεια προς τις ακτίνες του φωτός , τόσο πιο λίγος είναι ο φωτισμός της. Το κατευθυντήριο φως δημιουργείται από τον κόμβο του κατευθυντήριου φωτός:
 
 

DirectionalLight {

on TRUE # default values listed

intensity 1

color 1 1 1

direction 0 0 -1

}
 
 

Ο τομέας on είναι ένα παράδειγμα του τι να μην χρησιμοποιηθεί μέσα σε έναν VRML 1.0 κόσμο. Επομένως , γιατί να δημιουργήσουμε ένα φως που δεν λειτουργεί; Δεν υπάρχει λόγος να γίνει με το VRML 1.0 .Παρ’όλα αυτά , αρχίζοντας με το VRML 2.0 και με την προσθήκη της συμπεριφοράς, ο δημιουργός του κόσμου ίσως θέλει να ανάβει και να σβήνει τα φώτα. Σε αυτήν την περίπτωση ο τομέας on δίνει την αρχική κατάσταση του φωτός. Επίσης αποφεύγει να βασίζεται στον τομέα χρώμα επειδή πολλοί λίγοι υποστηρίζουν το φως με χρώμα άλλο από άσπρο. Απλά αφήστε το σαν έλλειψη του άσπρου.
 

ΕΙΚΟΝΑ 6.1 Κατευθηντήριο φως πάνω σε κόκκινες , πράσινες
και μπλε μπάλες. Παρατηρείστε την έλλειψη της σκιάς από την μία
μπάλα στην άλλη.

Ένα σημαντικό στοιχείο να θυμάσαι όταν προσπαθείς να δημιουργήσεις αυτή την άμεμπτη πραγματική σκηνή είναι ότι οι περισσότεροι VRML browsers ,δεν χειρίζονται σκιές ,τουλάχιστον όχι ακόμα. Στην εικόνα 6.1 και οι τρεις μπάλλες είναι σε απόλυτη γραμμή και το κατευθυντήριο φως είναι παράλληλο σε αυτήν την γραμμή. Γι αυτόν τον λόγο οι σκιές κανονικά θα υπήρχαν στη δεύτερη και στην τρίτη μπάλλα αλλά απουσιάζουν. Αυτός δεν είναι περιορισμός στις περισσότερες εφαρμογές του VRML αλλά αξίζει να το θυμόμαστε.

Τώρα εξετάστε τον κώδικα στην εικόνα 6.1 στην ταξινόμηση του 6.1 και δώστε ιδιαίτερη προσοχή στον ‘ τομέα της φωτογραφικής μηχανής’. Οι φωτογραφικές μηχανές θα εξετασθούν αργότερα.
 

Listing 6.1
 

#VRML V1.0 ascii
# Directional Light on Red, Green, and Blue Balls
Separator
{
    DirectionalLight {                       # Define directional light
        intensity 1                          # Both of these value are
        direction 0 0 -1                     # defaults but listed for
    }                                        # demonstration

    Separator {                              # Camera Section
        Transform {
            translation 8 0 -4.5             # Move to side of balls
            rotation    0 1 0 1.5708         # Rotate Y axis 90 degrees
        }
        PerspectiveCamera { }                # Define camera
    }

    Material { diffuseColor 1 0 0 }          # Set material to red
    DEF Ball Sphere {
                 radius 2                    # Make red ball at origin
    }

    Translation { translation 0 0 -4.5 }     # Move back along Z axis
    Material { diffuseColor 0 1 0 }          # Set material to green
    USE Ball                                 # Make green ball

    Translation { translation 0 0 -4.5 }     # Move back along Z axis
    Material { diffuseColor 0 0 1 }          # Set material to blue
    USE Ball                                 # Make blue ball
}
 
 
 

6.1.2 Φώτα σημείων
 

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

PointLight {

on TRUE # default values given

intensity 1

color 1 1 1

location 0 0 1

}

6.1.3 Προβολείς
 

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

SpotLight {

on TRUE # default values given

intensity 1

color 1 1 1

location 0 0 1

direction 0 0 -1

dropOffRate 0

cutOffAngle 0.785398

}
 
 

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

6.1.4 Φωτογραφικές μηχανές
 

Η φωτογραφική μηχανή σ’ ένα VRML κόσμο ορίζει την αρχική άποψη του χρήστη. Χωρίς φωτογραφική μηχανή είναι στην κρίση αυτού που διαβάζει στα πεταχτά να αποφασίσει για το πως ο χρήστης βλέπει τον πραγματικό κόσμο. Πιο αυθαίρετα διάλεξε μία θέση βασιζόμενη στις διαστάσεις του κόσμου. Αυτό είναι συνήθως κάπου στο Υ=0 . Σ’ αυτήν την περίπτωση ο χρήστης τα βλέπει όλα από το επίπεδο εδάφους. Αν μία σκηνή περιέχει ένα δωμάτιο σε Υ=0 τότε το πάτωμα είναι αρχικά αόρατο στον χρήστη. Τοποθετώντας μία φωτογραφική μηχανή σε μία ακριβή θέση και κατεύθυνση, ο συγγραφέας του κόσμου μπορεί να ελέγχει που ο χρήστης αρχίζει αλλά η φωτογραφική μηχανή δεν περιορίζει την ελευθερία κίνησης του χρήστη.

Τα VRML αρχεία μπορεί να έχουν πολλαπλές φωτογραφικές μηχανές. Κανονικά η πρώτη κάμερα καθορισμένη σε ένα αρχείο είναι εκείνη η οποία τοποθετεί την αρχική άποψη του χρήστη. Οι άλλες κάμερες μπορεί επίσης να είναι σημεία εισόδου στον πραγματικό κόσμο εάν τους έχει δοθεί ένα όνομα χρησιμοποιώντας παραμόρφωση. Ένα VRML αρχείο μπορεί να αναφέρεται με ένα URL το οποίο έχει το όνομα της κάμερας στο τέλος του. Επομένως τα πολλαπλά σημεία εισόδου μπορεί να προσπελαστούν με URL από ένα HTML τεκμήριο, άλλο VRML κόσμο ή διαμέσου του VRML κόσμου ο οποίος περιλαμβάνει την κάμερα τοποθετώντας αντικείμενα δίπλα στις θέσεις της κάμερας ώστε ο χρήστης να πηγαίνει σε όλο τον κόσμο πηγαίνοντας από την μία κάμερα στην επόμενη.
 
 

Μία κάμερα καθορίζεται με τον κόμβο προοπτικής της κάμερας ο οποίος ορίζει μία προβολή από την άποψη. Οι ελλείψεις από τον κόμβο είναι οι εξής :

PerspectiveCamera {

position 0 0 1

orientation 0 0 1 0

focalDistance 5

heightAngle 0.785398

}
 
 

Η εστιακή απόσταση είναι η απόσταση από την κάμερα. Κατά μήκος του άξονα θέας στο σημείο της εστίασης. Οι περισσότεροι περιστρέφονται γύρω από αυτό το σημείο όταν είναι σε κατάσταση παρακολούθησης από τον εξεταστή. Η γωνία ύψους είναι η εξεταζόμενη γωνία σε ακτινοβολία. Η οριζόντια εξεταζόμενη γωνία είναι υπολογισμένη σε σχέση με την αναλογία από το παράθυρο της οθόνης. Γενικά είναι καλύτερα να αφήνουμε όλα τα επίπεδα της μηχανής στις ελλείψεις τους. Η θέση και η περιστροφή της χρησιμοποιούμενης κάμερας αντιστοιχούν στα πεδία του κόμβου μετασχηματισμού, όπως είδαμε στο Listing 6.1 παραπάνω.

6.2 ΥΛΙΚΑ
 

Τίποτα δεν προσθέτει περισσότερο ρεαλισμό σε μία ουσιαστική πραγματικότητα του κόσμου από τις προσεχτικά επιλεγμένες ιδιότητες του υλικού για όλα τα αντικείμενα. Η VRML 1.0 επιτρέπει σε κάθε αντικείμενο, ή σε κάθε πρόσωπο όπως θα το δούμε παρακάτω, να έχει ένα μοναδικό χρώμα, διάχυτο χρώμα, απεσταλμένο χρώμα , φωτεινότητα και διαφάνεια.
6.2.1 Ο κόμβος υλικού
 

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

Material {

ambientColor 0.2 0.2 0.2 # R G B

diffuseColor 0.8 0.8 0.8 # R G B

specularColor 0 0 0 # R G B

emmissiveColor 0 0 0 # R G B

shininess 0.2 # 0 to 1

transparency 0 # 0 to 1

}

Όλα τα συστατικά χρώματος πρέπει να είναι γνωστά στον αναγνώστη. Αντανάκλαση δεν τίθεται σε εφαρμογή από όλους που διαβάζουν πεταχτά και από αυτούς που δεν υποστηρίζουν ξεχωριστά συστατικά χρώματος για την αντανάκλαση (Matsuba 311). Είναι καλύτερο να το αφήσουμε στην αξία της έλλειψης. Το χρώμα που εκπέμπεται επιτρέπει στο αντικείμενο να εμφανίζεται σαν να χάνει το χρώμα του. Εν τούτοις αυτή η εκπομπή δεν επηρεάζει άλλα αντικείμενα. Η διαφάνεια επιτρέπει στον θεατή να δει διαμέσου αντικειμένων. Στο σχήμα 6.2 κάτω , η κίτρινη μπάλα φαίνεται μέσα από την μπλε μπάλα η οποία έχει αξία διαφάνειας 0.8.
 

ΕΙΚΟΝΑ 6.2 Παράδειγμα διαφάνειας


Εξετάστε πως κατασκευάστηκε η Fig 6.2 :

Listing 6.2

#VRML V1.0 ascii
# Trasparent sphere example
Separator {

    Material {
        diffuseColor  1 1 0
        specularColor .5 .5 .5
        shininess  1
    }
    Sphere { }

    Material {
        diffuseColor 0 0 1
        transparency .8
    }
    Transform { translation 5 0 0 }
    Sphere { }
}
 
 
 
 
 
 

6.2.2 Δεσμευτικά πολλαπλά υλικά

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

Material {

diffuseColor [1 1 0, 0 1 1 ,1 0 1 ]

shininess [ .9, .6, .3 ]
 
 
 
 

Καθένας από τους τομείς είναι ένας τομέας πολλαπλής αξίας. Τρία υλικά ορίζονται , το καθένα με το δικό του χρώμα και την δική του διαφάνεια.

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

#VRML V1.0 ascii

Separator {

Material {

diffuseColor [1 0 0,0 1 0, 0 0 1]

specularColor [0 0 0,.2 .2 .2,.4 .4 .4 ]

}

MaterialBinding { value PER_PART }

Cylinder { }

}

Το πρώτο χρώμα και τα συστατικά της θεωρητικής αντανάκλασης χρησιμοποιούνται για τις πλευρές, ώστε οι πλευρές να είναι κόκκινες. Η κορυφή και ο πάτος είναι πράσινο και μπλε με θεωρητικά συστατικά του (.2,.2,.2) και (.4,.4,.4) αντίστοιχα. Ο τομέας της αξίας του δεσμευτικού υλικού λέει ότι χρησιμοποιούμε ένα υλικό σε εναλλαγή αρχίζοντας από το πρώτο για κάθε μέρος από τα παρακάτω αντικείμενα. Άλλες επιλογές είναι οι εξής :
 

DEFAULT                                                 Use default binding for shape
OVERALL                                                 Whole object uses first material
PER_PART                                                One material for each part of object
PER_PART_INDEXED                            One material for each part, indexed
PER_FACE                                                One material for each face of object
PER_FACE_INDEXED                            One material for each face, indexed
PER_VERTEX                                          One material for each vertex of object
PER_VERTEX_INDEXED                      One material for each vertex, indexed
 
 

Το IntexedFaceSets μπορεί να δώσει υλικά όπως ο παραπάνω κύλινδρος χρησιμοποιώντας PER_FACE σαν τον τομέα αξίας. Εν τούτοις , ο καλύτερος τρόπος να ελέγχουμε ποιο υλικό χρησιμοποιείται σε κάθε πρόσωπο είναι η χρησιμοποίηση του PER_FACE _INDEXED μαζί με materialIndex πεδίο του κόμβου IntexedFaceSet. Αυτό επιτρέπει υλικά να χρησιμοποιηθούν πολλές φορές και σε κάθε σειρά. Αυτή είναι η μέθοδος που ο κατάλογος 6.3 χρησιμοποιεί για να χρωματίσει πέντε πρόσωπα μιας πυραμίδας με τρία μόνο υλικά.
 

Listing 6.3
 

#VRML V1.0 ascii
# Color-faced Pyramid
Separator {
    Material {
        diffuseColor [ 1 .5 .3, 1 .7 .5, .6 .6 .6 ]
        shininess [ .6, .6, 0 ]
    }
    MaterialBinding { value PER_FACE_INDEXED }
    Coordinate3 {
        point [
              1 0 -1,
              1 0 1,
              -1 0 1,
              -1 0 -1,
              0 1 0
              ]
    }
    IndexedFaceSet {
        coordIndex [
              0, 1, 2, 3, -1,
              0, 1, 4, -1,
              1, 2, 4, -1,
              2, 3, 4, -1,
              3, 0, 4, -1
        ]
        materialIndex [ 2, 0, 1, 1, 0 ]
    }
}
 
 


Το παραπάνω καταλήγει σε μία πυραμίδα με γκρι πάτο, δυο πλευρές με το χρώμα της άμμου και δυο πλευρές με συνδυασμό του χρώματος της άμμου και με το κόκκινο, όπως φαίνεται στο σχήμα 6.3 παρακάτω :
 

6.3  ΣΥΣΤΑΣΕΙΣ (ΥΦΑΝΣΗ)
 

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

6.3.1 Ο κόμβος ύφανσης 2
 

Ένας χάρτης ύφανσης διατηρείται μέσα σε ένα αρχείο εικόνας και μπορεί να φορτωθεί από οπουδήποτε στο Internet με τον κόμβο ύφανσης 2 :
 
 

Texture2 {

filename URL

wrapS REPEAT # or CLAMP

wrapT REPEAT # or CLAMP

}
 
 

Το URL πρέπει να δείχνει στο JPEG ή PNG αρχείο. Η JPEG συμβατότητα από εκείνους που διαβάζουν πεταχτά αποκτείται με τον προσδιορισμό VRML 1.0 .Η PNG συμβατότητα ενθαρρύνεται πολύ αλλά ο τύπος κοινής GIF εικόνας αρχείου δεν συνιστάται εξαιτίας περιορισμών. Η JPEG είναι αρκετά γνωστή και έτσι θα πρέπει να είναι σε αντίθεση με την PNG που μάλλον δεν είναι. Η PNG είναι ένας τύπος και περιέχει ένα κανάλι Άλφα το οποίο επιτρέπει σε κάθε pixel να έχει μία αξία διαφάνειας.

Οι συντεταγμένες ύφανσης κυμαίνονται από 0 σε 1 κατά μήκος της σύστασης S και T αναλογούν στις οριζόντιες και κάθετες συντεταγμένες αντίστοιχα. Οι τομείς wrapS και wrapT μπορεί να τοποθετηθούν στο CLAMP ή στην έλλειψη REPEAT. Το REPEAT σκεπάζει την ύφανση έξω από την 0 σε 1 αναλογία συντεταγμένης ύφανσης. Το CLAMP σφίγγει τις συντεταγμένες ύφανσης να κυμαίνονται σε αναλογία 0-1.

6.3.2 Εφαρμόζοντας υφάνσεις

Η VRML 1.0 επιτρέπει μόνο μία ύφανση για κάθε αντικείμενο. Ο μόνος τρόπος για να εφαρμόσουμε διαφορετικές υφάνσεις σε ξεχωριστά πρόσωπα ενός αντικειμένου είναι να κατασκευάσουμε το αντικείμενο έξω από το IntexedFaceSets και να χρησιμοποιήσουμε ένα διαφορετικό χάρτη για το καθένα. Όπως με τόσα άλλα πράγματα στο VRML , η κληρονομιά ισχύει και για την ύφανση επίσης. Αφού μία ύφανση έχει ορισθεί θα χρησιμοποιηθεί για όλα τα άλλα αντικείμενα κάτω στην ιεραρχία μέχρι την στιγμή όπου άλλη μία ύφανση οριστεί. Για να σβήσουμε μία ύφανση χρησιμοποιούμε ένα κόμβο ύφανσης 2 με ένα όνομα αρχείου «».

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

TextureCoordinate2 { point [ 0 0, .5 1, 1 0 ] }
 
 

Χρησιμοποιώντας το παραπάνω παράδειγμα , ένα πρόσωπο μπορεί να χρησιμοποιήσει τις συντεταγμένες του χάρτη σε καταχωρήσεις 0,1 και 2 της παράταξης του σημείου. Παρατήρησε ότι αυτές οι συντεταγμένες κόβουν ένα τρίγωνο από τον χάρτη. Οι συντεταγμένες σχετίζονται με συγκεκριμένες κορυφές του προσώπου :
 
 

Texture2 { filename "test.jpg" }

TextureCoordinate2 { point [ 0 0, .5 1, 1 0] }

Coordinate3 { point [ vertices here ] }

IndexedFaceSet {

coordIndex [

one face of three vertices defined here

]

textureCoordIndex [

0, 1, 2, -1

]

}
 
 

Με αυτόν τον τρόπο ,η πρώτη κορυφή του προσώπου έχει συντεταγμένες (0,0), η δεύτερη (0,5,1) και η τρίτη (1,0).

Οι υφάνσεις μπορούν επίσης να μεταμορφωθούν χρησιμοποιώντας τον κόμβο μεταμόρφωσης ύφανσης 2. Είναι σαν δύο εκδοχές. Οι ελλείψεις για αυτό είναι οι παρακάτω :

Texture2Transform {

translation 0 0

rotation 0

scaleFactor 1 1

center 0 0

}
 
 

Το πιο σημαντικό μέρος του κόμβου μεταμόρφωσης ύφανσης 2 είναι ο παράγοντας σκάλα (scale).

Για να καταλάβουμε πραγματικά πως όλα αυτά γίνονται , χρειαζόμαστε ένα παράδειγμα. Στο σχήμα 6.4 προσθέτεται όλος ο αναγκαίος ρεαλισμός στην κατασκευή ενός Ελληνικού κτιρίου απ’ ότι στο σχήμα 5.3. Αυτό προσθέτει γρασίδι στο γενικό διάγραμμα του χάρτη υφάνσεως και επιστρώνει το κτίριο με ένα γκρίζο μάρμαρο σαν επιφάνεια.
 

Listing 6.4

#VRML V1.0 ascii
# VRML meets Greek Architecture
# By Terry Smith
# Coded by hand!
Separator {
    DirectionalLight {
        intensity 1
        direction -1 -1 -1
    }
    DirectionalLight {
        intensity 1
        direction 1 -1 1
    }

    Separator {
        Transform {
            translation -15 4.5 24
            rotation    0 -1 0 0.5235 # Rotate 30 degrees
        }
        PerspectiveCamera { }
    }

    # Use marble-like texture for building
    Texture2 { filename "grey-st1.jpg" }
    TextureCoordinate2 { point [ 0 0, 1 0, 1 1, 0 1] }
    Texture2Transform { scaleFactor 40 40 }

    # If browser can not texture map, use white
    Material { diffuseColor 1 1 1 }

    Separator {         # Make body of building with cube
       Translation {
            translation 0 4 -8
        }
        Cube {
            width  12.5
            depth  16
            height 8
        }
    }

    Separator {         # Define slab under pillars
        Translation { translation 0 0.1875 3 }
        DEF Slab Cube {
                width 12.5
                depth  6
                height 0.375
        }
        Translation { translation 0 7.625 0 }
        USE Slab        # Reuse slab and put over pillars
    }

    Separator {         # Define one pillar and reuse it
        Translation { translation -5.75 4 5.5 } # Pillar 1
        DEF Pillar Cylinder {
                       parts SIDES
                       radius 0.5
                       height 7.25
        }
        Translation { translation 2.3 0 0 }     # Pillar 2
        USE Pillar
        Translation { translation 2.3 0 0 }     # Pillar 3
        USE Pillar
        Translation { translation 2.3 0 0 }     # Pillar 4
        USE Pillar
        Translation { translation 2.3 0 0 }     # Pillar 5
        USE Pillar
        Translation { translation 2.3 0 0 }     # Pillar 6
        USE Pillar
    }

    Coordinate3 {
        point [             # Index       Description
            -30 0 40,       #   0    Front left ground plane point
            -30 0 -40,      #   1    Back left ground plane point
            30 0 -40,       #   2    Back right ground plane point
            30 0 40,        #   3    Front right ground plane point
            0 10.75 6,      #   4    Front top roof point
            6.25 8 6,       #   5    Front right roof point
            -6.25 8 6,      #   6    Front left roof point
            0 10.75 -16,    #   7    Back top roof point
            -6.25 8 -16,    #   8    Back left roof point
            6.25 8 -16      #   9    Back right roof point

        ]
    }
    IndexedFaceSet {
        coordIndex [
            4, 5, 6, -1,     # Front gable
            7, 8, 9, -1,     # Back gable
            7, 9, 5, 4, -1,  # Right-side roof
            7, 4, 6, 8, -1   # Left-side roof
        ]
        textureCoordIndex [
            0, 1, 2, 3, -1,
            0, 1, 2, 3, -1,
            0, 1, 2, 3, -1,
            0, 1, 2, 3, -1
        ]
    }

    # Use grass texture map for ground plane
    Texture2 { filename "grass.jpg" }
    TextureCoordinate2 { point [ 0 0, 1 0, 1 1, 0 1] }
    Texture2Transform { scaleFactor 25 25 }

    # Use greenish color if browser can not texture map
    Material { diffuseColor 0 .5 .1 }

    IndexedFaceSet {
        coordIndex [
            0, 1, 2, 3, -1,  # Ground plane
        ]
        textureCoordIndex [
            0, 1, 2, 3, -1
        ]
    }
}
 

ΕΙΚΟΝΑ 6.4 Δείχνει τα αποτελέσματα χάρτη υφάνσεως του κόσμου της VRML .
 

Σχήμα 6.4 Σχήμα σε χάρτη ύφανσης πάνω σε γρασίδι χάρτη ύφανσης.


 

ΚΕΦΑΛΑΙΟ 7

ΒΕΛΤΙΩΝΟΝΤΑΣ ΤΗΝ VRML

Αυτό που απωθεί έναν χρήστη είναι ένας αργοκίνητος κόσμος που σέρνεται μέσα από τον βασικό πετρελαιοαγωγό ή ένας ο οποίος φορτώνεται από λεπτό σε λεπτό. Η ευχαριστία της VRML επίδρασης χάνεται και ο χρήστης θυμάται τον κόσμο μόνο σαν κάτι το οποίο δεν θέλει να γυρίσει. Αυτό το κεφάλαιο αποκαλύπτει μερικές τεχνικές για να μετατρέψει τον ληθαργικό VRML κόσμο σε ένα γρήγορο περιβάλλον που οι χρήστες επθυμούν.

7.1   ΜΕΙΩΝΟΝΤΑΣ ΤΑ ΜΕΓΕΘΗ ΤΩΝ ΑΡΧΕΙΩΝ

Οι τυπικοί VRML κόσμοι μπορεί να συσσωρεύουν τεράστια μεγέθη αρχείων. Μία λύση είναι να συμπυκνώσουμε έγγραφα χρησιμοποιώντας τον αλγόριθμο GZIP. Ένα αρχείο θα μοιάζει σαν σπίτι και εξαρτάται από αυτόν που διαβάζει πεταχτά για το αν θα ξεσυμπυκνώσει το αρχείο καθώς το λαμβάνει. Μειώσεις αρχείων περίπου 30 εκατοστών είναι συνηθισμένες (Stanec 614).

Χειρόγραφα μείωσης διαφόρων δεδομένων έχουν εμφανιστεί για να περιποιούνται τα μεγέθη των αρχείων πριν την συμπύκνωση. Η πιο συνηθισμένη μέθοδος είναι γνωστή με το όνομα datafat munging , μεταφέροντας τον αριθμό των δεκαδικών μερών σε αξίες. Αυτή η μέθοδος λύνει ένα μεγάλο πρόβλημα γιατί όταν η απόδοση πακέτων CAD σε 3-D μετατρέπεται σε VRML συνήθως περιλαμβάνει 6 ή 7 σημαντικά ψηφία ακριβείας και δημιουργεί τεράστια αρχεία. Οι αξίες με 7 ή 8 σημαντικά ψηφία μπορούν να κόψουν το μέγεθος του αρχείου κατά 50% ή περισσότερο( Pesce 330). Ο James Waldrop έχει μειώσει ένα αρχείο από 2.3 Μ σε 570 K (Stanec 613)

Μπορούμε να περιποιηθούμε το μέγεθος των αρχείων μειώνοντας τον αριθμό των αντικειμένων δηλωμένων μέσα στο VRML αρχείο χωρία να εγκαταλείψουμε τον αρχικό αριθμό αντικειμένων μέσα στον κόσμο. Αυτό το θαύμα επιτυγχάνεται με τους κόμβους DEF και USE . Με απλά λόγια αυτοί οι κόσμοι επιτρέπουν σ’ ένα αντικείμενο να ορισθεί σε μία θέση και να χρησιμοποιηθεί σε άλλη. Το τρικ που χρησιμοποιούμε σ’ αυτήν την τεχνική είναι να κάνουμε όλα τα διαφορετικά στη δομή αντικείμενα να δείχνουν διαφορετικά. Πριν χρησιμοποιήσετε ένα μοντέλο χτυπήστε ελαφρά ένα ή περισσότερους άξονες ή αλλάξτε το χρώμα του ή την σύστασή του. Κανονική χρήση αυτής της τεχνικής μειώνει τον χρόνο φορτώματος χωρίς να μειώνει τον παράγοντα δέος.
 

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

Όμορφα λεπτομερείς και πραγματικές σκηνές δεν χρειάζεται να είναι αργές ,αλλά μερικές παραχωρήσεις πρέπει να γίνουν. Η πιο σημαντική τεχνική είναι να χρησιμοποιήσουμε λιγότερα πολύγωνα. Κάθε πολύγωνο αυξάνει το ποσό της δουλειάς που αυτός που προσφέρει έχει να κάνει σε κάθε στάδιο του γραφικού πετρελαιαγωγού. Κάθε πολύγωνο μετράει. Οι πιο κοινές ανικανότητες είναι αόρατα και εσωτερικά πολύγωνα. Αν ένα αντικείμενο έχει τοποθετηθεί έτσι ώστε μέρος του να μην φαίνεται από τον χρήστη, όπως το κάτω και πίσω μέρος ενός αντικειμένου τοποθετημένο σ’ ένα τοίχο για παράδειγμα, τότε δεν υπάρχει λόγος οι δύο αυτές πλευρές να οριστούν. Κατά τον ίδιο τρόπο, εσωτερικά πολύγωνα επίσης αυξάνουν τον αριθμό των αριθμό των κορυφών, των συστάσεων. Για παράδειγμα σ’ ένα μοντέλο κατασκευασμένο από κύβους οι γειτονικοί κύβοι δημιουργούν πρόσωπα εσωτερικά στο αντικείμενο τα οποία δεν φαίνονται αλλά ανταποδίδονται. Είναι προτιμότερο να κατασκευάσεις ένα τέτοιο μοντέλο από IntexedFaceSets για να αποφύγεις εσωτερικά πρόσωπα.

Συστάσεις μπορεί να πληγώσουν ή να βελτιώσουν την ικανότητα ανάλογα με το πως χρησιμοποιούνται. Οι συστάσεις συνήθως είναι μεγάλα αρχεία που μειώνουν τον χρόνο φόρτωσης και αυξάνουν τον χρόνο που προσφέρουν υπηρεσία. Αντί για όλα αυτά δοκίμασε να χρησιμοποιήσεις πολύ μικρές συστάσεις και να τις σκεπάσεις (Κοίτα παράγραφο 6.3). Επίσης υπάρχουν φορές όταν οι συστάσεις μπορεί να μειώσουν πολλά πολύγωνα και να είναι αποτελεσματικές. Ένα πολύπλοκο μοντέλο πιθανότατα 3000 κορυφών που χρησιμεύει μόνο για διακόσμηση ενός περιβάλλοντος μπορεί να αντικατασταθεί με την εικόνα του μοντέλου σε χάρτη και θα φαίνεται σχεδόν ίδιο με το τρισδιάστατο αντικείμενο αλλά μειωμένο κατά 3000 κορυφές (Naudau 22).

Κάθε φως σε ένα VRML περιβάλλον αυξάνει τα μαθηματικά που εκτελούνται από αυτόν που αναλαμβάνει υπηρεσία περισσότερο από κάθε άλλο. Όσο λιγότερα φώτα τόσο καλύτερα. Και ακόμα καλύτερα χρησιμοποίησε κατευθυντήριο φωτισμό αντί για φωτισμό σημείου και προβολέα για να μειώσεις τα έξοδα υπολογισμού. Ο υπολογισμός φωτισμού σημείου και προβολέως περιλαμβάνει υπολογισμό ενός διανύσματος από την κορυφή του πολυγώνου στη θέση της πηγής του φωτισμού και βρίσκοντας το μέγεθος αυτού του διανύσματος το οποίο περιλαμβάνει μία τετραγωνική ρίζα, ένα προιόν στιγμής και μία διαίρεση. Ενώ το να υπολογίσουμε κατευθυντήριο φωτισμό μόνο ένα προιόν στιγμής χρειαζόμαστε ( Matsuba 647 ) και ο φωτισμός αυτός είναι πιο φθηνός.