package Ġcom . dp ash ko . sandbox . scene . plane 3 d Ċ Ċ import Ġcom . badlogic . gdx . G dx Ċ import Ġcom . badlogic . gdx . graphics . GL 2 0 .* Ċ import Ġcom . badlogic . gdx . graphics . Pixmap Ċ import Ġcom . badlogic . gdx . graphics . Texture Ċ import Ġcom . badlogic . gdx . graphics . Vertex Attribute Ċ import Ġcom . badlogic . gdx . graphics . gl utils .* Ċ import Ġcom . badlogic . gdx . math . Matrix 4 Ċ import Ġcom . badlogic . gdx . math . Vector 3 Ċ import Ġcom . dp ash ko . sandbox . files . File Provider Ċ import Ġcom . dp ash ko . sandbox . scene . Sandbox Scene Ċ import Ġcom . dp ash ko . sandbox . shader . Shader Provider Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠPlane 3 DS andbox Scene Ġ@ Inject Ġinternal Ġconstructor () Ġ: ĠSandbox Scene Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġshader : ĠShader Program ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġplane : ĠPlane ĊĊĠĠĠ Ġ// ĠCamera Ġposition Ġand Ġrotation Ġmatrix ĊĠĠĠ Ġprivate Ġval Ġview Matrix Ġ= ĠMatrix 4 () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set To Look At ( Vector 3 ( 0 f , Ġ 0 f , Ġ 3 f ), ĠVector 3 . Zero , ĠVector 3 . Y ) ĊĊĠĠĠ Ġ// ĠCamera Ġprojection ( fr ustum ) ĊĠĠĠ Ġprivate Ġval Ġprojection Matrix Ġ= ĠMatrix 4 (). apply Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnear Ġ= Ġ 1 f ĊĠĠĠĠĠĠĠ Ġval Ġfar Ġ= Ġ 5 f ĊĠĠĠĠĠĠĠ Ġval Ġf ov Ġ= Ġ 6 7 f ĊĠĠĠĠĠĠĠ Ġval Ġaspect R ation Ġ= Ġ( G dx . graphics . width Ġ/ ĠG dx . graphics . height ). toFloat () ĊĠĠĠĠĠĠĠ Ġset To Projection ( near , Ġfar , Ġf ov , Ġaspect R ation ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCom bined Ġcamera Ġmatrix Ġmatrix . ĊĠĠĠ Ġprivate Ġval Ġcamera Matrix Ġ= ĠMatrix 4 (). set ( projection Matrix ). mul ( view Matrix ) ĊĊĠĠĠ Ġoverride Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġshader Ġ= ĠShader Provider . simple 3 d Shader (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Compiled ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Shader Ġis Ġnot Ġcompiled : Ġ$ log ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġplane Ġ= ĠPlane ( Vector 3 . Zero , ĠTexture ( Pixmap ( File Provider . sky ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdraw () Ġ{ ĊĠĠĠĠĠĠĠ Ġrotate Plane () ĊĠĠĠĠĠĠĠ ĠG dx . gl . gl Enable ( GL _ DEPTH _ TEST ) ĊĠĠĠĠĠĠĠ ĠG dx . gl . gl Clear ( GL _ COLOR _ BUFFER _ BIT Ġor ĠGL _ DEPTH _ BUFFER _ BIT ) ĊĠĠĠĠĠĠĠ Ġshader . begin () ĊĠĠĠĠĠĠĠ Ġplane . draw ( shader , Ġcamera Matrix ) ĊĠĠĠĠĠĠĠ Ġshader . end () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġrotation Speed Ġ= Ġ 1 0 0 f ĊĠĠĠ Ġprivate Ġfun Ġrotate Plane () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġangle Ġ= ĠG dx . graphics . deltaTime Ġ* Ġrotation Speed ĊĠĠĠĠĠĠĠ Ġplane . rotate ( Vector 3 . Y , Ġangle ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠ Ġplane . dispose () ĊĠĠĠĠĠĠĠ Ġshader . dispose () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠPlane ( val Ġposition : ĠVector 3 , Ġval Ġtexture : ĠTexture ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġindices Ġ= Ġcreate Indices () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġvertices Ġ= Ġcreate Vertices () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġtmp Ġ= ĠMatrix 4 () ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġmodel Matrix Ġ= ĠMatrix 4 (). translate ( position ) ĊĊĠĠĠĠĠĠĠ Ġfun Ġdraw ( shader : ĠShader Program , Ġcamera Matrix : ĠMatrix 4 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshader . set Uniform Matrix (" combined ", Ġtmp . set ( camera Matrix ). mul ( model Matrix )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG dx . gl . glBind Texture ( GL _ TEXTURE _ 2 D , Ġtexture . texture Object Handle ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertices . bind ( shader ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG dx . gl . gl Draw Elements ( GL _ TRI ANG LES , Ġindices . num Indices , ĠGL _ UNSIGNED _ SHORT , Ġindices . buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertices . unbind ( shader ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġrotate ( axis : ĠVector 3 , Ġdegree : ĠFloat ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmodel Matrix . rotate ( axis , Ġdegree ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Vertices (): ĠVertex Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvertices Ġ= Ġfloat ArrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPosition ( x , y , z ), ĠTexture Ġcoordinates Ġ( u , v ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 f , Ġ 1 f , Ġ 0 f , Ġ 0 f , Ġ 1 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 f , Ġ- 1 f , Ġ 0 f , Ġ 0 f , Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f , Ġ- 1 f , Ġ 0 f , Ġ 1 f , Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 f , Ġ 1 f , Ġ 0 f , Ġ 1 f , Ġ 1 f ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠVertex Buffer Object With VA O ( true , Ġvertices . size , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVertex Attribute . Position (), ĠVertex Attribute . Tex Coords ( 0 )). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Vertices ( vertices , Ġ 0 , Ġvertices . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠPlane Ġmesh Ġseparated Ġby Ġtwo Ġtriangles . ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 âķ Ķ âķĲâķ Ĺ 3 ĊĠĠĠĠĠĠĠ Ġ// ĠEach Ġtriangle Ġcontains Ġ 3 Ġvertices Ġ( 0 Ġ 1 Ġ 2 ) Ġand Ġ( 2 Ġ 3 Ġ 0 ). ĠĠĠ 1 âķ ļ âķĲâķ Ŀ 2 ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcreate Indices (): ĠIndex Data Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġindices Ġ= Ġshort ArrayOf ( 0 , Ġ 1 , Ġ 2 , Ġ 2 , Ġ 3 , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠIndex Array ( indices . size ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Indices ( indices , Ġ 0 , Ġindices . size ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġdispose () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvertices . dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindices . dispose () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtexture . dispose () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ