lectia_vrml

10

Click here to load reader

Upload: mirela-alexandra-marchidan

Post on 29-Nov-2015

8 views

Category:

Documents


0 download

DESCRIPTION

vrml realitate virtuala

TRANSCRIPT

Page 1: lectia_VRML

================================ pentru uzul studentilor ================================

Elaborat de Lect. Dr. D.M.Popovici [email protected] http://www.univ-ovidius.ro/cerva

1

Lectia 2 – Putina culoare intr-o lumina colorata Obiective: Reprezentarea culorii Modele de iluminare Tipuri de surse de lumina Detalii de suprafata

Reprezentarea culorii Rolul unui model de reprezentare a culorii este acela de a permite specificarea comoda a culorilor dintr-o gama prestabila. In acest scop vom avea in vedere, in primul rand, gama culorilor afisabile pe un display, iar in al doilea rand gama de culori utilizata de dispozitivele de imprimare (hard-copy). Modelele prezentate in continuare, au la baza trei culori primare. In general, putem utiliza oricare trei culori de baza, retinand insa faptul ca nu putem avea acces decat la o gama de culori, anume, cea cuprinsa in triunghiul determinat de cele trei culori in diagrama cromatica. Deseori sunt alese culorile rosu, verde si albastru datorita pozitiilor ocupate de acestea in cadrul diagramei CIE (figura 1). Ne vom opri asupra modelelor de reprezentare a culorii: RGB, utilizat in procesul de afisare a informatiei grafice pe display, CMY, pentru dispozitivele color de imprimare a imaginilor.

Modelul RGB Modelul RedGreenBlue utilizeaza un sistem cartezian de coordonate, al carui subspatiu este cubul unitate din figura 2. Culorile primare RGB sunt aditive, in sensul ca, fiecare dintre cele trei coordonate contribuie la formarea unei culori, prin sumare, deci prin adaugare la negru. Diagonala principala a cubului, formata din puncte ale caror coordonate RGB sunt egale, reprezinta nivelele de gri. Acest spatiu este utilizat in formarea imaginilor pe monitoarele TV color si diplay-urile in raster.

Modelul CMY Modelul CyanMagentaYellow este complementar sistemului RGB, culorile componente ale sistemului cartezian fiind complementare celor din sistemul RGB. In plus, ele sunt culori substractive, deoarece, efectul lor in formarea culorii este obtinut prin extragerea lor din lumina pura (alba). Subspatiul cartezian este identic cu cel al primului sistem, exceptie facand culoarea

Figura 2.

Page 2: lectia_VRML

================================ pentru uzul studentilor ================================

Elaborat de Lect. Dr. D.M.Popovici [email protected] http://www.univ-ovidius.ro/cerva

2

aflata in origine. Astfel in timp ce cazul sistemului RGB in origine se afla negru, in cazul sistemului CMY avem alb. Deseori, sistemul CMY este completat cu o componenta Black, din motive de economie a pigmentilor CMY in redarea nedrului.

Modele de iluminare Odata stabilit sistemul de reprezentare a culorii, urmatoarea etapa in procesul de creare a imaginii este aceea de a introduce una sau mai multe surse de lumina, obtinandu-se astfel o apropiere de realitate. Pentru aceasta este necesar sa tinem seama de pozitia si orientarea surselor luminoase in raport cu obiectele in studiu, caracteristicile de material (sau suprafata) pentru fiecare obiect in parte. Vom trata o serie de modele de iluminare care exprima factori determinand culoarea suprafetei intr-un punct. Modelele de iluminare sunt numite uneori si de umbrire. Modelele de umbrire determina conditiile in care se aplica modelul de iluminare si care sunt argumentele pe care acesta le primeste. De exemplu, unele modele de umbrire invoca un model de iluminare pentru fiecare pixel de imagine in timp ce alte modele invoca modelul de iluminare numai pentru anumite puncte ale imaginii, restul fiind umbrite prin interpolare. In VRML, pentru a introduce o sursa de lumina este necesara prezenta unui nod de tip Light. Intr-o scena exista o sursa de lumina implicita, cea atasata privitorului, asa numita headLight. Aceasta poate fi doar activata sau dezactivata, neputandu-i-se modifica nici intensitatea si nici culoarea.

Lumina ambianta Probabil ca cel mai simplu model de iluminare posibil este cel in care fiecare obiect este afisat ca avand o intensitate intrinseca. Putem gandi acest model, ca neavand surse externe de lumina, ca descriind o lume ireala, formata din obiecte nereflectante, avand lumina proprie. Fiecare obiect apare ca o silueta monocroma. Acest tip de lumina apare sub forma campului ambientIntensity din cadrul tuturor tipurilor de surse de lumina, si are valori cuprinse intre 0 si 1. Cantitatea de lumina reflectata de suprafata unui obiect este determinata de coeficientul sau de reflexie ambianta, coeficient ce poate fi considerat ca o caracteristica de material. In prezenta culorii, lumina ambianta poate fi completata cu emissiveColor, ale carei valori reprezinta un triplet din sistemul unitar RGB. Deci reluand o portiune de cod din lectia anterioara: Shape { appearance Appearance { material Material { emissiveColor 0.2 0.8 1 ambientIntensity 0.9 } } geometry Box { size 2 1 2

Page 3: lectia_VRML

================================ pentru uzul studentilor ================================

Elaborat de Lect. Dr. D.M.Popovici [email protected] http://www.univ-ovidius.ro/cerva

3

} }

Reflexia difuza Chiar daca obiectele iluminate cu lumina ambianta sunt mai mult sau mai putin stralucitoare, direct proportional cu intensitatea luminii ambiante, acestea sunt totusi iluminate uniform de-a lungul suprafetelor lor. Sa consideram acum iluminarea unui obiect cu o sursa de lumina punctiforma, ale carei raze de lumina sunt emanate uniform, in toate directiile. In acest caz, lumina receptionata de privitor este proportionala cu cos , unde este unghiul pe care il formeaza raza incidenta cu normala la suprafata in punctul observat. Formula iluminarii difuze este:

I = Ip kd cos (16.3)

Acest tip de reflexie completeaza caracteristicile de material ale corpului in ceea ce priveste cantitatea de lumina si culoarea acesteia, reflectata de corp. Putem completa Materialul corpului anterior prin: material Material { emissiveColor 0.2 0.8 1 diffuseColor 0.44 0.6 0.2 ambientIntensity 0.9 }

Reflexia speculara Reflexia speculara apare atunci cand supunem unui fascicul de lumina o suprafata fina, lucioasa. Spre exemplu, iluminand un mar cu o lumina puternica, aceasta va produce reflexia speculara, in portiunea in care unghiurile formate de raza incidenta si normala la suprafata marului de pe o parte, si normala la suprafata marului si vectorul determinat de observator si punctul de pe suprafata marului pe de alta parte, sunt aproximativ egale. In punctele necuprinse in aceasta categorie se va produce reflexia difuza. Observam, in plus, ca, in timp ce lumina provenita din reflexia difuza are culoarea suprafetei iluminate, culoarea provenita din reflexia speculara are culoarea luminii initiale, deci a celei pornita din sursa de lumina. Vom mai observa ca, schimband pozitia observatorului, regiunea in care se produce reflexia speculara isi schimba si ea pozitia. Aceasta datorita faptului ca suprafetele luciose reflecta inegal lumina, in directii diferite; in cazul unei suprafete perfect lucioase (cum ar fi o oglinda perfecta), lumina este reflectata numai pe directia in care unghiurile de incidenta si reflexie sunt egale. Aceasta inseamna ca, observatorul va putea receptiona lumina reflectata numai din pozitiile care indeplinesc aceasta conditie (vezi figura 4). In acest context, materialul paralelipipedului nostru poate fi facut lucios, prin completarea informatiei provenite din reflexia speculara : material Material { emissiveColor 0.2 0.8 1 diffuseColor 0.44 0.6 0.2

N L

Figura 3 – Reflexia difuza

N

Figura 4 – Reflexia speculara

L R

V

Page 4: lectia_VRML

================================ pentru uzul studentilor ================================

Elaborat de Lect. Dr. D.M.Popovici [email protected] http://www.univ-ovidius.ro/cerva

4

specularColor 1 0.3 0.8 ambientIntensity 0.9 } Exercitiul 1. Modificati codurile obiectelor obtinute in lectia trecuta, in special cele care formeaza ansamblul masa-scaune-farfurie-vaza-peste, astfel incat masa sa fie alba si lucioasa, picioarele ei sa fie metalice, de culoarea aluminiului, scaunele sa fie diferit colorate dar sa aibe acelasi tip de picioare, iar pestele sa “aduca” a crap.

Atenuarea atmosferica Pentru a simula atenuarea atmosferica a luminii ce cade pe un obiect, functie de distanta dintre obiect si sursa de lumina, se tine cont de de faptul ca obiectele situate la o distanta mai mare sunt generate cu intensitati mai reduse ale luminii decat cele apropiate. Considerand I0 si I1, intensitatile luminii in plan apropiat (x0) si respectiv cel indepartat (x1), intre cele doua plane, intensitatea luminii se poate determina printr-o simpla interpolare liniara (fara a fi insa si singura solutie), conform formulei:

10)1( III , unde 1,0 .

Considerand )()(

01

0

xxxx

, aplicand formula

anterioara, putem obtine intensitatea luminii in acel punct (x). Pentru obiecte situate mai aproape de planul cel mai apropiat (x0) precum si pentru obiecte situate mai departe de planul indepartat, intensitatea luminii este considerata constanta, avand valoarea intensitatii planului apropiat, respectiv indepartat.

Tipuri de surse de lumina Pentru mai cresterea realismului lumii virtuale, se mai pot adauga diferite tipuri de surse de lumini, avand diferite culori si domenii de actiune. Indiferent de tipul sursei de lumina, acestea se caracterizeaza prin pozitie, directie de emisie a luminii si culoare luminii emise. In VRML intalnim 3 tipuri de surse de lumina : Lumina punctiforma – PointLight – emite lumina uniform in toate directiile, dintr-un punct situat la o distanta finita fata de scena; Lumina directionata – DirectionalLight – emite lumina paralel cu o anumita directie dintr-o sursa situata la infinit (poate fi utilizata in simularea luminii solare); Spotul de lumina – SpotLight – radiaza lumina punctiform avand ca domeniu de actiune un con (asemeni unei lanternei).

xB0B x xB1B

IB0B

I IB1B

Page 5: lectia_VRML

================================ pentru uzul studentilor ================================

Elaborat de Lect. Dr. D.M.Popovici [email protected] http://www.univ-ovidius.ro/cerva

5

Indiferent de tipul sursei de lumina, acestea au campurile: on – specifica daca nodul emite sau nu lumina intensity – controleaza puterea luminii ambientIntensity – controleaza efectul luminii ambientale color – controleaza culoarea luminii emise. PointLight { ambientIntensity 1 attenuation 1 0.6 1.5 color 1 1 1 intensity 1 location 1 1 1 radius 2 on TRUE } PointLight este caracterizat in plus prin raza domeniului de actiune, radius, precum si prin pozitia din care emite lumina, location, si atenuarea atmosferica, attenuation. DEF Sf Shape { geometry Sphere {} appearance Appearance { material Material { diffuseColor .61 .61 .61 specularColor .77 .76 .76 ambientIntensity .14 shininess .9 } } } Transform { translation 0 3 0 children USE Sf } Transform { translation 5 5 0 children USE Sf } Transform { translation 5 2 0 children USE Sf }

X radius

Figura 6. PointLight in actiune.

Figura 7. Un SpotLight pentru cine merita.

Page 6: lectia_VRML

================================ pentru uzul studentilor ================================

Elaborat de Lect. Dr. D.M.Popovici [email protected] http://www.univ-ovidius.ro/cerva

6

PointLight { location 2.5 2.5 0 color 1 0 0 intensity 1 on TRUE radius 2.6 } Completand codul anterior cu o sursa de lumina de tip SpotLight SpotLight { location 5 2.5 0 direction -1 0 0 color 0 0 1 radius 7 cutOffAngle 1.57 beamWidth 0.48 } obtinem efectul vizual prezentat in figura 6. Directia de emisie, direction, o regasim si in sursa de tip DirectionalLight, aceasta fiind insa plasata la infinit. DirectionalLight { direction 0 -1 0 color 0 1 0 } Exercitiul 2. In contextul exercitiului anterior, plasati cate o surse de lumina directionala sub fiecare scaun la nivelul solului. Exercitiul 3. Inzestrati mediul construit la exercitiul precedent cu 3 surse de lumina punctiforme, orientate pe masa, vaza si peste. Plasati o a patra surse de lumina in interiorul vazei. Ce observati? Exercitiul 4. Construiti o sfera de culoare metalica si foarte lucioasa si inconjurati-o cu 6 surse de lumina punctiforme de culori distincte, amplasate in fata, spate, sus, jos, stanga si dreapta sferei.

Detalii de suprafata Detaliile de suprafata ale unui obiect pot fi completate prin utilizarea texturilor (imagini sau filme). In cazul utilizarii imaginilor, formatul acceptat al fisierelor este jpeg, gif sau png (de preferat), iar in

Figura 8. Exemplu de DirectionalLight.

Page 7: lectia_VRML

================================ pentru uzul studentilor ================================

Elaborat de Lect. Dr. D.M.Popovici [email protected] http://www.univ-ovidius.ro/cerva

7

cazul utilizarii filmelor ca textura, se vor accepta fisiere MPEG-1. Indiferent de situatie, textura va apare in cadrul unui nod Appearance. Shape { appearance Appearance { material Material { . . . } texture ImageTexture { url "texturamea.png" } } geometry . . . } sau Shape { appearance Appearance { material Material { . . . } texture MovieTexture { url "filmulmeu.mpg" loop TRUE speed 1.0 startTime 0.0 stopTime 0.0 } } geometry . . . } In general, prin aplicarea texturilor asupra unui corp, se va reusi anularea caracteristicilor de culoare initiala ale acestuia. Daca insa, se doreste combinarea celor doua tipuri de informatie, culoare si textura, se poate incerca imbogatirea texturii cu informatie legata de transparenta si aplicarea acestei noi texturi pe obiectul colorat. Procedand astfel, transparenta imaginii aplicate va face vizibila culoarea obiectului catre observatorul sau. O alta solutie o costituie utilizarea texturilor monocrome (in nuate de gri) care, prin “definitie”, sunt combinate cu culoarea orginala a obiectului texturat. Asupra texturilor pot fi aplicate anumite operatiuni plane in vederea obtinerii unei ocupari convenabile a spatiului rezervat reprezentarii cu ajutorul imaginilor. O prima operatie o constituie transformarile geometrice plane ce vor fi aplicate in ordine inversa aplicarii transformarilor geometrice spatiale. In VRML 2.0 ordinea este scalare, rotatie si translatie iar in ISO VRML 97 aceasta ordine este translatie, rotatie si scalare. Sistemul de coordonate asociat texturii este unul plan, avand drept coordonate s (sau u) pe orizontala si t (sau v) pe verticala. Coltul din

t s

Page 8: lectia_VRML

================================ pentru uzul studentilor ================================

Elaborat de Lect. Dr. D.M.Popovici [email protected] http://www.univ-ovidius.ro/cerva

8

stanga jos al texturii este considerat ca avand coordonatele (0,0) iar cel opus, din dreapta sus coordonatele (1,1). Sa vedem cum ar arata un cub texturat cu drapelul Europei:

fara a aplica nici o transformare texturii Shape { geometry Box {} appearance Appearance { texture ImageTexture { url "euroflag.png" } } }

aplicand o translatie de 0.3 pe axa s

Shape { geometry Box {} appearance Appearance { texture ImageTexture { url "euroflag.png" } textureTransform TextureTransform { translation 0.3 0 } } }

aplicand o scalare de 2 pe axa s si 1 pe axa t Shape { geometry Box {} appearance Appearance { texture ImageTexture { url "euroflag.png" } textureTransform TextureTransform { scale 2 1 } } } O alta operatie, mult mai delicata insa, de transformare a texturii o reprezinta selectarea unei zone de textura si aplicarea selectiva a acesteia pe o anumita geometrie. Coordonatele texturii si indicii coordonatelor texturii sunt utilizati in specificarea portiunii de textura selectate a fi aplicate pe obiectul in cauza. Implicit, aceste valori ale coordonatelor texturii sunt:

Page 9: lectia_VRML

================================ pentru uzul studentilor ================================

Elaborat de Lect. Dr. D.M.Popovici [email protected] http://www.univ-ovidius.ro/cerva

9

0.0 0.0, 1.0 0.0, 1.0 1.0, 0.0 1.0 Un nod TextureCoordinate contine lista coordonatelor texturii aplicate unor geometrii introduse prin IndexedFaceSet sau ElevationGrid. Shape { geometry IndexedFaceSet { coord Coordinate { point [ 0 0 0, 0 10 0, 10 10 0, 20 8 0, 20 -2 0, 10 0 0 ] } coordIndex [ 5 4 3 2 1 0 -1 ] } appearance Appearance { texture ImageTexture { url "euroflag.png" } } } Shape { geometry IndexedFaceSet { coord Coordinate { point [ 0 0 0, 0 10 0, 10 10 0, 20 8 0, 20 -2 0, 10 0 0 ] }

Page 10: lectia_VRML

================================ pentru uzul studentilor ================================

Elaborat de Lect. Dr. D.M.Popovici [email protected] http://www.univ-ovidius.ro/cerva

10

coordIndex [ 5 4 3 2 1 0 -1 ] texCoord TextureCoordinate { point [ 0 0, 0 1, 0.5 1, 1 1, 1 0, 0.5 0 ] } texCoordIndex [ 0 1 2 3 4 5 -1 ] } appearance Appearance { texture ImageTexture { url "euroflag.png" } } } Dar despre toate aceste geometrii complicate vom discuta ceva mai tarziu pe indelete. Exercitiul 5. Aplicati texturi distincte pe fata mesei, pe vaza si pe pestele din mediul construit in exercitiul 3.