Vectoren bij reflectie van licht Belichting n Kleuren van oppervlakken: resultaat van een complexe interactie tussen licht en materie. v l r Belichtingsmodellen: • empirisch: berekeningen in overeenstemming met de waarneming l oriëntatie van de lichtbron n normaalvector v viewvector : wijst naar de camera r reflectie : • fysica wetten: realistischer, maar rekenkundig hogere kost in het vlak (l, n): uitvalshoek = invalshoek Licht: • zonder lichtbron : geen kleur hoek φ hoek θ • zelden waarnemen van licht rechtstreeks van een lichtbron n • maar reflecties van lichtstralen op oppervlakken θ θ r l v φ r Dus, net zo belangrijk : de materiaaleigenschappen van de objecten Materiaaleigenschappen Mechanisme van de reflectie van licht door oppervlakken: zeer complex afhankelijk van een groot aantal parameters, bijvoorbeeld: • geometrie: plaats van het oppervlak tov. lichtbron • positie van de waarnemer • vorm van het oppervlak • karakteristieken van het oppervlak: ruwheid, kleur, transparantie Een lichtstraal die invalt op een oppervlak: • wordt voor een deel geabsorbeerd door het oppervlak • wordt voor een deel gereflecteerd • kan ook deels door het oppervlak heen gaan. Een gedeelte van het gereflecteerde licht bereikt de camera en laat toe dat het voorwerp zichtbaar wordt. Diffuse reflection Een reflector met op microscopisch niveau een erg ruw oppervlak Een invallende lichtstraal wordt in alle richtingen even sterk verstrooid. De hoeveelheid energie die gereflecteerd wordt, is enkel functie van de invalshoek en de intensiteit van de lichtbron en bijgevolg onafhankelijk van de oriëntatie van de camera. D = kd Id cos θ GLfloat difmat [ ] = { 1 . 0 , 0 . 0 , 0 . 0 , 1.0 } ; g l M a t e r i a l f v ( GL FRONT, GL DIFFUSE , d i f m a t ) ; Specular reflection Spiegelachtig: bij een glanzend oppervlak zien we de reflectie van een lichtbron als een zeer heldere vlek op een relatief kleine zone, terwijl de rest van het object waargenomen wordt als een diffuse reflector. Emissie een oppervlak kan zelf licht uitstralen, maar wordt geen lichtbron voor andere objecten zo’n oppervlak heeft dus geen effect op de rendering van andere objecten S = ks Is cosa φ GLfloat emi ssi e [ ] = { 0 . 5 , 0 . 0 , 1 . 0 , 1.0 } ; g l M a t e r i a l f v ( GL FRONT, GL EMISSION , e m i s s i e ) ; fall-off factor a: • bij een grotere hoek tussen r en v neemt de intensiteit van het gereflecteerde licht snel af • maat voor de glans van een oppervlak (shininess) De eigenschappen van de voorkant en de achterkant van een oppervlak kunnen onafhankelijk van elkaar ingesteld worden: G L f l o a t specmat [ ] = { 0 . 0 , 1 . 0 , 0 . 0 , 1 . 0 } ; front face: naar de camera gericht oppervlak g l M a t e r i a l f v ( GL BACK, GL SPECULAR, specmat ) ; back face: de achterkant van zo’n vlak (normaal, maar niet altijd, onzichtbaar) g l M a t e r i a l f ( GL BACK, GL SHININESS , 1 2 0 . 0 ) ; Belichting OpenGL is state driven: g l E n a b l e (GL LIGHTING ) ; Ambient reflection de reflectie door een oppervlak van omgevings- of achtergrondbelichting vertoont in alle richtingen dezelfde intensiteit, onafhankelijk van de positionering tov. de lichtbronnen en camerapositie glShadeModel (GL FLAT ) ; glShadeModel (GL SMOOTH ) ; g l E n a b l e (GL COLOR MATERIAL ) ; G L f l o a t ambimat [ ] = { 0 . 0 , 0 . 0 , 1 . 0 , 1 . 0 } ; g l M a t e r i a l f v ( GL FRONT AND BACK, GL AMBIENT, ambimat ) ; /* Gouraud shading */ /* geen spec materiaaleig */ Acht lichtbronnen: GL_LIGHT0, GL_LIGHT1, ..., GL_LIGHT7 g l E n a b l e (GL LIGHT0 ) ; A = ka Ia /* flat shading */ g l D i s a b l e (GL LIGHT0 ) ; Eigenschappen : positie, type, kleur, verzwakking, spoteffecten: g l L i g h t ∗ ( l i c h t b r o n , l i c h t e i g e n s c h a p , waarde ) ; GL_POSITION GL_AMBIENT, GL_DIFFUSE, GL_SPECULAR GL_CONSTANT_ATTENUATION, GL_LINEAR_ATTENUATION, GL_QUADRATIC_ATTENUATION GL_SPOT_CUTOFF, GL_SPOT_EXPONENT, GL_SPOT_DIRECTION Positie wordt bepaald door 4 waarden: • x-, y-, z-coördinaat; • al of niet puntbron: • 4e argument: 0.0 : bron op oneindig: de coördinaten geven een richting aan, alle lichtstralen lopen evenwijdig aan deze richting; • 4e argument: 1.0 : puntbron bepaald door de coördinaten. De array met coördinaten die de bronpositie van een lichtbron bepalen, wordt onderworpen aan de modelview matrix die geldt op het ogenblik van de uitvoering van de functie glLight(). Kleur van de lichtbron Per hoofdkleur kan de intensiteit aangegeven worden voor elk van de drie vormen van belichting: GLfloat d i f l i c h t [ ] = { 1 . 0 , 0 . 0 , 0 . 0 , 1.0 } ; GLfloat s p e c l i c h t [ ] = { 0 . 0 , 1 . 0 , 0 . 0 , 1.0 } ; GLfloat ambilicht [ ] = { 0 . 0 , 0 . 0 , 1 . 0 , 1.0 } ; g l L i g h t f v ( GL LIGHT0 , GL DIFFUSE , d i f l i c h t ) ; g l L i g h t f v ( GL LIGHT0 , GL SPECULAR, s p e c l i c h t ) ; g l L i g h t f v ( GL LIGHT0 , GL AMBIENT, a m b i l i c h t ) ; • voor de bepaling van de positie van het oog: g l L i g h t f v ( GL LIGHT0 , GL POSITION , p o s i t i e 0 ) ; gluLookAt ( oog [ 0 ] , oog [ 1 ] , oog [ 2 ] , 0 . 0 , 0 . 0 , 0 . 0 , 0 . 0 , 1 . 0 , 0 . 0 ) ; • na de bepaling van de positie van het oog: gluLookAt ( oog [ 0 ] , oog [ 1 ] , oog [ 2 ] , 0 . 0 , 0 . 0 , 0 . 0 , 0 . 0 , 1 . 0 , 0 . 0 ) ; g l L i g h t f v ( GL LIGHT0 , GL POSITION , p o s i t i e 0 ) ; Types van licht Ambient licht: licht dat zo erg verstrooid is door de omgeving dat het onmogelijk is om nog de richting ervan te bepalen voorbeeld: achtergrondverlichting in een kamer ambient licht dat op een oppervlak valt wordt in alle richtingen evenveel verstrooid. Diffuse component van licht: komt van één bepaalde richting het is helderder wanneer het ongeveer loodrecht op een oppervlak valt dan wanneer het er meer zijdelings opvalt invallend diffuus licht op een oppervlak wordt ook in alle richtingen evenveel verstrooid. Specular licht komt vanuit een specifieke richting en wordt door een oppervlak in een voorkeurrichting gereflecteerd. Kleuren worden gespecificeerd in RGBA-formaat. De blending factor A kan gebruikt worden om twee kleuren een zekere transparantie te geven zodat ze op het scherm schijnbaar in elkaar kunnen overvloeien. Lokale lichtbronnen zijn puntbronnen die in alle richtingen met eenzelfde intensiteit licht uitstralen. Spot: richtingsgevoelige lichtbron Vanuit de lichtbron vertrekken lichtstralen binnen een kegel met een gegeven openingshoek in een gegeven richting. De derde parameter geeft aan hoe geconcentreerd het licht is (falloff-functie): de intensiteit is het hoogste in het midden van de kegel en deze verzwakt naar de randen toe met een factor gelijk aan cosa θ met a de SPOT_EXPONENT (default gelijk aan 0.0) en θ de hoek tussen de vertex die de richting aangeeft en de vertex van de actuele positie G L f l o a t r i c h t i n g [ ] = { 3 . 0 , 5 . 0 , −2.0 } ; g l L i g h t f ( GL LIGHT0 , GL SPOT CUTOFF, 3 0 . 0 ) ; g l L i g h t f v ( GL LIGHT0 , GL SPOT DIRECTION , r i c h t i n g ) ; g l L i g h t f ( GL LIGHT0 , GL SPOT EXPONENT, 1 2 . 0 ) ; De cutoff parameter ligt tussen 0 en 90 graden en daarnaast is er de default waarde 180 graden. De default richting is in de richting van de negatieve z-as (0.0, 0.0, -1.0). Berekening Verzwakking De intensiteit van licht neemt af, naarmate dat de afstand tot de bron verhoogt. Deze verzwakking geldt alleen voor puntbronnen, omdat gericht licht van oneindig ver verwijderde bronnen afkomstig is. verzwakking = 1 kc + kl d + kq d2 met d de afstand tussen lichtbron en beschouwde plaat vertex kleur = emissiemateriaal + ambientlichtmodel × ambientmateriaal Pn−1 1 × spoteffecti × i=0 kc +kl d+kq d2 + i ambientlicht × ambientmateriaal + max(l.n, 0) × diffuuslicht × diffuusmateriaal + max(v.r, 0)shininess × specularlicht × specularmateriaal Default waarden zijn 1 voor kc (constante) en 0 voor kl (lineaire) en kq (kwadratische). g l L i g h t f ( GL LIGHT0 , GL CONSTANT ATTENUATION, 0 . 0 ) ; g l L i g h t f ( GL LIGHT0 , GL LINEAR ATTENUATION, 0 . 5 ) ; g l L i g h t f ( GL LIGHT0 , GL QUADRATIC ATTENUATION, 1 . 0 ) ; Globaal belichtingsmodel Definitie van een aantal parameters die onafhankelijk van de lichtbronnen gelden voor gans het belichtingsmodel: 1. een ambient achtergrondbelichting onafhankelijk van een specifieke bron; 2. berekeningswijze van specular reflectiehoeken; 3. specular kleuren afzonderlijk berekenen van ambient en diffuse kleuren; 4. worden de belichtingsberekeningen uitgevoerd voor zowel voor- als achterkant van objecten. G L f l o a t gl amb i [ ] = { 0 . 3 , 0 . 1 , 0 . 4 , 1 . 0 } ; g l L i g h t M o d e l f v ( GL LIGHT MODEL AMBIENT, gl amb i ) ; g l L i g h t M o d e l i ( GL LIGHT MODEL LOCAL VIEWER, GL TRUE ) ; g l L i g h t M o d e l i ( GL LIGHT MODEL COLOR CONTROL, GL SINGLE COLOR ) ; g l L i g h t M o d e l i ( GL LIGHT MODEL TWO SIDE, GL TRUE ) ; spoteffect = 1.0 i bij cutoff gelijk aan 180.0 0.0 i vertex ligt buiten de kegel max(l.d, 0) a met d richting Shading shading: het algoritmisch proces dat het belichtingsmodel toepast op het ganse oppervlak i.p.v. één enkel punt een willekeurig complex oppervlak wordt door een grafisch systeem gemanipuleerd in de vorm van een mesh N3 patches, de elementen van deze mesh, zijn N5 meetkundige vlakken met telkens één normaalvector Nx N7 verfijnen van de mesh geeft kleinere patches zodat het complexe oppervlak dichter benaderd wordt, maar met een grotere rekenintensiteit flat shading: het belichtingsmodel wordt per patch slechts één maal toegepast, omdat de normaalvector over de ganse patch constant blijft; de resulterende kleurintensiteit wordt op de ganse patch toegepast Gouraud shading een meer realistische voorstelling door middel van interpolatietechnieken N1 Nu N4 N2 N5 Ny 5 Nv 76 Nx Bepaal voor alle vertices van een patch van de mesh de gemiddelde normaalvector: Nu wordt berekend op basis van N1 , N2 , N4 en N5 . Op dezelfde manier worden de normaalvectoren Nv , Nx en Nz bepaald. Hieruit worden de intensiteiten Iu , Iv , Ix en Iy berekend. Intensiteit I5 in punt 5 : een lineaire interpolatie van de intensiteiten Iu en Iv . Intensiteit I6 : een lineaire interpolatie van de intensiteiten Ix en Iy . Tot slot wordt de intensiteit I7 in punt 7 berekend door een lineaire interpolatie van de intensiteiten I5 en I6 .