You are on page 1of 52

Cap. 2.

Conceptele de baz ale limbajului VRML

2.1. VRML (Virtual Reality Modeling Language)


Virtual Reality Modeling Language (VRML) este un limbaj pentru proiectarea i utilizarea simulrilor 3-D interactive. WWW (World Wide Web) se bazeaz pe

Hypertext Markup Language (HTML), care a fost dezvoltat din standardul SGML (Standard Generalized Markup Language). SGML i HTML sunt proiectate ca instrumente de formatare a textului bidimensional.

Mark Pesce, Peter Kennard i Anthony Parisi au prezentat n luna mai 1994, la prima Conferin Internaional asupra Web-ului, o lucrare intitulat Cyberspace, n care au pledat c extinderea Web-ului cu cea

de-a treia dimensiune ar permite o mai bun organizare a datelor de pe


Web, deoarece oamenii triesc i muncesc ntr-o lume tridimensional. Ei au numit acest concept Virtual Reality Markup Language (VRML). Conceptul lor a fost bine primit i participanii au nceput cutrile pentru un format standard. Ulterior, litera M din VRML a provenit de la Modeling i nu de la Markup, pentru a marca diferena dintre natura Web-ului bazat pe text, i natura tridimensional a VRML.

Silicon Graphics' Open Inventor a fost ales ca punct de


plecare pentru crearea standardului VRML. Open Inventor este un instrument de dezvoltare orientat pe obiect (C++),

utilizat pentru dezvoltarea rapid a mediilor grafice


tridimensionale. Specificaiile VRML trebuiau s ndeplineasc trei cerine: independena de platforma de lucru,

extensibilitatea,
capacitatea de a lucra sub conexiuni low-bandwidth.

Limbajul VRML conine o colecie de comenzi numite noduri, pentru crearea unei varieti de obiecte simple

precum cuburi, sfere, cilindri precum i obiecte cu o mulime de fee i muchii.


VRML permite ns i crearea de obiecte complexe prin

combinarea obiectelor simple.


VRML este un limbaj ierarhizat, cu obiecte copil

motenind proprietile prinilor.

Prima versiune a VRML, VRML 1.0, avea posibiliti limitate, cu ajutorul acestuia putndu-se

crea obiecte statice.


Singura micare era cea a punctului de observare al

utilizatorului, ce putea astfel "traversa" lumea


virtual.

Prin apariia VRML 2.0, capabilitile VRML au fost extinse pentru a putea crea lumi virtuale dinamice. Obiectele VRLM 2.0 se pot mica, anima i a fost introdus sunetul tridimensional (sunetul difer n funcie de poziia asculttorului n raport cu sursa ce emite sunete). O alt posibilitate introdus de VRML 2.0 este abilitatea de a aduga comportri obiectelor VRML. Comportamentele - care pot fi "scripted" ori specificate n applet-uri Java - sunt caracteristici ale obiectelor ce depind de relaia lor cu alte obiecte ale lumii VRML, cu privitorul, ori cu ali parametri precum timpul. De exemplu un pete VRML 2.0 dintr-un acvariu se poate ndeprta dac privitorul se apropie prea mult de acvariu.

Ultimele specificaii tehnice VRML : VRML97.


Vor fi prezentate i exemplificate utilizrile nodurilor geometrice, nodurilor de prezentare audio-vizual a obiectelor,

nodurilor de control al scenei grafice, nodurilor de grupare, nodurilor surse de lumin, nodurilor de tip senzor, nodurilor de interpolare, nodurilor Script, prototipurilor i prelucrrii evenimentelor, precum i o aplicaie VRML pentru o linie flexibil de fabricaie.
Din pcate exemplificarea grafic din cri a aplicaiilor VRML

nu poate reda posibilitile tridimensionale ale VRML i posibilitile de animaie i audio ale VRML.

2.2. Structura unui fiier VRML


Prile componente majore ale unui fiier VRML sunt urmtoarele: antetul, scena grafic, prototipurile (realizate cu instruciuni PROTO i

EXTERNPROTO) i

traseele evenimentelor.
Aceste componente sunt prelucrate pentru prezentare i interaciune de un program cunoscut sub numele de BROWSER.

Tot ceea ce urmeaz caracterului # este considerat

comentariu, aa c toate caracterele ce urmeaz dup #


pn la urmtoarea linie sunt ignorate. Excepie face prima linie ce constituie antetul fiierului sau cazul n

care acest caracter face parte dintr-un ir de caractere


aflat ntre ghilimele.

Separatorii (spaiile albe) sunt virgulele, tab-urile, sfritul de linie


i trecerea la linie nou. Unul sau mai muli separatori despart entitile din fiierele VRML. Cmpurile, evenimentele,

instruciunile PROTO, EXTERNPROTO i numele de noduri nu


pot conine caracterele de control care au codurile ASCII 00h 1fh, 7fh, spaiu (20h), ghilimele sau apostrof (0x22: ", 0x27: '), diez (0x23: #), virgul (0x2c: ,), dou puncte (0x2e: .), paranteze ptrate (0x5b, 0x5d: []), backslash (0x5c: \) sau acolade (0x7b, 0x7d: {}). Mai mult, primul lor caracter nu poate s fie o cifr (0x30-0x39), semnul plus (0x2b: +), sau minus (0x2d: -).

VRML este un limbaj case-sensitive (ine cont de tipul literelor: majuscule sau minuscule), aa c "Box" este diferit de "box" i "END" este diferit de "end".

Urmtoarele cuvinte rezervate nu pot fi utilizate pentru a defini cmpuri, evenimente, instruciuni PROTO i EXTERNPROTO, sau noduri: DEF EXTERNPROTO FALSE IS NULL PROTO ROUTE TO TRUE USE eventIn eventOut exposedField field

Urmtorul exemplu prezint un fiier simplu VRML care deseneaz un cilindru cu nlimea 2 i raza 1.5: #VRML V2.0 utf8 Shape { # Cilindru appearance Appearance { material Material { } } geometry Cylinder { height 2.0 radius 1.5 } }

2.3. Antetul
Pentru a fi mai uor de identificat, un fiier VRML va ncepe cu urmtoarea linie de program: #VRML 2.0 <tipul codificrii> [comentariu] <sfrit de linie>

Observaie: Comentariul este opional.

Antetul este o linie text ce identific tipul fiierului i tipul de codificare al acestuia. El mai poate conine i alte informaii sub form de comentariu. ntre cmpurile antetului trebuie lsat un singur spaiu liber.
Tipul de codificare este fie utf8 (set de caractere bazat pe ASCII), fie o alt valoare autorizat de standardul ISO/IEC

14772. Antetul unui fiier ce folosete codificarea utf8 este urmtoarea: #VRML 2.0 utf8 [comentariu] <sfrit de linie>

Caracterele ce urmeaz dup tipul codificrii pot fi ignorate de ctre browser. Linia antetului se termin la ntlnirea sfritului de linie care este compus din caracterele linefeed (0x0A) trecere la line nou - i carriage return (0x0D) revenire la nceput de rnd.
Dup antet, un fiier VRML poate conine:

instruciuni ce conin noduri copii ale nodului rdcin;


instruciuni PROTO sau EXTERNPROTO; instruciuni USE; instruciuni ROUTE.

2.4. Scena grafic


Principala entitate a limbajului VRML o reprezint nodul (instruciune a limbajului VRML) care poate fi asemnat cu o structur din limbajul C. Fiecare nod conine o serie de proprieti ce pot fi de tip numeric, vectorial sau alte noduri. Scena grafic conine noduri ce descriu obiecte i proprietile lor. Aceste noduri pot fi noduri geometrice grupate ierarhic pentru a simula reprezentarea audio-vizual a obiectelor, precum i noduri ce particip la mecanismul de generare i transmitere a evenimentelor.

Scena grafic are o structur ierarhic, adic este compus din noduri printe care conin n cmpurile lor unul sau mai multe noduri copii. Un fiier poate s nu conin nici un nod rdcin sau poate avea mai multe astfel de noduri. Nodurile rdcin ale unui fiier VRML sunt acele noduri care nu sunt coninute de alte noduri sau instruciuni PROTO.
O transformare ierarhic include toate nodurile rdcin i descendenii acestora ce au o locaie particular n lumea virtual. VRML include noiunea de sisteme locale de coordonate, definite prin transformarea sistemului de coordonate al nodului ascendent. Sistemul de coordonate n care sunt reprezentate nodurile rdcin se numete sistemul lumii virtuale.

VRML definete metrul ca fiind unitatea de msur a sistemului de coordonate al lumii virtuale.
Toate celelalte sisteme de coordonate sunt construite prin transformri ale sistemului de baz. Unitile standard utilizate sunt urmtoarele: pentru distane: metrul; pentru unghiuri: radianul; pentru timp: secunda; pentru culoare: sistemul RVA (rou, verde, albastru) ([0,1], [0,1], [0,1]) (o nuan pentru una dintre aceste culori poate lua valori ntre 0 i 1).

Convenia ca o unitate de msur s fie egal cu un metru face construcia scenelor grafice mai uoar i astfel

poate fi pstrat mai uor raportul ntre dimensiunile reale ale obiectelor (de exemplu, s-ar putea crea, n fiiere separate, un telefon i o cas cu aceleai dimensiuni). Dac se dorete lucrul cu alte uniti de msur, poate fi utilizat un nod de tip Transform care va fi prezentat n unul din capitolele urmtoare.

Timpul este exprimat cu numere zecimale n dubl

precizie astfel c se poate lucra cu o acuratee de ordinul nanosecundelor. Radianii au fost alei pentru msurarea unghiurilor pentru

a exista o compatibilitate cu biblioteca de funcii matematice

a limbajului C standard, transformarea acestora n grade


hexagesimale fiind foarte simpl, tiind faptul c o valoare de 180 de grade corespunde unei valori de radiani.

VRML utilizeaz sistemul de coordonate cartezian, tridimensional, ce respect regula minii drepte. n mod implicit utilizatorul este poziionat de-a lungul prii pozitive a axei Z, iar axa Y este orientat cu sensul pozitiv n sus, aa cum prezint figura urmtoare:
Y

Fig.2.1. Sistemul de coordonate al scenei grafice

Pentru a modifica aceast setare a axelor se pot utiliza nodurile Transform sau Viewpoint.

2.5. Prototipuri
Prototipurile sunt instruciuni ce permit ca setul de noduri VRML s

fie extins de ctre utilizator. Definiiile prototipurilor pot fi incluse


n fiierul n care sunt folosite sau n exteriorul acestuia. Prototipurile pot fi definite folosind alte noduri VRML sau un mecanism de extindere dependent de browser. Utilizatorul mai poate folosi i instruciuni din alte limbaje de programare pentru a crea noi noduri i pentru realizarea de calcule mai complicate ce nu pot fi efectuate de ctre limbajul VRML.

2.6. Transmiterea evenimentelor


Unele noduri VRML genereaz evenimente ca rspuns la modificri ale mediului sau ca urmare a interaciunii cu utilizatorul. Evenimentele dau programatorului un mecanism, separat de scena grafic, prin care aceste evenimente sunt propagate, producnd modificri n alte noduri. Odat generate, evenimentele sunt transmise rutelor (legturile dintre nodurile surs i nodurile destinaie) ntr-o anumit ordine i procesate de nodul receptor. Prelucrarea unui eveniment poate modifica starea unui nod, poate genera alte evenimente sau poate modifica structura scenei grafice. Mecanismul de generare i prelucrare a evenimentelor este cel care permite utilizatorului s genereze animaie i interactivitate n lumea virtual.

2.7. Prezentare i interaciune


Interpretarea, execuia i prezentarea fiierelor VRML este realizat de un mecanism cunoscut sub numele de browser, care

prezint figurile i sunetele din scena grafic. Aceast prezentare


este cunoscut sub numele de lume virtual i n ea se poate naviga cu ajutorul browser-ului, cu o entitate uman sau mecanic cunoscut sub numele de utilizator. Lumea virtual este prezentat aa cum poate fi ea observat dintr-o anumit locaie; acea poziie i orientare n lumea virtual

se numete observator. Browser-ul poate defini modelul de


navigare n lumea virtual (cum ar fi mersul pe jos sau zborul) care permite utilizatorului s deplaseze observatorul prin lumea virtual.

n plus, browser-ul poate pune la dispoziia utilizatorului un


mecanism care s-i permit acestuia interaciunea cu obiectele aflate n scena grafic prin intermediul unor noduri de tip

senzor. Senzorii rspund la interaciunea utilizatorului cu


obiectele din scena grafic, la micarea acestuia sau la trecerea timpului.

Prezentarea geometric a obiectelor n lumea virtual urmeaz


un model conceptual proiectat pentru a reda caracteristicile fizice ale luminii. Modelul VRML de iluminare descrie modul n care proprietile suprafeelor obiectelor se combin cu

lumina pentru a produce anumite culori.

Figura urmtoare prezint modelul conceptual al unui browser VRML:

Principalele componente ale browser-ului sunt:


analizorul sintactic, scena grafic i elementele de prezentare audio-vizual.

Analizorul sintactic citete fiierul VRML i creeaz o scen grafic. Componentele scenei grafice sunt transformri ierarhice ce conin noduri i motorul de execuie care proceseaz evenimentele, citete i editeaz traseele evenimentelor i face modificri ale scenei grafice.

2.8. Sintaxa nodurilor


Nodul este entitatea de baz a limbajului VRML. Exist

mai multe tipuri de noduri, fiecare dintre acestea avnd un anumit rol n scena grafic. Fiecare nod poate avea urmtoarele caracteristici:
a) Un nume de tip, ca de exemplu: Box, Color, Group, Sphere, Sound etc.

b) Nici unul sau mai multe cmpuri care definesc modul n care fiecare nod difer de alte noduri de acelai tip. Valorile

cmpurilor sunt memorate n fiierele VRML la un loc cu nodurile i codific starea lumii virtuale.
c) Un set de evenimente pe care acesta le poate primi sau transmite. Fiecare nod poate primi zero sau mai multe tipuri de evenimente care vor modifica starea nodului. De asemenea, fiecare nod poate genera zero sau mai multe tipuri de evenimente ca urmare a modificrilor din starea unui nod.

d) Implementare. Implementarea fiecrui nod definete modul n care acesta reacioneaz la primirea unui eveniment, cnd genereaz evenimente i prezentarea audio-

vizual a acestuia n lumea virtual. Instruciunea PROTO poate fi utilizat pentru a defini noi tipuri de noduri ale cror caracteristici sunt definite cu ajutorul caracteristicilor altor noduri.

e) Un nume. Oricrui nod i poate fi asignat un nume ce este utilizat de alte instruciuni pentru a face referire la o implementare specific a unui nod.

Observaie: Cele mai uzuale valori ale cmpurilor au fost selectate ca valori implicite. De aceea este recomandat s

nu fie definite n mod explicit acele cmpuri ce au valori


implicite dect dac este absolut necesar, pentru a nu mri dimensiunea fiierelor.

Sintaxa unui nod este urmtoarea: [nume nod] <tipul nodului> {<corpul nodului>} O instruciune de tipul nod const dintr-un nume opional urmat

de tipul nodului i de corpul acestuia. Pentru a putea reutiliza un nod, se atribuie un nume acelui nod, folosind cuvntul cheie DEF, urmat de numele nodului, dup care acest nod poate fi apelat folosind cuvntul cheie USE, urmat de numele nodului. Corpul nodului este cuprins ntre acolade. Sintaxa este urmtoarea:
[DEF <nume_nod>] <tipul nodului> {<corpul nodului>} USE <nume_nod>

Exemplu: DEF Cilindrul_Meu Shape { . . . } . . . USE Cilindrul_Meu . . . USE Cilindrul_Meu Instruciunea USE nu creeaz o copie a nodului, n schimb acelai nod este inserat nc o dat n scena grafic dac este folosit n noduri cu mai muli prini.

Numele nodurilor sunt limitate la utilizarea ntr-un singur

fiier sau definiie de prototip. Pentru a folosi un nod n afara fiierului n care este definit, se utilizeaz instruciunea PROTO.

Dac mai multe noduri au primit acelai nume, fiecare

instruciune USE se refer la cel mai apropiat nod cu numele respectiv.

Corpul nodului const din cmpuri care descriu anumite

proprieti ale nodului i care pot conine valori sau instruciuni de tip nod, IS, ROUTE, PROTO sau EXTERNPROTO n orice ordine.

Un cmp const din nume urmat de o valoare, aa cum arat sintaxa urmtoare:

<nume_cmp> <valoare_cmp>
Fiecare tip de nod definete numele i tipurile cmpurilor

pe care le conine. Dac un cmp are mai multe valori, atunci sintaxa acestuia este urmtoarea:
<nume_cmp> [<valoare_cmp>]

2.9. Sintaxa cmpurilor i evenimentelor


Tipurile elementare de date folosite de nodurile VRML

pentru definirea obiectelor sunt cmpurile i evenimentele.


Exist dou clase generale de cmpuri i de evenimente:

cmpuri i evenimente ce conin o singur valoare (unde prin valoare se nelege un numr, un vector sau chiar o imagine) i al cror nume ncepe cu SF; cmpuri i evenimente ce conin valori multiple i al cror nume ncepe cu caracterele MF.

Valorile multiple sunt scrise ca liste ordonate, nchise ntre paranteze ptrate i separate de spaii albe. Ultima

valoare poare fi urmat opional de un spaiu alb. Dac


un cmp are o singur valoare, parantezele pot fi omise.

2.9.1. SFBool Un cmp sau un eveniment de tipul SFBool specific o

singur valoare boolean TRUE sau FALSE. Spre exemplu, expresia:


valBool FALSE este un cmp de tipul SFBool ce definete o valoare FALSE. Valoarea iniial a unui eveniment de ieire de tipul SFBool este FALSE.

2.9.2. SFColor i MFColor Cmpul sau evenimentul de tipul SFColor specific un triplet RVA (rou-verde-albastru) de numere reale, ntre 0 i 1, ce definesc raportul sub care se combin cele trei culori de baz. Cmpurile sau evenimentele de tipul MFColor specific zero sau mai multe triplete RVA. Spre exemplu, expresia:

valCuloare [1 0 0,0 1 0, 0 0 1 ]
este un cmp de tipul MFColor ce conine cele trei valori de baz: rou, verde, albastru. Valoarea iniial a unui eveniment de ieire de tipul SFColor este (0 0 0 ) iar a unui eveniment de ieire de tipul MFColor este [ ].

2.9.3. SFFloat i MFFloat Cmpurile i evenimentele de tipul SFFloat specific un numr real n virgul mobil, simpl precizie. Cmpurile i evenimentele de tipul MFFloat specific zero sau mai multe numere reale. Spre exemplu, expresia: valReal [5.24145, 14.7e-3, .0002 ] este un cmp de tipul MFFloat ce conine trei valori reale.

Valoarea iniial a unui eveniment de ieire de tipul SFFloat este 0, iar pentru un eveniment de tipul MFFloat este [ ].

2.9.4. SFImage
Cmpurile i evenimentele de tipul SFImage specific o imagine bidimensional definit pixel cu pixel. Cmpurile i evenimentele de tipul SFImage sunt scrise n fiierele VRML sub forma a trei numere ntregi ce reprezint limea, nlimea i numrul de componente ale imaginii, urmate de un numr de (lime*nlime) valori hexazecimale sau ntregi, reprezentnd pixelii imaginii separai de spaii albe: valImagine<lime><nlime><numr_compo nente><valoare_pixeli

Valorile pixelilor sunt limitate la 256 de nivele de intensitate (0-255 n zecimal sau 0x00-0xFF n hexazecimal). O imagine cu o singur component specific valoarea hexazecimal sau ntreag ce reprezint intensitatea imaginii. Astfel, valoarea 0x00 reprezint intensitatea minim iar valoarea 0xFF intensitatea maxim a imaginii.

O imagine cu dou componente specific intensitatea imaginii n octetul superior i opacitatea acesteia n octetul inferior.
n imaginile cu pixelii definii pe trei octei, primul octet specific componenta roie a imaginii, al doilea componenta verde i ultimul octet componenta albastr. Ultima variant ce poate fi ntlnit pentru acest tip de date este cea n cazul imaginilor cu patru componente, primii trei octei reprezentnd componentele rou/verde/albastru ale imaginii iar ultimul octet transparena acesteia (0x00 - imagine complet transparent iar 0xFF imagine complet opac).

Pixelii imaginii sunt specificai de la stnga la dreapta i de jos n sus. Astfel, prima valoare specific pixelul din stnga jos al imaginii, iar ultima valoare pixelul din dreapta sus. Spre exemplu, expresia: valImagine 1 2 1 0xFF 0x00 este o imagine format din 2 pixeli, cel de jos alb iar cel de sus negru. Valoarea iniial a unui eveniment de ieire de tipul SFImage este (0 0 0).

2.9.5. SFInt32 i MFInt32 Un cmp sau un eveniment de tipul SFInt32 specific un ntreg pe 32 de bii iar cele de tipul MFInt32 specific zero sau mai multe valori ntregi pe 32 de bii. Aceste valori pot fi scrise n format zecimal sau hexazecimal: valIntreag [17, -0xEAB, -53447 ] Valoarea iniial a unui eveniment de ieire de tipul SFInt32 este 0, iar pentru un eveniment de tipul MFInt32 este [ ].

2.9.6. SFNode i MFNode


Cmpurile i evenimentele de tipul SFNode definesc un nod VRML iar cele de tip MFNode zero sau mai multe noduri. Urmtorul exemplu prezint un cmp de tipul MFNode: ValNod [ Sphere { radius 5.5 } DEF Cub Box { } USE Cub ]

Dac un cmp de tipul SFNode conine cuvntul cheie NULL, nseamn c acesta este vid.
Valoarea iniial pentru un eveniment de ieire de tipul SFNode este NULL, iar pentru un eveniment de ieire de tipul MFNode este [ ].

2.9.7. SFRotation i MFRotation Cmpurile i evenimentele de tipul SFRotation specific o rotaie, iar cele de tipul MFRotation specific zero sau mai multe rotaii. O rotaie este reprezentat ntr-un fiier VRML sub forma a patru valori reale, separate prin spaii albe. Primele trei valori reprezint vectorul normalizat al axei de rotaie iar cea de-a patra valoare reprezint unghiul de rotaie, n direcia indicat de regula minii drepte, exprimat n radiani. Urmtorul exemplu l reprezint o rotaie de /2 radiani n jurul axei X: ValRot 1 0 0 1.0707 Valoarea iniial pentru un eveniment de ieire de tip SFRotation este (0 0 1 0), iar pentru un eveniment de tipul MFRotation este [].

2.9.8. SFString i MFString


Cmpurile i evenimentele de tipul SFString i MFString specific iruri de caractere i trebuie scrise ntre ghilimele. ntre ghilimele poate apare orice caracter, iar caracterul ghilimele trebuie precedat de backslash \. De asemenea, caracterul backslash trebuie precedat de nc un caracter backslash: ValSir [ Alb, Negru,Rou, Ghilimele\ ] Valoarea iniial a unui eveniment de ieire de tipul SFString este (irul vid), iar pentru un eveniment de tipul MFString este [ ].

2.9.9. SFTime i MFTime


Cmpurile i evenimentele de tipul SFTime specific o singur valoare de timp, iar cele de tipul MFTime specific zero sau mai multe valori de timp. ntr-un fiier VRML, valorile timpului sunt scrise sub form de numere reale n dubl precizie i reprezint numrul de secunde la o anumit origine de timp. n mod tipic, cmpurile i evenimentele de tipul SFTime reprezint numrul de secunde ncepnd de la 1 ianuarie 1970, ora 00:00:00 GMT. Valoarea iniial a unui eveniment de ieire de tipul SFTime este -1, iar pentru un eveniment de tipul MFTime este [ ].

2.9.10. SFVec2f i MFVec2f


Cmpurile i evenimentele de tipul SFVec2f i MFVec2f specific vectori bidimensionali. Acetia sunt scrii ntr-un fiier VRML ca o pereche de valori reale separate de spaii albe. Exemplul urmtor prezint o valoare de tipul MFVec2f ce conine trei vectori: ValVector [ 15 44, 10 2.2, 45.5 8]

Valorile iniiale pentru evenimentele de ieire de tipul SFVec2f i MFVec2f sunt (0 0), respectiv [ ].

2.9.11. SFVec3f i MFVec3f Cmpurile i evenimentele de tipul SFVec3f i MFVec3f

specific vectori tridimensionali. Acetia sunt scrii ntr-un fiier VRML ca vectori de valori reale separate de spaii albe. Exemplul urmtor prezint o valoare de tipul MFVec3f ce conine trei vectori:
ValVector [ 15 44 3, 10 2.2 77, 45.5 22 1 ] Valorile iniiale pentru evenimentele de ieire de tipul SFVec3f i MFVec3f sunt (0 0 0) respectiv [ ].

You might also like