Model oświetleni WYKŁAD 4 Adm Wojciechowsi
Źródł świtł 1. Puntowe f tt p = 1 min, 1 2 c1 c2d c3d 2. Kierunowe, gdzie d - odległość od źródł p 3. Stożowe model refletor Wrn p p spot = p cos γ = p L o D δ γ D Lustro refletor -L L p spot p cos 8 γ p p 0 γ 90 δ δ 90 gdzie: p intensywność njjśniejszego świtł, emitownego wzdłuż osi D, p wyłdni zwiercidlny, L ierune promieni świtł emitownego przez refletor, γ ąt między wetormi L i D.
gllight*nr_źródł, nzw_prmetru, wrtość; służy do oreśleni indywidulnych prmetrów źródł świtł o numerze od GL_LGHT0 do GL_LGHT7 podnym jo pierwszy rgument. nzw_prmetru wrtość GL_AMBENT Brw słdowej intensywności p, domyślnie p =0, 0, 0, 1 GL_DFFUSE pd, domyślnie 1,1,1, 1 dl źródł GL_LGHT0 i 0, 0, 0, 1 dl pozostłych GL_SPECULAR ps, domyślnie 1, 1, 1, 1 dl źródł GL_LGHT0 i 0, 0, 0, 1 dl pozostłych GL_POSTON Położenie źródł puntowego i refletor x, y, z, 1, lub ierune x, y, z, 0 źródł ierunowego. Domyślnie 0,0,1,0. Położenie i ierune źródł są modyfiowne przez bieżącą mcierz modelu widou i przesztłcne do ułdu o. GL_SPOT_DRECTON Kierune D refletor; domyślnie 0,0,-1. GL_SPOT_EXPONENT GL_SPOT_CUTOFF GL_CONSTANT_ATTENUATTON GL_LNEAR_ATTENUATTON GL_QUADRATC_ATTENUATTON Wyłdni p; domyślnie p=0.0 Kąt δ stoż; domyślnie δ=180 Współczynni c1 tłumieni źródł; domyślnie c1=1.0 c2, domyślnie c1=0.0 c3, domyślnie c3=0.0
Przyłd1: Źródło 1 y GLflot pozycj0[] = {0.0, 0.0, 1.5, 1.0}; //punt 3D GLflot pozycj2[] = {0.0, 1.5, 0.0, 1.0};//punt 3D GLflot ierune1[] ={1.0,-1.0,0.0,0.0};//punt w GLflot ierune2[] ={0.0,-1.0,0.0}; //wetor // źródło puntowe nr 0, np. żrów: gllightfvgl_lght0,gl_poston,pozycj0; gllightf GL_LGHT0,GL_CONSTANT_ATTENUATON,2.0; gllightf GL_LGHT0,GL_LNEAR_ATTENUATON,1.0; gllightf GL_LGHT0,GL_QUADRATC_ATTENUATON,0.5; // źródło ierunowe nr 1, np. słońce: gllightfvgl_lght1,gl_poston,ierune1; // źródło stożowe nr 2, np. refletor: gllightfvgl_lght2,gl_poston,pozycj2; gllightfvgl_lght2,gl_spot_drecton,ierune2; gllightf GL_LGHT2,GL_SPOT_CUTOFF,45.0; //połow ąt stoż gllightf GL_LGHT2,GL_SPOT_EXPONENT,2.0; z 45 Źródło 0 Źródło 2 x
Przyłd 2: Nieruchome źródło świtł W funcji init ustwion pozycj świtł. Wtedy oryginln pozycj świtł nie zostnie zmienion przez mcierz modelu-widou. void initvoid { } GLflot pozycj0[] = {0.0, 0.0, 1.5, 1.0}; //oryginln pozycj glclercolor0.0, 0.0, 0.0, 0.0; //olor tł gllightfvgl_lght0, GL_POSTON, pozycj0; glenblegl_lghtng; //włączone obliczeni oświetleni glenblegl_lght0; // włączone źródło świtł glenblegl_depth_test; // włączony test głęboości, Z-bufor
Przyłd 3: Ruchome źródło świtł rąży woół bryły. Njpierw ustwimy merę, potem świtło, potem obiety sceny. sttic GLdouble spin = 0;//ąt obrotu świtł void init void { glclercolor0.0, 0.0, 0.0, 0.0; glshdemodelgl_smooth; //głdie cieniownie powierzchni glenblegl_lghtng; glenblegl_lght0; glenblegl_depth_test; } void displyvoid { GLflot pozycj0[] = {0.0, 0.0, 1.5, 1.0}; } glclergl_color_buffer_bt GL_DEPTH_BUFFER_BT; glpushmtrix; //dl ustwieni mery i obietu glulooat0.0,0.0,5.0, 0.0,0.0,0.0, 0.0,1.0,0.0; //mer glpushmtrix; //dl ustwieni świtł po obrocie glrottedgldoublespin, 1.0, 0.0, 0.0; gllightfvgl_lght0, GL_POSTON, pozycj0; //świtło glpopmtrix; glutsolidtorus0.275, 0.85, 8, 15;//obiet glpopmtrix; glflush;
void resizeint w, int h { glviewport0,0,glsizeiw, GLsizeih; glmtrixmodegl_projecton; glloddentity; gluperspective40.0, GLflotw/GLfloth, 1.0, 20.0; glmtrixmodegl_modelvew; glloddentity; } //żde wciśnięcie lewego przycisu myszy obróci świtło void mouseint button, int stte, int x, int y { switchbutton { cse GLUT_LEFT_BUTTON: if stte == GLUT_DOWN {//lewy przycis myszy wciśnięty spin = spin 30%360; glutpostredisply;//odrysuj scenę dl nowego ąt } bre; defult: bre; } }
Przyłd 4: Źródło porusz się rzem z merą, t j przy zwiedzniu oplni z lmpą n głowie hedlight. Pozycj świtł musi być ustwion przed przesztłcenimi widou mery. Jeżeli mer zostnie przemieszczon, to świtło przemieści się rzem z nią, utrzymując stły dystns od mery. GLflot pozycj[] = {0.0,0.0,0.0, 1.0}; //dystns świtł od mery void resizevoid { // j w przyłdzie 3 i dodtowo n ońcu } gllightfvgl_lght0, GL_POSTON, pozycj; //zmienne globlne sterujące merą: sttic GLdouble ex,ey,ez, upx,upy,upz; void displyvoid { } glclergl_color_buffer_bt GL_DEPTH_BUFFER_BT; glpushmtrix; glulooat ex,ey,ez, 0.0,0.0,0.0, upx,upy,upz; glutsolidtorus 0.275, 0.85, 8, 15; glpopmtrix; glflush;
Mterił 1 2 3 4 Co dzieje się ze świtłem, tóre docier do powierzchni? Pochłninie 1, przepuszcznie bez złmni 2, przepuszcznie z złmniem 3 i odbijnie 4 świtł pdjącego n powierzchnię obietu. N b -L θl θr R da da Odbijnie świtł przez powierzchnię: prwo odbici θ L = θ R, b odbicie świtł od elementrnego frgmentu powierzchni da w sli mirosopowej: odbicie rozproszone i odbicie zwiercidlne
N Odbicie rozproszone L θ P = cos θ = d p d p d L o N Odbicie rozproszone: = d. Dl olejnych ul d = 0,3; 0,5; 0,8
Odbicie świtł otoczeni = env = env p =, dl olejnych ul = 0,8; 0,5; 0,3, p env P = d, = 0,3, dl olejnych ul d = 0,3; 0,5; 0,8;
Odbicie zwiercidlne L N θ θ P R V Jsność puntu P mleje, gdy ierune obserwcji V odchyl się od R. α n 5 20 n n s = ps cos α = ps R o V L N P θ θ α R V 100 Obserwtor nie zobczy reflesu świtł. s 0,2 0,4 0,6 = d s; = 0,2; d = 0,3
J obliczć R? L S Ncosθ N θ θ S R S R = N cosθ L, S = R N cosθ, = 2N cos θ L = 2N N o L L J przyspieszyć obliczeni? L N θ β H V Wetor połowiczny H = L V/ L V n n s = ps cos β = ps H o N H=const. gdy L=const. źródło świtł w niesończoności i V=const. obserwtor w niesończoności tylo dl obliczeń s.
Smoświecenie Efet rosnącego smoświeceni e
Równnie oświetleni Phong: n s d p env e V R L N o o = n s d p env e H N L N o o = Równnie oświetleni powinno spełnić zsdę zchowni energii. 1 s d 1 s d Dl olejnych ul, d, s: 0,5; 0,7; 0,6 0,3; 0,4; 0,6 0,2; 0,3; 0,5 0,1; 0,2; 0,4
Równni oświetleni dl olorowych świteł i powierzchni: d ds R G B R G B R G B O R O G O B 0,4 0,0 0,0 0,0 0,3 0,4 0,1 0,1 0,4 0,20 1 0,5 0,35 d 0,0 0,6 0,0 0,0 0,6 0,0 0,5 0,2 0,1 0,15 1 0,5 0,35 s 0,0 0,0 0,8 1,0 0,0 0,2 0,4 0,7 0,1 0,25 1 1,0 1,00 n N o L R o V, λ = eλ envλ λ pλ λ dλ gdzie λ =R,G,B sλ
Brw rozbłysu n metlu: model oświetleni Phong, b Model Torrnce-Sprrow b d=0,1; 0,05; 0,025 =2 d s=6 d m=0,25 η=17,9
n i s i ps i d i pd i p i m i i tt env e C f 1 0 N H N L o o λ λ λ λ λ λ = λ λ λ = lustrcj modelu oświetleni w bibliotece OpenGL θ β γ H V N L L D δ pi = pi, pdi, psi
glmteril*ścin, nzw_prmetru_mteriłu, wrtość; służy do oreśleni prmetrów modelu odbici Phong. Argument ścin wszuje, do tórej ściny obietu definiowny mterił m być zstosowny: przedniej GL_FRONT, tylnej GL_BACK, czy do obu GL_FRONT_AND_BACK. Prmetry mteriłu; dl olorów wrtość jest wsźniiem nzw_prmetru_mteriłu wrtość GL_AMBENT Współczynni odbici świtł otoczeni, domyślnie = 0.2, 0.2, 0.2, 1.0 GL_DFFUSE d, domyślnie 0.8, 0.8, 0.8, 1.0. Wyniow wrtość słdowej A intensywności obliczonej z r. oświetleni jest równ słdowej A oloru d GL_AMBENT_AND_DFFUSE Wspólny współczynni rozproszeni: = d GL_SPECULAR s, domyślnie 0.0, 0.0, 0.0, 1.0 GL_SHNNESS Wyłdni odbici zwiercidlnego n z zresu <0.0, 128.0>, domyślnie n = 0.0 GL_EMSSON ntensywność smoświeceni e, domyślnie e = 0.0, 0.0, 0.0. 1.0 GL_COLOR_NDEXES ndesy oloru mbient, diffuse i speculr
glcolormterilścin, nzw_współczynni_odbici; sygnlizuje, że występując po niej omend glcolor* m zmienić wrtość współczynni odbici: GL_AMBENT, d GL_DFFUSE, s GL_SPECULAR lub =d GL_AMBENT_AND_DFFUSE. Jest użyteczn, gdy tylo jeden współczynni mteriłu zdefiniownego wcześniej omendą glmteril* m ulec zminie, poniewż żde nowe wywołnie glcolormteril powoduje, że poprzedni zmin nie obowiązuje. glenblegl_color_materal; gldisblegl_color_materal; włącz/wyłącz trtownie bieżącego oloru jo współ. odbici. gllightmodel*typ_modelu, wrtość; służy do oreśleni prmetrów globlnych oświetleni. typ_modelu wrtość GL_LGHT_MODEL_AMBENT Brw env, domyślnie 0.2, 0.2, 0.2, 1.0 GL_LGHT_MODEL_LOCAL_VEWER GL_LGHT_MODEL_TWO_SDE Obserwtor dl odbici zwiercidlnego: domyślnie w niesończoności V= 0,0,1 wrtość równ 0.0 lub GL_FALSE, lub lolny - V obliczne z puntu widzeni i wierzchoł wrtość = GL_TRUE. Jednostronne oświetlenie powierzchni wrtość równ 0.0 lub GL_FALSE, lub dwustronne GL_TRUE.