Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Informatica


Index » educatie » Informatica
» Modele de iluminare si de umbrire


Modele de iluminare si de umbrire


Modele de iluminare si de umbrire

1. Obiectivul lucrarii.

Studierea modelelor de iluminare si de umbrire



Functiile de iluminare si umbrire OpenGL

Generarea scenelor cu iluminarea obiectelor

2. Repere teoretice

Modele de iluminare si umbrire

Reprezentarea obiectelor tridimensionale prin redarea pe ecran a suprafetelor componente uniform colorate nu este suficienta pentru a produce imagini realiste. De exemplu, daca se reda imaginea unei sfere aproximate prin poligoane colorand fetele vizibile cu aceeasi culoare rosie, se obtine un cerc rosu. Acest aspect nerealist apare datorita faptului ca perceptia celei de-a treia 3-a dimensiuni este mult influentata de modul de redare a iluminarii obiectelor.

¥n lumea reala, atunci cand lumina, provenita de la diferite surse de lumina, cade asupra obiectelor opace, o parte este absorbita de obiect iar o parte este reflectata. Ochiul percepe lunima reflectata pentru a interpreta forma, culoarea si alte detalii ale obiectelor. Ceoficientul de reflexie a luminii (reflectanta) unei suprafete este raportul dintre lumina incidenta si lumina reflectata.

Pentru calculul iluminarii suprafetelor in grafica pe calculator, trebuie sa fie definite:

Sursele de lumina, ca pozitie in scena si proprietati ale luminii emise.

Proprietatile de reflexie ale materialului suprafetei, prin coeficientii de reflexie ai luminii.

Un model de iluminare, care sa aproximeze cat mai corect modul real de comportare a suprafetelor luminate.

Modelul de iluminare Phong

In modelul de iluminare Phong, unul din cele mai cunoscute modele de iluminare, se calculeaza intensitatea culorii in fiecare punct al unei suprafete prin suma a trei componente de reflexie a luminii, si anume: reflexia difuza, reflexia speculara si reflexia ambientala.

(a) Reflexia difuza, este componenta unuiform reflectata de o suprafata, care da aparenta de suprafata mata. Ea se calculeaza cu expresia:

Id = Ii kd cos(q

unde:     Ii este intensitatea luminii unei surse punctiforme;

kd este coeficientul de reflexie de difuzie, care depinde de materialul suprafetei;

q este unghiul dintre normala la suprafata in punctul considerat si linia care uneste punctul, cu sursa de lumina (Figura 5.1.)

In scriere vectoriala, reflexia difuza are expresia:

Id = Ii kd (L N

unde: L este vectorul de directie a luminii si N este normala la suprafata in punctul considerat.


(b) Reflexia speculara este componenta de reflexie directionata, care se calculeaza cu expresia:

Is = Ii ks cosn(W

unde :     Ii este intensitatea luminii unei surse punctiforme;

ks este coeficientul de reflexie speculara, care depinde de materialul suprafetei;

W este unghiul dintre directia de observare si directia de reflexie a luminii (R)(Figura 5.2);

n este un coeficient care simuleaza rugozitatea suprafetei.

Componenta de reflexie speculara variaza in cuprinsul unei suprafete, chiar plane, din cauza variatiei vectorului V.

(c) Reflexia ambientala este o aproximatie a iluminarii globale a scenei, si reprezinta reflexia luminii provenite de la toate obiectele din scena.

Componenta de reflexie ambientala are expresia:

Ia = Ig ka

unde : Ig reprezinta iluminarea globala a scenei;

ka, coeficientul de reflexie ambientala, care depinde de materialul suprafetei

Iluminarea intr-un punct este suma celor trei componente:

I = Ig ka + Ii (kd cos(q) + ks cosn(W

Calculul exact al iluminarii - deci calculul intensitatii culorii pentru fiecare pixel al suprafetei- cu expresia de mai sus, necesita un timp de executie foarte ridicat (sume, produse, produse scalare, ridicarea la putere) - ceea ce face nepractica aceasta implementare directa a calculelor de iluminare.

De aceea, pentru redarea iluminarii obiectelor in sinteza de imagini se fac unele ipoteze simplificatoare care sa permita un calcul rapid al iluminarii, ipoteze care definesc modelele de umbrire. Tehnicile de umbrire depind de tipul obiectelor si de modelul de reprezentare a acestora. Pentru obiectele reprezentate prin suprafete poligonale in sinteza de imagine se folosesc mai multe modele de umbrire - umbrirea constanta, umbrirea Gourand si umbrirea Phong.

Modelul de umbrire constanta (poligonala)

Modelul de umbrire constanta admite calculul unei singure intensitati a culorii pentru fiecare suprafata poligonala; acest mod de calcul este posibil daca se admite ipoteza simplificatoare ca atat sursele de lumina cat si observatorul sunt la infinit. Umbrirea constanta produce discontinuitati de culoare, la frontiera intre suprafete.



Calculul umbririi constante inseamna aplicarea formulelor Phong pentru fiecare suprafata vizibila, o singura data pentru fiecare pozitie a observatorului.

Modelul de umbrire Gouraud

Pentru eliminarea discontinuitatilor din umbrirea constanta, Gouraud (1971) a introdus o metoda de umbrire care-i poarta si care se executa in felul urmator:

(1) Se calculeaza normala fiecarei suprafete.

(2) Pentru fiecare varf, se calculeaza o normala unica, ca medie a normalelor la suprafetele adiacente varfului respectiv:

.

(3) Se calculeaza intensitatile de culoare ale varfurilor fiecarui poligon folosind normala in varful respectiv si unul din modelele de iluminare adoptate.

(4) Se calculeza intensitatea culorii fiecarui punct de pe o latura al poligonului prin interpolare intre intensitatile capetelor laturii, si intensitatile punctelor de pe segmentele de linii de scanare, prin interpolare intre intensitatile capetelor acesteia (Figura 5.3.)

Pentru exemplul din figura se poate scrie:


Figura 5.3. Calculul umbririi Gouraud

Fie un segment UV definit prin coordonatele si intensitatile capetelor sale U(xU,yU,iU) V(xV,yV,iV). Ecuatia in y a intensitatii se poate scrie . Pentru doua linii consecutive k, k+1:

;

;

.

Asadar, in conversia de scanare se mai adauga un calcul incremental care da intensitatea de culoare pentru toate punctele segmentelor care alcatuiesc frontiera poligonului, utilizand panta intensitatii, py:

.

Pentru calculul intensitatii de culoare a fiecarui pixel, se calculeaza, mai intai, prin metoda incrementala in conversia de scanare pe linii intensitatile de culoare , Ik1, Ik2 , ale capetelor fiecarei linii scanate. Se scrie ecuatia in x a intensitatii unui punct de pe linia de scanare:

.

Pentru doi pixeli consecutivi in linie:

Aceasta formula de incrementare asigura interpolarea de-a lungul liniei de scanare fara calculul complet al intensitatii in fiecare pixel ci printr-o singura operatie de adunare a pantei px, unde:

.

Functiile OpenGL de iluminare si umbrire

In biblioteca grafica OpenGL se pot defini mai multe surse de lumina punctiforme, si pentru fiecare sursa se specifica componentele de coloare (RGBA) pentru fiecare tip de reflexie a luminii - difuza, speculara si ambientala, precum si pozitia, in coordonate universale omogene.

De exemplu:

void glLightfv (GLenum light, GLenum pname, const GLfloat* params

unde parametrii au semnificatiile urmatoare:

light - specifica numarul sursei de lumina; in general sunt admise minimum 8 surse;

pname - specifica numele parametrului setat de comanda respectiva. Sunt admise urmatoarele valori:

GL_AMBIENT

Parametrul params este un pointer la un vector care contine 4 valori intregi sau flotante, care specifica componentele RGBA a intensitatii ambientale a sursei de lumina. Aceste valori sunt cuprinse intre 0.0 si 1.0 (pentru date flotante), sau convertite linear, daca sunt intregi.

GL_DIFFUSE

Parametrul params este un pointer la un vector care contine 4 valori intregi sau flotante, care specifica componentele RGBA a intensitatii de reflexie difuza a sursei de lumina. Aceste valori sunt cuprinse intre 0.0 si 1.0 (pentru date flotante), sau convertite linear, daca sunt intregi.

GL_SPECULAR

Parametrul params este un pointer la un vector care contine 4 valori intregi sau flotante, care specifica componentele RGBA a intensitatii de reflexie speculara a sursei de lumina. Aceste valori sunt cuprinse intre 0.0 si 1.0 (pentru date flotante), sau convertite linear, daca sunt intregi.

GL_POSITION

Parametrul params este un pointer la un vector care contine 4 valori intregi sau flotante, care specifica pozitia sursei de lumina in coordonate omogene universale. Aceste valori sunt cuprinse intre 0.0 si 1.0 (pentru date flotante), sau convertite linear, daca sunt intregi.

Pozitia sursei de lumina este transformata, prin aplicarea matricii curente din stiva MODELVIEW, la fel ca orice punct din spatiu, si se memoreza in coordonate observator. Daca componenta w a pozitiei este 0, sursa de lumina este tratata ca sursa directionala. Pozitia implicata a sursei 0 este (0,0,1,0), deci este directionala, paralela cu axa Oz, si cu directia spre -Z.



Pentru validarea calculelor culorii pixelilor iin functie se iluminarea produsa de sursele de iluminare, trebuie apelata mai intai functia:

glEnable(GL_LIGHTING);

si de asemenea trebuie validata orice sursa de lumina i, prin apelul functiei:

glEnable(GL_LIGHTi);

Modelul de umbrire utilizat in calcule depinde de modul in care sunt specificare normalele primitivelor grafice. Daca se da o singura normala, pentru o intreaga suprafata, OpenGL foloseste modelul de umbrire poligonala (constanta); daca se dau normalele fiecarui varf al primitivei grafice (poligon), atunci se executa calculele de interpolare a intensitatii culorii, deci se foloseste modelul de umbrire Gouraud.

3. Descrierea programului

¥n programul Lab3D sunt definite 2 surse de lumina, LIGHT0 si LIGHT1, cu parametrii (componente de culoare si pozitie) setati la initializarea programului astfel:

// LIGHTS

GLfloat light_ambient[][4] = ;

GLfloat light_diffuse[][4] = ;

GLfloat light_specular[][4] = ;

GLfloat light_position[][4] = ;

Pentru redarea iluminarii obiectelor, in functia de generare a imaginii (de exemplu DrawScene(), Cubs(), Sphere() se introduc cele doua surse de lumina prin apelul functiilor:

glLightfv (GL_LIGHT0, GL_AMBIENT, light_ambient[0]

glLightfv (GL_LIGHT0, GL_DIFFUSE, light_diffuse[0]

glLightfv (GL_LIGHT0, GL_SPECULAR, light_specular[0]

glLightfv (GL_LIGHT1, GL_AMBIENT, light_ambient[1]

glLightfv (GL_LIGHT1, GL_DIFFUSE, light_diffuse[1]

glLightfv (GL_LIGHT1, GL_SPECULAR, light_specular[1]

Pozitia surselor de lumina in sistemul de coordonate observator se obtine prin aplicarea transformarii de observare introdusa in stiva MODELVIEW. Pentru aceasta, functiile de pozitie a surselor de lumina si apeleza dupa introducerea in stiva MODELVIEW a transformarii de observare, si inaintea tuturor transformarilor de modelare a obiectelor, astfel:

glPushMatrix();

// TRANSFORMAREA DE OBSERVARE

glRotated(-eyeUx,1.0,0.0,0.0

glRotated(-eyeUy,0.0,1.0,0.0

glRotated(-eyeUz,0.0,0.0,1.0

glTranslated(-eyeTx,-eyeTy,-eyeTz

// TRANSFORMAREA POZITIEI SURSELOR DE LUMINA

glLightfv (GL_LIGHT0, GL_POSITION, light_position[0]

glLightfv (GL_LIGHT1, GL_POSITION, light_position[1]

// TRANSFORMARI DE MODELARE

glTranslated(allTx,allTy,allTz

glRotated(allUz,0.0,0.0,1.0

glRotated(allUy,0.0,1.0,0.0

glRotated(allUx,1.0,0.0,0.0

glDrawObject(pScene

glPopMatrix();

Parametrii surselor de lumina se mot modifica in cursul programului prin comanda Select / Lights care deschide o fereastra de dialog in care se pot introduce parametrii doriti, de componente de culoare si pozitie.

4. Desfasurarea lucrarii. Rezultate experimentale

4.1. Se lanseaza programul Lab3D, se selecteaza redarea unor obiecte sau scene (cu una din comenzile Exercises / Cubs, Exercises / Sphere, Exercises / Scene 0, Exercises / Scene 1,), si redarea OpenGL (cu comanda Select / OpenGL

Se va observa efectul de iluminare a obiectelor, si se va corela cu caracteristicile surselor de lumina instalate si cu pozitia acestora.

4.2. Se modifica caracteristicile surselor de lumina (cu comanda Select / Lights). Se observa efectul modificarii componentelor de culoare pentru fiecare tip de reflexie (ambientala, difuza si speculara) precum si a pozitiei lor. (Figura 5.4.).

4.3. Se selecteza succesiv, in modul OpenGL, redarea obiectelor luminate si neluminate, prin comanda View / Lighting ( on / off). Se vor observa si explica diferentele de redare.

5. Exercitii. Sugestii.

5.1. Introduceti o noua sursa de lumina (LIGHT2), plasata la infinit, pe axa Ox, de culoare verde, pentru toate tipurile de reflexie (difuza, speculara si ambientala). Editati resursa dialog IDD_LIGHT, in Combo-box-ul Light Number, pentru interfata cu programul. Observati efectul combinat cu celelate surse de lumina.

5.2. Excludeti comanda de transfer catre OpenGL a normalelor la suprafete, prin eliminarea comenzii glNormal3d() din functia glDrawObject(), fisierul Geometry.cpp. Observati si explicati rezultalele obtinute.







Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate