package Ġnet . pt ers . learn opengl . android . scenes . advanced lighting Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . opengl . GLES 3 0 .* Ċ import Ġcom . cur ious creature . kotlin . math . Float 3 Ċ import Ġcom . cur ious creature . kotlin . math . perspective Ċ import Ġnet . pt ers . learn opengl . android . R Ċ import Ġnet . pt ers . learn opengl . android . tools .* Ċ Ċ class ĠScene 2 Gamma Correction Ġprivate Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġvertex Shader Code : ĠString , ĊĠĠĠ Ġprivate Ġval Ġfragment Shader Code : ĠString , ĊĠĠĠ Ġprivate Ġval Ġfloor Texture : ĠTexture , ĊĠĠĠ Ġprivate Ġval Ġfloor Texture Gamma Correct ed : ĠTexture Ċ ) Ġ: ĠScene () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġgamma Correction Enabled Ġ= Ġtrue ĊĊĠĠĠ Ġprivate Ġval Ġlight Colors Ġ= Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠ 0 . 2 5 f , Ġ 0 . 2 5 f , Ġ 0 . 2 5 f , ĊĠĠĠĠĠĠĠĠ 0 . 5 f , Ġ 0 . 5 f , Ġ 0 . 5 f , ĊĠĠĠĠĠĠĠĠ 0 . 7 5 f , Ġ 0 . 7 5 f , Ġ 0 . 7 5 f , ĊĠĠĠĠĠĠĠĠ 1 . 0 f , Ġ 1 . 0 f , Ġ 1 . 0 f ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġlight Positions Ġ= Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠ Ġ- 3 . 0 f , Ġ 0 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 1 . 0 f , Ġ 0 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠĠ 1 . 0 f , Ġ 0 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠĠ 3 . 0 f , Ġ 0 . 0 f , Ġ 0 . 0 f ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġplane Vertices Ġ= Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠ Ġ// ĠPosition s , Ġnormals , Ġtexture Ġcoordinates ĊĠĠĠĠĠĠĠĠ 1 0 . 0 f , Ġ- 0 . 5 f , Ġ 1 0 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f , Ġ 0 . 0 f , Ġ 1 0 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 1 0 . 0 f , Ġ- 0 . 5 f , Ġ 1 0 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f , Ġ 0 . 0 f , Ġ 0 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 1 0 . 0 f , Ġ- 0 . 5 f , Ġ- 1 0 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f , Ġ 0 . 0 f , Ġ 0 . 0 f , Ġ 1 0 . 0 f , ĊĊĠĠĠĠĠĠĠĠ 1 0 . 0 f , Ġ- 0 . 5 f , Ġ 1 0 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f , Ġ 0 . 0 f , Ġ 1 0 . 0 f , Ġ 0 . 0 f , ĊĠĠĠĠĠĠĠ Ġ- 1 0 . 0 f , Ġ- 0 . 5 f , Ġ- 1 0 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f , Ġ 0 . 0 f , Ġ 0 . 0 f , Ġ 1 0 . 0 f , ĊĠĠĠĠĠĠĠĠ 1 0 . 0 f , Ġ- 0 . 5 f , Ġ- 1 0 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f , Ġ 0 . 0 f , Ġ 1 0 . 0 f , Ġ 1 0 . 0 f ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġval Ġcamera Ġ= ĠCamera ( ĊĠĠĠĠĠĠĠ Ġeye Ġ= ĠFloat 3 ( 0 . 0 f , Ġ 5 . 0 f , Ġ 5 . 0 f ), ĊĠĠĠĠĠĠĠ Ġpitch Ġ= Ġ- 4 5 . 0 f ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġprogram : ĠProgram ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġvertex Data : ĠVertex Data ĊĊĠĠĠ Ġoverride Ġfun Ġdraw () Ġ{ ĊĠĠĠĠĠĠĠ Ġgl Clear Color ( 0 . 2 f , Ġ 0 . 3 f , Ġ 0 . 3 f , Ġ 1 . 0 f ) ĊĠĠĠĠĠĠĠ Ġgl Clear ( GL _ COLOR _ BUFFER _ BIT Ġor ĠGL _ DEPTH _ BUFFER _ BIT ) ĊĊĠĠĠĠĠĠĠ Ġprogram . set Mat 4 (" view ", Ġcamera . getView Matrix ()) ĊĠĠĠĠĠĠĠ Ġprogram . set Float 3 (" view Pos ", Ġcamera . get Eye ()) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( gamma Correction Enabled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠglBind Texture ( GL _ TEXTURE _ 2 D , Ġfloor Texture Gamma Correct ed . getId ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠglBind Texture ( GL _ TEXTURE _ 2 D , Ġfloor Texture . getId ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠglBind VertexArray ( vertex Data . get V ao Id ()) ĊĠĠĠĠĠĠĠ Ġgl Draw Arrays ( GL _ TRI ANG LES , Ġ 0 , Ġ 6 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġget Camera () Ġ= Ġcamera ĊĊĠĠĠ Ġoverride Ġfun Ġinit ( width : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġgl Enable ( GL _ DEPTH _ TEST ) ĊĠĠĠĠĠĠĠ Ġgl Viewport ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĊĠĠĠĠĠĠĠ Ġfloor Texture . load () ĊĠĠĠĠĠĠĠ Ġfloor Texture Gamma Correct ed . load () ĊĊĠĠĠĠĠĠĠ Ġval Ġprojection Ġ= Ġperspective ( 4 5 . 0 f , Ġwidth . toFloat () Ġ/ Ġheight . toFloat (), Ġ 0 . 1 f , Ġ 1 0 0 . 0 f ) ĊĊĠĠĠĠĠĠĠ Ġprogram Ġ= ĠProgram . create ( vertex Shader Code , Ġfragment Shader Code ) ĊĠĠĠĠĠĠĠ Ġprogram . use () ĊĠĠĠĠĠĠĠ Ġprogram . set Boolean (" gamma ", Ġgamma Correction Enabled ) ĊĠĠĠĠĠĠĠ Ġprogram . set Mat 4 (" projection ", Ġprojection ) ĊĠĠĠĠĠĠĠ Ġgl Uniform 3 fv ( program . get UniformLocation (" light Colors [ 0 ] "), Ġ 4 , Ġlight Colors , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġgl Uniform 3 fv ( program . get UniformLocation (" light Positions [ 0 ] "), Ġ 4 , Ġlight Positions , Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġvertex Data Ġ= ĠVertex Data ( plane Vertices , Ġnull , Ġ 8 ) ĊĠĠĠĠĠĠĠ Ġvertex Data . addAttribute ( program . getAttribute Location (" a Pos "), Ġ 3 , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġvertex Data . addAttribute ( program . getAttribute Location (" a Normal "), Ġ 3 , Ġ 3 ) ĊĠĠĠĠĠĠĠ Ġvertex Data . addAttribute ( program . getAttribute Location (" a Tex Coords "), Ġ 2 , Ġ 6 ) ĊĠĠĠĠĠĠĠ Ġvertex Data . bind () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( context : ĠContext ): ĠScene Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresources Ġ= Ġcontext . resources ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠScene 2 Gamma Correction ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvertex Shader Code Ġ= Ġresources . read Raw Text File ( R . raw . advanced lighting _ scene 1 _ bl inn _ ph ong _ vert ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Shader Code Ġ= Ġresources . read Raw Text File ( R . raw . advanced lighting _ scene 2 _ gam me _ correction _ frag ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloor Texture Ġ= ĠTexture ( load Bitmap ( context , ĠR . raw . texture _ wood )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfloor Texture Gamma Correct ed Ġ= ĠTexture ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġload Bitmap ( context , ĠR . raw . texture _ wood ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGL _ SR GB 8 _ ALPHA 8 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ