package Ġscenes čĊč Ċ import Ġmodeling . bounds č Ċ import Ġmodeling . load OBJ č Ċ import Ġmodeling . load OBJ from LZ MA č Ċ import Ġorg . open rnd r . color . Color RGB a č Ċ import Ġorg . open rnd r . draw .* č Ċ import Ġorg . open rnd r . math . Matrix 4 4 č Ċ import Ġorg . open rnd r . math . Vector 3 č Ċ import Ġorg . open rnd r . math . transforms . transform č Ċ import Ġjava . net . URL čĊč Ċ class ĠC rowd 0 2 Ġ{ čĊĠĠĠ Ġval Ġpersons Ġ= Ġmutable ListOf < VertexBuffer >() čĊĠĠĠ Ġval Ġir rad iance Ġ= ĠC ub emap . from Url (" file : data / textures / even ing _ ir r _ hdr 3 2 . dds ") čĊĠĠĠ Ġvar Ġprevious Model View Ġ= ĠMatrix 4 4 . IDENTITY čĊčĊĠĠĠ Ġinit Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġmeshes Ġ= Ġload OBJ from LZ MA ( URL (" file : data / meshes / c rowd . obj . lz ma ")) čĊĠĠĠĠĠĠĠ Ġval Ġformat Ġ= Ġvertex Format Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġposition ( 3 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġnormal ( 3 ) čĊĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠ Ġfor Ġ( mesh Ġin Ġmeshes . values ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbounds Ġ= Ġbounds ( mesh ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcorrect Ġ= Ġtransform Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtranslate ( bounds . corner Ġ* Ġ- 1 . 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġperson Ġ= Ġvertex Buffer ( format , Ġmesh . size Ġ* Ġ 3 ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġperson . put Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmesh . forEach Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcorrected Ġ= Ġit . transform ( correct ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġ 3 ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( corrected . positions [ i ] Ġ/ Ġ 5 0 . 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite ( corrected . normals [ i ]) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġpersons . add ( person ) čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġvar Ġpositions Ġ= Ġ( 0 .. 1 0 0 0 ). map Ġ{ ĠVector 3 . ZERO Ġ}. to Mutable List () čĊĠĠĠ Ġvar Ġdirections Ġ= Ġ( 0 .. 1 0 0 0 ). map Ġ{ ĠVector 3 . ZERO Ġ}. to Mutable List () čĊĠĠĠ Ġvar Ġlast Update Ġ= Ġ( 0 .. 1 0 0 0 ). map Ġ{ Ġ- 1 0 . 0 Ġ}. to Mutable List () čĊĠĠĠ Ġvar Ġdur ations Ġ= Ġ( 0 .. 1 0 0 0 ). map Ġ{ Ġ( Math . random () Ġ* Ġ 5 0 0 Ġ+ Ġ 5 0 0 )/ 1 0 0 0 . 0 Ġ}. to Mutable List () čĊčĊĠĠĠ Ġfun Ġupdate ( time : Double ) Ġ{ čĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġlast Update . size ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( time Ġ- Ġlast Update [ i ] Ġ> Ġdur ations [ i ] Ġ|| Ġlast Update [ i ] Ġ> Ġtime ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpositions [ i ] Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVector 3 (( Math . random () Ġ- Ġ 0 . 5 ) Ġ* Ġ 4 0 . 0 , Ġ 0 . 0 , Ġ( Math . random () Ġ- Ġ 0 . 5 ) Ġ* Ġ 4 0 . 0 ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdirections [ i ] Ġ= čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVector 3 (( Math . random () Ġ- Ġ 0 . 5 ) Ġ* Ġ 0 . 1 , Ġ 0 . 0 , Ġ( Math . random () Ġ- Ġ 0 . 5 ) Ġ* Ġ 0 . 1 ) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Update [ i ] Ġ= Ġtime čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġdraw Shadow ( drawer : ĠDraw er , Ġtime : ĠDouble , Ġrender Style : ĠRender Style Ġ= ĠRender Style ()) Ġ{ čĊĠĠĠĠĠĠĠ Ġdrawer . is olated Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . shade Style Ġ= Ġsh ade Style Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transform Ġ= Ġ""" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx _ fill . rgb Ġ= Ġv _ view Position ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx _ fill . r Ġ= Ġ 1 . 0 ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( person Ġin Ġpersons ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġ( time Ġ- Ġlast Update [ index ]). coerce In ( 0 . 0 , Ġ 1 . 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . is olated Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . translate ( positions [ index ]) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . shade Style ?. parameter (" previous Model View ", Ġdrawer . view Ġ* Ġdrawer . model Ġ* Ġtransform Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// translate ( directions [ index ]) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertex Buffer ( person , ĠDraw Primitive . TRI ANG LES , Ġ 0 , Ġ( person . vertex Count Ġ* Ġm ). toInt ()) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} čĊčĊĠĠĠ Ġfun Ġdraw ( drawer : ĠDraw er , Ġtime : Double , Ġrender Style : ĠRender Style Ġ= ĠRender Style ()) Ġ{ čĊĠĠĠĠĠĠĠ Ġval Ġg buffer Ġ= ĠRender Target . active čĊčĊĠĠĠĠĠĠĠ Ġdrawer . is olated Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . shade Style Ġ= Ġsh ade Style Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertex P reamble Ġ= Ġ""" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Ġvec 4 Ġprevious View ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Ġvec 4 Ġprevious Clip ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout Ġvec 4 Ġcurrent Clip ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment P reamble Ġ= Ġ""" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġvec 4 Ġprevious View ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġvec 4 Ġprevious Clip ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin Ġvec 4 Ġcurrent Clip ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertex Transform Ġ= Ġ""" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious View Ġ= Ġ( p _ previous Model View Ġ* Ġvec 4 ( x _ position , 1 . 0 )); čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Clip Ġ= Ġu _ projection Matrix Ġ* Ġprevious View ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Clip Ġ= Ġu _ projection Matrix Ġ* Ġu _ view Matrix Ġ* Ġu _ model Matrix Ġ* Ġvec 4 ( x _ position , Ġ 1 . 0 ); čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Transform Ġ= Ġ""" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx _ fill . rgb Ġ*= Ġpow ( texture ( p _ ir rad iance , Ġnormalize ( v _ world Normal )). rgb , Ġvec 3 ( 1 . 0 )); čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo _ normal . xyz Ġ= Ġv _ view Normal ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo _ normal . w Ġ= Ġ 1 . 0 ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo _ position . xyz Ġ= Ġv _ view Position ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo _ position . w Ġ= Ġ 1 . 0 ; čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvec 3 Ġview Direction Ġ= Ġnormalize ( inverse ( mat 3 ( u _ view Normal Matrix )) Ġ* Ġv _ view Position ); čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvec 3 Ġs Ġ= Ġreflect ( v _ world Normal , Ġview Direction ) Ġ* Ġmax ( 0 . 0 , Ġdot ( normalize ( v _ view Normal ), Ġnormalize ( view Direction ))); čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx _ fill . rgb Ġ+= Ġtexture ( p _ ir rad iance , Ġnormalize ( s )). rgb Ġ* Ġmax ( 0 . 0 , Ġs . y ); čĊčĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo _ normal . xyz Ġ= Ġv _ view Normal ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo _ normal . w Ġ= Ġ 1 . 0 ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo _ position . xyz Ġ= Ġv _ view Position ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo _ position . w Ġ= Ġ 0 . 1 ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġo _ velocity . xy Ġ= Ġ( current Clip / current Clip . w Ġ- Ġprevious Clip / previous Clip . w ). xy * vec 2 ( 1 2 8 0 , Ġ 7 2 0 )* 0 . 0 8 ; čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ""" čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput (" position ", Ġg buffer . color Buffer Index (" position ")) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput (" normal ", Ġg buffer . color Buffer Index (" normal ")) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoutput (" velocity ", Ġg buffer . color Buffer Index (" velocity ")) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" ir rad iance ", Ġir rad iance ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparameter (" previous Model View ", Ġprevious Model View ) čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfill Ġ= Ġrender Style . object Fill čĊčĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 čĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( person Ġin Ġpersons ) Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġ( time Ġ- Ġlast Update [ index ]). coerce In ( 0 . 0 , Ġ 1 . 0 ) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . is olated Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . translate ( positions [ index ]) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer . shade Style ?. parameter (" previous Model View ", Ġdrawer . view Ġ* Ġdrawer . model Ġ* Ġtransform Ġ{ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// translate ( directions [ index ]) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertex Buffer ( person , ĠDraw Primitive . TRI ANG LES , Ġ 0 , Ġ( person . vertex Count Ġ* Ġm ). toInt ()) čĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} čĊĠĠĠĠĠĠĠĠĠĠĠ Ġprevious Model View Ġ= Ġdrawer . view Ġ* Ġdrawer . model čĊĠĠĠĠĠĠĠ Ġ} čĊĠĠĠ Ġ} č Ċ }