előadásfóliákról

Download Report

Transcript előadásfóliákról

Színek és megvilágítás
5. előadás
Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2012
Emlékeztető….
illúzió
modellezés
számok
Virtuális világ
modell
képszintézis
Képpontok:
• vörös
• kék
• zöld
Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba
Tanagyag forrás ® Szirmay-Kalos László, BME
Metafórák:
• optika
• 2D rajzolás
• festés
• analógiák
számítás
mérés
Modellezés
megvilágítás
geometria
mozgás
modell
Szín, anyag - most
(textúrák : jövő órán)
Számítógépes Grafika 2012, PPKE ITK, Benedek Csaba
képszintézis
stúdió
objektumok
kamera
kép (sorozat)
Képszintézis
feladatai
Vektorizáció
Transzformációk
Vágás
Takarás
Árnyalás
Számítógépes Grafika 2012, PPKE ITK, Benedek Csaba
Árnyalás

A látszódó objektum adott képpontban
érvényes színének meghatározása


2-D grafika: saját szín alkalmazása
saját anyag + a térben fennálló fényviszonyok
együttes függvénye
Zöld hal
Számítógépes Grafika 2012, PPKE ITK, Benedek Csaba
„Sárga” tórusz
Színkezelés alapjai a 3D
grafikában
Számítógépes Grafika 2012, PPKE ITK, Benedek Csaba
Tanagyag forrás ® Szirmay-Kalos László, BME
Fotometriai alapok


Fény = elektromágneses hullámok szuperpozíciója
Fényforrás jellemzője: F() spektrális energia eloszlás
F()



időegységre eső kibocsátott energia (tehát: teljesítmény) „sűrűsége”
az adott hullámhosszon (analógia: folytonos valószínűségi változó
sűrűségfüggvénye)
A fényforrás által 1 és 2 hullámhosszok között kibocsátott
teljesítmény
2
P1 , 2 =  F( )d
1

A fényforrás összteljesítménye:

Pössz =  F( )d
0
Színelméleti alapok

Fény - Színérzet


Összetett fény: „sok hullámhossz”
Monokromatikus fény: csak egyféle
hullámhosszú összetevő
„Dirac-delta” függvény: F() = Fc d()
Érzékelés 3 érzékelővel: tristimulus értékek
 ugyanazt a színérzetet többféle keverékfénynyaláb is adhatja




Színérzékelés: monokromatikus fény
F()=d()

színérzet: r, g, b

 nm
444
526
645
2
g()
1

r()
b()
r, g, b
400
500
600
700
Színérzékelés:
nem monokromatikus fény

Egységnyi energiájú monokromatikus
színillesztés:
F ()=d()

r = r (), g= g (), b=b ()
Nem monokromatikus eset:
F() = =  F () d() d 
F ()

r =  F () r () d 
g =  F () g () d 
b =  F () b () d 
Spektrális színkezelés

model
R, G, B
színillesztés
R, G, B kép
Képszintézis
sok hullámhosszon

Látható
spektrum
Nem spektrális színkezelés
R, G, B
színillesztés

R, G, B
model
Akkor pontos, ha a képszintézis „lineáris”
Képszintézis
3 hullámhosszon

R, G, B
színillesztés
???
R, G, B
R,G,B kép
Színek definiálása
kék
B
fekete
magenta
G zöld
R
C
fehér
cián
vörös
sárga
kék
fehér
fehér
M
Y
zöld
fekete
vörös
H S
L
fekete
szürkék
Képszintézis = valós világ illuziója
Tone
mapping
pixel
Virtuális világ

színérzet


Valós világ


Anyagok a 3D grafikában

Emittáló anyagok - fényt kibocsátanak ki


Diffúz felületek ~ „matt” anyagok



A beérkező fény energiáját minimális veszteséggel eresztik át
Áttetsző felület


a beérkező fénysugár energiájának jelentős részét az ideális
visszaverődési irány környezetébe verik vissza
„csillogó” vagy „polírozott” anyagok
Átlátszó felületek


minden irányban ugyanúgy verik vissza a fényt
Spekuláris vagy tükröző felületek


„fényforrás”
„homályosan” látunk keresztül rajtuk
Összetett anyagok

A fentiek „keveréke”- legtöbb valós anyag ilyen
Fényforrások

Pozicionális fényforrás (pl elektr. izzó)


Irány fényforrás


pozicionális
Minden pontban és irányban azonos
intenzitású
Irány fényforrás
Szpotlámpa


d
Irány és intenzitás a tér minden pontjában
azonos (végtelen távoli sík sugárzó)
Ambiens fényforrás


Minden irányba sugároz, de az intenzitás a
távolság négyzetének arányában csökken
Jellemzői: helye, iránya, kúpos hatóterület
Égbolt fény:

ha az adott irányban semmi sincs
szpotlámpa
Fényterjedés modelljei

Geometria+sugárűsűség:
 Absztrakt fényforrás erőssége, típusa, pozíciója
 Fény-anyag kölcsönhatás:
 Visszaverő felület tulajdonságai,
 Beesési irány
 Nézőponti irány
x
e
L (x,V,)
V
Térbeli irányok definíciója

2D szög = az egységkör ívének hossza



tartalmazott irányok a körcikk ívének csúcsába
mutatnak, mértékegység: radián
3D szög (térszög): az egységgömb felületének a
része, mértékegység: szterradián (sr)
Kis felületelem (dA) láthatósági szöge adott
pontból sr-ban: dw = dA cos / r2
•r: a felületi elem és a
középpont távolsága
•: a felületi elem
normálisának és a
sugáriránynak a
bezárt szöge
Fény erősség jellemzése


Fluxus F: egységnyi idő alatt, adott hullámhossz
tartományban átadott energia [mértékegység: W Watt,
analógia ~ adott felületen átlépő fotonok száma]
Radiancia (intenzitás), L: dA felületelemet dw szögben
elhagyó dF fluxus osztva a kilépési irányból látható
területtel és a térszöggel
 Egy egységnyi látható felület által egységnyi térszög
alatt kibocsátott teljesítmény [Watt/ sr/ m2]
V
dw
dF
dF
L(x,V) =
dA cos dw

dA
Fény-felület kölcsönhatás
BRDF: Bi-directional Reflection Distribution Function
Sugársűrűség = Bejövő
BRDF
Geometria
L(x,V) = Lin(x, L)  fr (L,x,V)  cos’
’ beesési szög
def
L (x,V)
fr (L,x,V) = in
L (x,L)cos’
Helmholtz törvény:
fr (L,x,V) = fr (V,x,L)
V
L
’
’
x
Lin
Spektrális versus RGB képszintézis
Le()
Spektrális
f r()
Le()
F ()
Képszintézis
Színleképzés
szorzás
lineáris
Színleképzés
Le[r], Le[g], Le[b]
Képszintézis
RGB
f r()
Színleképzés
R, G, B
f r[r], f r[g], f r[b]
R, G, B
Anyagmodellek- diffúz anyagok





Radiancia = Bejövő  BRDF  cos’
L (x,V,) = Lin(x, L)  fr,  (L,x,V)  cos’
Diffúz anyag: a BRDF a nézeti iránytól
független
Helmholtz: a BRDF megvilágítási
V N L
iránytól is független
’
A BRDF
fr,  (L,x,V) = kd, (x)
Diffúz visszaverődés = nagyon rücskös
– sokszoros fény-anyag kölcsönhatás
– Színes - : pl R, G és B komponensekre külön
számítás
Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba
Tanagyag forrás ® Szirmay-Kalos László, BME
x
Lambert törvény

Pont/irány fényforrásra
válasz
– BRDF irányfüggetlen,
DE a sugársűrűség
függ a
megvilágítási iránytól
Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba
Tanagyag forrás ® Szirmay-Kalos László, BME
Lref = Lin kd cos+’
cos’ = N·L
N
’
L
Sima felületek
Fresnel egyenletek
Lin
’ ’
n = sin’ 
sin
Lin  F
Lin (1-F)
„Sima” = 1 pixelben látható
felület síknak tekinthető
•Ideális tükör/törő felület: csak a tükör/törés
irányban veri vissza a fényt.
•Elnyelés nagysága az anyag F( ,’) Fresnel
együtthatójától függ – jelentős függés a
megvilágítás irányától és a hullámhossztól!
Fresnel függvény
F (, ’)

F(, ’)

’
arany
’
ezüst
Tükörirány számítása
N
v + N cosa v + N cosa
v
N cosa v
r
a a
x
cos a = - (v·N)
vr = v + 2 N cos a
L = vr, V= v
ReflectDir( L, N, V ) {
L = V - N * (N * V) * 2;
}
Törési irány
N
v + Ncosa
v
a
sin a
n=
sin b
Nsinb
-Ncosb
b
vt
N
SnelliusDescartes
v +Ncosa
N = sina
vt = N sinb - Ncosb
vt = v /n + N(cosa/n- cosb)
cosb = 1-sin2b = 1-sin2a/n2
vt = v/n + N (cosa/n -1-(1-cos2 a)/n2 )
Fénytörő
anyagok
Spekuláris visszaverődés:
Phong modell
cosy = R·V
R
R
V
’
= diffúz +
V

’
y
Kell egy függvény, ami nagy y=0 -ra és gyorsan csökke
Lref = Lin ks (cos+y)n
fr (L,x,V) = ks cosn y /cos’
Nem szimmetrikus!
Cook-Torrance
He-Torrance
„Rücskös” felületek
’
1 pixelben látható felület
Mi: viselkedésileg érvényes modell
Diffúz+Phong anyagok
Sokszoros fény-anya
kölcsönhatás
„Saját szín”
diffúz
Egyszeres fényanyag
kölcsönhatás,
nemfémeknél
hullámhossz
független
Phong
diffúz +
Phong
n=
5
10
20
50
Phong-Blinn modell (OpenGL)
Felezővektor
H
d
H = (L+V)/|L+V|
N
’
L
V
Lref = Lin ks (cos+d)n
fr (L,x,V) = ks cosn d /cos’
cosd = N·H
Képszintézis
R, G, B
pixel
Virtuális világ
L ()
L ()
Le()
f r()

Pixelben látható felület meghatározása
 A látható pont szem irányú sugársűrűsége

Megoldási
kompromisszumok
pixel
lokális illumináció
rekurzív sugárkövetés
globális illumináció
Sugárkövetés:
ray-casting, ray-tracing
Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba
Tanagyag forrás ® Szirmay-Kalos László, BME
Sugárkövetés

A képernyő pixeleire egymástól függetlenül
oldja meg a takarási és árnyalási feladatot



szimuláljuk a fény terjedését, a fénysugarak és
felületek ütközését
fotonkövetés: szemből indul, a fény útját
visszafele rekurzívan követjük
Ingyenes sugárkövető program: Pov-Ray
(http://www.povray.org)
Sugárkövetés

Egyszerűsített illuminációs modell


csak az ideális (koherens) visszaverődési/törési
irányokra számol többszörös visszaverődést
illetve törést
inkoherens komponensek: elhanyagolja az
indirekt megvilágítást, csak az absztrakt
fényforrások direkt hatását veszi figyelembe
Lokális illumináció absztrakt
fényforrásokkal
Csak absztrakt
fényforrások
direkt megvilágítása
pixel
Ll
’l
N
V
L (V)  Sl Ll (Ll)* fr (Ll ,N,V)cos ’l
Absztrakt fényforrásokból származó megvilágítás.
(Irányforrás = konstans; Pontforrás = távolság négyzetével csökken
Ha takart, akkor zérus)
Lokális illumináció absztrakt
fényforrásokkal
Csak absztrakt
fényforrások
direkt megvilágítása
pixel
Ll
Hl
N
V
L (V)  Sl Ll (Ll)*{kd (Ll N)++ks ((HlN)+)shine}
Absztrakt fényforrásokból származó megvilágítás.
(Irányforrás = konstans; Pontforrás = távolság négyzetével csökken
Ha takart, akkor zérus)
GI
Ambiens tag
Lokális illumináció
+ ambiens tag
L (V)  Sl Ll (Ll)* fr (Ll ,N,V)cos ’l + ka*La
Lokális illumináció árnyék nélkül
pixel
Láthatóság számítás a szemből
 A fényforrás fényének visszaverése a
nézeti irányba: felületi normális

Láthatóság a szemből
pixel
eye
ray(t) = eye + v·t, t > 0
FirstIntersect(ray  t, iobject, x)
t = FLT_MAX;
FOR each object
tnew = Intersect( ray, object );
// < 0 ha nincs metszés
IF (tnew > 0 && tnew < t ) { t = tnew; iobject = object; }
ENDFOR
IF (t < FLT_MAX) { x = eye + v·t; RETURN (t, iobject, x); }
RETURN „no intersection”
END
Metszéspont számítás gömbbel
|r – center|2 = R2
r
R
center
ray(t) = eye + v·t
Nincs gyök
1 gyök
2 gyök
|ray(t) – center|2 = (ray(t) – center)(ray(t) – center)=R2
(vv)t2+2 ((eye – center)v)t +((eye – center)(eye – center))–R2 = 0
Wanted: a pozitív megoldások közül a kisebb
Felületi normális: (ray(t) – center)/R
Implicit felületek



A felület pontjai: f(x,y,z) = 0 vagy f(r) = 0
A sugár pontjai: ray(t) = eye+v·t
A metszéspont: f( ray(t) ) = 0,



1 ismeretlenes, ált. nemlineáris egyenlet: t*
(x*,y*,z*) = eye+ v·t*
Normálvektor = grad f

x*,y*,z*
0=f(x,y,z) = f(x*+(x-x*),y*+(y-y*),z*+(z-z*))
f
f
f(x*,y*,z*) + f
(x-x*)+
(y-y*)+
(z-z*)
x
y
z
Az érintősík
egyenlete:
f
x
( ,
f
y
,
f
z
)(x-x*, y-y*, z-z*) = 0
Kvadratikus felületek
x
Kvadratikus felület: [x,y,z,1] A y
z
1
Ellipszoid
2
2
2
x
y
z
 +  +  -1=0
a2 b2 c2
=0
Végtelen kúp
x2
y2 2
 +  - z =0
a2 b2
Másodfokú
egyenlet
Végtelen henger
x2 y2
2 + 2 - 1 =0
a
b
Háromszög
n
r3
(r – r0)  n = 0
p
r3
ray(t) = eye + v·t
r2
r1
1. Síkmetszés:
normál:
p
r2
r1
(ray(t) - r1)  n = 0, t > 0
n = (r2 - r1)  (r3 - r1)
(r1- eye)  n
t= vn
2. A metszéspont a háromszögön belül van-e?
((r2 - r1)  (p - r1))  n > 0
Felületi normális: n
((r3 - r2)  (p - r2))  n > 0
vagy árnyaló normálok
((r1 - r3)  (p - r3))  n > 0
(shading normals)
Árnyaló normálok
N2
N
N3
N = A X + B Y+C
N1
közelített felület
normálvektora
(X1 , Y1 , Z1 )
A, B, C
N1 = A X1 + B Y1 + C 3 változós
N2 = A X2 + B Y2 + C lineáris
N3 = A X3 + B Y3 + C egyenletrsz.
Parametrikus felületek
r(u,v), u,v in [0,1]
ray(t) = eye + v·t, t > 0
r(0,0)
r(0,0.5)
r(0.5,0)
r(0,1)
r(u,v) = ray(t)
Háromismeretlenes ált.
nem lineáris egyenletrendszer
megoldás: u*,v*,t*
Teszt:
0< u*,v* < 1,
t* > 0
r(1,0)
r(0.5,0.5)
r(1,1)
Rekurzív tesszelláció:
nem robusztus
Parametrikus felületek
normálvektora
r(u,v)
n(u,v)=
u
r(u,v*)
u
u=u*
r(u,v)
r(u*,v)

r(u,v)
v
r(u*,v*)
r(u,v*)
r(u*,v)
v
v=v*
u=u*
v=v*
Ray-casting képek
Lokális
illumináció
Lokális
illumináció
+
árnyékok
Rekurzív sugárkövetés
Tört sugár
T
V
R
Ll
Tükör
sugár
Árnyék sugár
L (V)Sl Ll (Ll)*(kd(LlN)++ks((HlN)+)shine)+ka*La
+ kr*Lin (R)
Tükör irányból
Fresnel
érkező fény
+
kt *Lin(T)
Törési irányból
1-Fresnel érkező fény
Sugárkövetés (Ray-tracing)
ray
p
eye
Render( )
for each pixel p
Ray r = ray( eye  pixel p )
color = Trace(ray)
WritePixel(p, color)
endfor
end
p
color
Sugárkövetés: Trace függvény
Color Trace( ray )
ray
IF (FirstIntersect(ray  obj, x) < 0)
RETURN La
x
ENDIF
color = DirectLightSource(x, ray.v, obj)
IF ( obj.mirror )
ReflectDir( ray, reflected ray)
color += obj.kr * Trace( reflected ray )
ENDIF
IF ( obj.refractive && RefractDir( ray, refracted ray ) )
color += obj.kt * Trace( refracted ray )
ENDIF
RETURN color
Sugárkövetés: Trace függvény
Color Trace( ray, d )
IF (d > dmax) RETURN La
ray
IF (FirstIntersect(ray  obj, x) < 0)
RETURN La
x
ENDIF
color = DirectLightSource(x, ray.v, obj)
IF ( obj.mirror )
ReflectDir( ray, reflected ray)
color += obj.kr * Trace( reflected ray, d+1 )
ray.v-2N(Nray.v)
ENDIF
IF ( obj.refractive && RefractDir( ray, refracted ray ) )
color += obj.kt * Trace( refracted ray, d+1 )
ENDIF
RETURN color
ray.v/n+N((Nray.v)/n-1-(1-(Nray.v)2)/n2)
DirectLightSource
DirectLightSource( x, v, obj )
color = obj.ka*La
FOR each lightsource l DO
shadowray.eye = x; shadowray.v = light[l].pos – x;
árnyék
(t,y) = FirstIntersect( shadowray );
IF (t < 0 || |x-y| > |x-light[l].pos|)
color += light[l].Intensity *
(obj.kd (LlN)+ + obj.ks ((HlN)+)obj.shine )
ENDIF
ENDFOR
RETURN color
v
y
x
Befoglaló térfogat
(Bounding Volume)
double IntersectBV( ray, object ) // < 0 ha nincs
IF ( Intersect( ray, bounding volume of object) < 0)
RETURN -1;
RETURN Intersect( ray, object );
END
Térpartícionáló módszerek
objektumok
Előfeldolgozás
Sugár
követés
Térpartícionáló
adatstruktúra
Első
metszéspont
Adatstruktúra:
• Ha ismert a sugár, akkor a potenciális metszett
objektumok számát csökkenti
• Ha a potenciálisak közül találunk egyet, akkor a többi
nem lehet közelebb
Reguláris térháló
Sugárkövetés:
FOR each cell of the line // line drawing
Metszés a cellában lévőkkel
IF van metszés RETURN
ENDFOR
átlagos eset komplexitás: O(1 )
Előfeldolgozás:
Minden cellára a metszett objektumok
komplexitás: O(n·c ) = O(n 2)
Nyolcas (oktális) fa
Faépítés( cella ):
IF a cellában kevés objektum van
cellában regisztráld az objektumokat
ELSE
cellafelezés: c1, c2, …, c8
Faépítés(c1); … Faépítés(c8);
ENDIF
2
1
1
3
2
Octree
3
Sugárkövetés:
FOR összes sugár által metszett cellára
Metszés a cellában lévőkkel
IF van metszés RETURN
3 ENDFOR
Binary Space Partitioning fa (kd-fa)
2
1
3
1
2
kd-tree
Faépítés( cella ):
IF a cellában kevés objektum van
cellában regisztráld az objektumokat
ELSE
sík keresés
cella felezés a síkkal: c1, c2
Faépítés(c1); Faépítés(c2);
ENDIF
Sugárkövetés:
FOR each cell intersecting the line
Metszés a cellában lévőkkel
3
IF van metszés RETURN
ENDFOR
Sugárkövető program
typedef struct{double x,y,z}vec;vec U,black,amb={.02,.02,.02}; struct sphere{ vec cen,color;double rad,kd,ks,kt,kl,ir}*
*best,sph[]={0.,6.,.5,1.,1.,1.,.9, .05,.2,.85,0.,1.7,-1.,8.,-.5,1.,.5,.2,1.,.7,.3,0.,.05,1.2,1.,8.,-.5,.1,.8,.8, 1.,.3,.7,0.,0.,1.2,3
.8,1.,7.,0.,0.,0.,.6,1.5,-3.,-3.,12.,.8,1., 1.,5.,0.,0.,0.,.5,1.5,};yx; double u,b,tmin,sqrt(),tan();double vdot(A,B)vec A ,B;
{return A.x*B.x+A.y*B.y+A.z*B.z;}vec vcomb(a,A,B)double a;vec A,B; {B.x+=a* A.x;B.y+=a*A.y;B.z+=a*A.z;return B;}
vec vunit(A)vec A;{return vcomb(1./sqrt( vdot(A,A)),A,black);}struct sphere *intersect(P,D)vec P,D;{best=0;tmin=1e30
s= sph+5;while(s-->sph)b=vdot(D,U=vcomb(-1.,P,s->cen)),u=b*b-vdot(U,U)+s->rad*s ->rad,u=u>0?sqrt(u):1e31,u=b
1e-7?b-u:b+u,tmin=u>=1e-7&&u<tmin?best=s,u: tmin;return best;}vec trace(level,P,D)vec P,D;{double d,eta,e;vec N,
struct sphere*s,*l;if(!level--)return black;if(s=intersect(P,D));else return amb;color=amb;eta=s->ir;d= -vdot(D,N=vunit(
(-1.,P=vcomb(tmin,D,P),s->cen )));if(d<0)N=vcomb(-1.,N,black),eta=1/eta,d= -d;l=sph+5;while(l-->sph)if((e=l ->kl*vdo
U=vunit(vcomb(-1.,P,l->cen))))>0&&intersect(P,U)==l)color=vcomb(e ,l->color,color);U=s->color;color.x*=U.x;color.y*
U.y;color.z*=U.z;e=1-eta* eta*(1-d*d);return vcomb(s->kt,e>0?trace(level,P,vcomb(eta,D,vcomb(eta*d-sqrt (e),N,blac
black,vcomb(s->ks,trace(level,P,vcomb(2*d,N,D)),vcomb(s->kd, color,vcomb(s->kl,U,black))));}
main(){printf("%d %d\n",32,32);while(yx<32*32) U.x=yx%32-32/2,U.z=32/2-yx++/32,U.y=32/2/tan(25/114.591559026
U=vcomb(255., trace(3,black,vunit(U)),black),printf("%.0f %.0f %.0f\n",U);}/*minray!*/
Sugárkövetés: eredmény
Számítási idő  Pixelszám x Objektumszám x (Fényforrás szám+1)
Árnyalás az OpenGL-ben

Egyszerűsített árnyalási egyenlet




ahol a fizikai leírás túl bonyolult, tapasztalati úton
bevált képleteket használ
használ spekuláris és diffúz visszaverődést, nincs
azonban törés és tükrözés
bevezeti a diffúz és spekuláris fény fogalmát –
ennek a különválasztásnak nincs fizikai jelentése,
de a megjelenítéshez nagyobb szabadságot ad
Csak a csúcspontokban számít színt

többi pontban interpolál a környező csúcspontok
színéből
Megvilágítás modell
void glLightModel{if}{,v}(GLenum
pname, TYPE param);
pname lehet:
 GL_LIGHT_MODEL_AMBIENT


GL_LIGHT_LOCAL_VIEWER


ambiens RGBA fény az egész színtérben
lokális vagy végtelenben lévő (default) „nézeti pont”
GL_LIGHT_MODEL_TWO_SIDE

poligonjainkhoz egy- vagy mindkét oldalon kell
megvilágítást számolnunk
Fényforrás megadása

Fény ki-be kapcsolás:



glEnable(GL_LIGHTING);
glDisable(GL_LIGHTING)
void glLight{if}{,v}(GLenum light,
GLenum pname, TYPE param);



light: GL_LIGHT0, GL_LIGHT1,... , or GL_LIGHT7
param: különböző paraméterek (lásd köv. slide-ok)
Az egyes fényforrásokat is külön engedélyezni kell
(azaz bekapcsolni):

Pl glEnable(GL_LIGHT0);
Fényösszetevők az OpenGL-ben

Absztrakt fényösszetevők:


objektumok által kibocsátott fény
környezeti fény – ambient light - GL_AMBIENT


szórt fény - diffuse light - GL_DIFFUSE:


kompenzálja a többszörös visszaverődések
elhanyagolását
iránnyal rendelkezik, mindig valamely fényforrásból
jön. Az objektumokkal ütközve minden irányba azonos
módon és mértékben verődik vissza
csillogás - specular light - GL_SPECULAR

van iránya és forrása, hatása nem csak az
anyagtulajdonságoktól és a normálisoktól függ, hanem
a nézőponttól is
Minta

„Diffúz fényforrás” megadása:
GLfloat light_diffuse[] = { 1.0,
1.0, 1.0, 1.0 };
glLightfv(GL_LIGHT0, GL_DIFFUSE,
light_diffuse);
OpenGL fényforrások

3 típus:

irányforrás


konstans fényerősség, adott irány
pontszerű

forrástól távolodva csökkenő fényerősség
1
al = k +k d +k d 2
0,l
1,l l
2,l l




k0,l: GL_CONSTANT_ATTENTUATION
k1,l: GL_LINEAR_ATTENTUATION
k2,l: GL_QUADRATIC_ATTENTUATION
szpotlámpa

kúpos hatóterület
Fényforrás pozíciója

GL_POSITION paraméter

a pozíció (x, y, z, w) koordinátai
w≠1: pontszerű fényforrás vagy szpotlámpa
w=0: végtelenben lévő fényforrás = irányforrás
default: (0.0, 0.0, 1.0, 0.0)

Példa: pontforrás inicializálás és beállítása:



GLfloat light_position[] = { 1.0, 1.0, 1.0, 1.0 };
glLightfv(GL_LIGHT0, GL_POSITION, light_position);
glLightf(GL_LIGHT0, GL_CONSTANT_ATTENUATION, 2.0);
glLightf(GL_LIGHT0, GL_LINEAR_ATTENUATION, 1.0);
glLightf(GL_LIGHT0, GL_QUADRATIC_ATTENUATION, 0.5);
glEnable(GL_LIGHT0);
Spotlight (reflektor)

Irány és vágási szög:
 GL_SPOT_DIRECTION
 GL_SPOT_CUTOFF

Minta kód:
glLightf(GL_LIGHT0, GL_SPOT_CUTOFF, 45.0);
GLfloat spot_direction[]={-1.0,-1.0, 0.0 };
glLightfv(GL_LIGHT0, GL_SPOT_DIRECTION,
spot_direction);
Anyagtulajdonságok

void glMaterial{if}(GLenum face, GLenum
pname, TYPE param);


face: GL_FRONT, GL_BACK, vagy
GL_FRONT_AND_BACK
pname: GL_AMBIENT, GL_DIFFUSE,
GL_AMBIENT_AND_DIFFUSE, GL_SPECULAR
GL_SHININESS (n kitevő a Phong-Blinn
illuminációs képletben); GL_EMISSION (az anyag
által kibocsátott fény színe – ha van)
Gyakorlati feladatok

1. gömb megjelenítése és árnyalása különböző
anyagi és megvilágítási jellemzők függvényében
Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba
Tanagyag forrás ® Szirmay-Kalos László, BME
Gyakorlati feladatok

2. feladat: mozgó fényforrás szimulálása
Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba
Tanagyag forrás ® Szirmay-Kalos László, BME
Gyakorlati feladatok

3. Különböző tulajdonságú gömbök között
mozgó fényforrás
Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba
Tanagyag forrás ® Szirmay-Kalos László, BME
Gyakorlati feladatok

4. szoba megjelenítő teáskannával
Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba
Tanagyag forrás ® Szirmay-Kalos László, BME
Testek

Ellenpéldák

Érvényes testek: reguláris halmaz



nem lehetnek alacsony dimenziós elfajulásai
minden határpont mellett van belső pont
Garantáltan érvényes testet építő módszerek



2.5 dimenziós eljárások
speciális felületi modellezés: B-rep
Konstruktív tömörtest geometria
2.5 dimenziós módszerek
Kihúzás: extrude
Forgatás: rotate
Felületmodellezők

Test = határfelületek gyűjteménye

Topológiai ellenőrzés (Euler tétel):
csúcs + lap = él + 2
B-rep: Euler operátorok
MEF
MVE
E
.
V
E E1
Csinálj csúcsot
és élt
MEVVF
F
F
E F1
F
Csinálj élt
és lapot
V2
E
semmi
V1
Csinálj élt,
két csúcsot
és lapot
Gyakorlati Euler operátorok

Edge split
csúcs + lap = él + 2

Poligon split

Élzsugorítás v. csúcspont
összevonás
-Edge Collapse
Gyakorlati Euler operátorok

Poligon kihúzás
(Face extrude):
ep: a poligon éleinek a
száma




2ep új él,
ep+1 új lap,
ep új csúcs
1 eltűnő lap
e’=e+2ep l’=l+ep+1-1 c’=c+ep
l’+c’=l+c+2ep=e+2+2ep=e’+2
Poligon modellezés: téglatest
Poligon modellezés:
1. extruding
Poligon modellezés:
2. extruding
Poligon modellezés:
4. és 5. extruding
Poligon modellezés:
6. extruding
Subdivision simítás