package Ġmain . tut 0 8 Ċ Ċ import Ġcom . j og amp . new t . event . KeyEvent Ċ import Ġcom . j og amp . opengl . GL .* Ċ import Ġcom . j og amp . opengl . GL 2 ES 3 . GL _ COLOR Ċ import Ġcom . j og amp . opengl . GL 2 ES 3 . GL _ DEPTH Ċ import Ġcom . j og amp . opengl . GL 3 Ċ import Ġgl Next .* Ċ import Ġglm . f Ċ import Ġglm . glm Ċ import Ġglm . mat . Mat 4 Ċ import Ġglm . rad Ċ import Ġglm . vec ._ 3 . Vec 3 Ċ import Ġglm . vec ._ 4 . Vec 4 Ċ import Ġmain . framework . Framework Ċ import Ġmain . framework . component . Mesh Ċ import Ġuno . glm . Matrix Stack Ċ import Ġuno . glsl . program Of Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠG Bar b ier i Ġon Ġ 1 0 . 0 3 . 2 0 1 7 . Ċ Ġ*/ Ċ Ċ fun Ġmain ( args : ĠArray < String >) Ġ{ ĊĠĠĠ ĠG im bal Lock _ (). setup (" Tutorial Ġ 0 8 Ġ- ĠG im bal ĠLock ") Ċ } Ċ Ċ class ĠG im bal Lock _ Ġ: ĠFramework () Ġ{ ĊĊĠĠĠ Ġval ĠG IM BAL S _ SCR Ġ= ĠarrayOf (" Large G im bal . xml ", Ġ" Medium G im bal . xml ", Ġ" Small G im bal . xml ") ĊĊĠĠĠ Ġobject ĠG im bal Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠL ARGE Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġval ĠMED IUM Ġ= Ġ 1 ĊĠĠĠĠĠĠĠ Ġval ĠSMALL Ġ= Ġ 2 ĊĠĠĠĠĠĠĠ Ġval ĠMAX Ġ= Ġ 3 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġenum Ġclass ĠG im bal Axis Ġ{ ĠX , ĠY , ĠZ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠG im bal Angles ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġangle X : ĠFloat Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġangle Y : ĠFloat Ġ= Ġ 0 f , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġangle Z : ĠFloat Ġ= Ġ 0 f ) ĊĊĠĠĠ Ġlateinit Ġvar Ġg im b als : ĠArray < Mesh > ĊĊĠĠĠ Ġlateinit Ġvar Ġ` object `: ĠMesh ĊĊĠĠĠ Ġvar Ġthe Program Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġmodel To Camera Matrix Un if Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġcamera To Clip Matrix Un if Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġbase Color Un if Ġ= Ġ 0 ĊĊĠĠĠ Ġval Ġfr ustum Scale Ġ= Ġcalc Fr ustum Scale ( 2 0 . 0 f ) ĊĊĠĠĠ Ġfun Ġcalc Fr ustum Scale ( fo v Deg : ĠFloat ) Ġ= Ġ 1 . 0 f Ġ/ Ġglm . tan ( fo v Deg . rad Ġ/ Ġ 2 . 0 f ) ĊĊĠĠĠ Ġval Ġcamera To Clip Matrix Ġ= ĠMat 4 ( 0 . 0 f ) ĊĊĠĠĠ Ġval Ġangles Ġ= ĠG im bal Angles () ĊĊĠĠĠ Ġvar Ġdraw G im b als Ġ= Ġtrue ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġinit ( gl : ĠGL 3 ) Ġ= Ġwith ( gl ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġinitialize Program ( gl ) ĊĊĠĠĠĠĠĠĠ Ġg im b als Ġ= ĠArray ( G im bal . MAX , Ġ{ ĠMesh ( gl , Ġjava Class , Ġ" tut 0 8 /${ G IM BAL S _ SCR [ it ]} ") Ġ}) ĊĠĠĠĠĠĠĠ Ġ` object ` Ġ= ĠMesh ( gl , Ġjava Class , Ġ" tut 0 8 / Ship . xml ") ĊĊĠĠĠĠĠĠĠ Ġgl Enable ( GL _ C ULL _ FACE ) ĊĠĠĠĠĠĠĠ Ġgl Cull Face ( GL _ BACK ) ĊĠĠĠĠĠĠĠ Ġgl Front Face ( GL _ CW ) ĊĊĠĠĠĠĠĠĠ Ġgl Enable ( GL _ DEPTH _ TEST ) ĊĠĠĠĠĠĠĠ Ġgl Depth Mask ( true ) ĊĠĠĠĠĠĠĠ Ġgl Depth Func ( GL _ LE QUAL ) ĊĠĠĠĠĠĠĠ Ġgl Depth Range f ( 0 . 0 f , Ġ 1 . 0 f ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġinitialize Program ( gl : ĠGL 3 ) Ġ= Ġwith ( gl ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġthe Program Ġ= Ġprogram Of ( gl , Ġjava Class , Ġ" tut 0 8 ", Ġ" pos - color - local - transform . vert ", Ġ" color - mult - uniform . frag ") ĊĊĠĠĠĠĠĠĠ Ġmodel To Camera Matrix Un if Ġ= ĠglGet UniformLocation ( the Program , Ġ" model To Camera Matrix ") ĊĠĠĠĠĠĠĠ Ġcamera To Clip Matrix Un if Ġ= ĠglGet UniformLocation ( the Program , Ġ" camera To Clip Matrix ") ĊĠĠĠĠĠĠĠ Ġbase Color Un if Ġ= ĠglGet UniformLocation ( the Program , Ġ" base Color ") ĊĊĠĠĠĠĠĠĠ Ġval Ġz Near Ġ= Ġ 1 . 0 f ĊĠĠĠĠĠĠĠ Ġval Ġz Far Ġ= Ġ 6 0 0 . 0 f ĊĊĠĠĠĠĠĠĠ Ġcamera To Clip Matrix [ 0 ]. x Ġ= Ġfr ustum Scale ĊĠĠĠĠĠĠĠ Ġcamera To Clip Matrix [ 1 ]. y Ġ= Ġfr ustum Scale ĊĠĠĠĠĠĠĠ Ġcamera To Clip Matrix [ 2 ]. z Ġ= Ġ( z Far Ġ+ Ġz Near ) Ġ/ Ġ( z Near Ġ- Ġz Far ) ĊĠĠĠĠĠĠĠ Ġcamera To Clip Matrix [ 2 ]. w Ġ= Ġ- 1 . 0 f ĊĠĠĠĠĠĠĠ Ġcamera To Clip Matrix [ 3 ]. z Ġ= Ġ 2 f Ġ* Ġz Far Ġ* Ġz Near Ġ/ Ġ( z Near Ġ- Ġz Far ) ĊĊĠĠĠĠĠĠĠ Ġgl Use Program ( the Program ) ĊĠĠĠĠĠĠĠ Ġgl Uniform Matrix 4 f ( camera To Clip Matrix Un if , Ġcamera To Clip Matrix ) ĊĠĠĠĠĠĠĠ Ġgl Use Program () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġdisplay ( gl : ĠGL 3 ) Ġ= Ġwith ( gl ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġgl Clear Buffer f ( GL _ COLOR , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġgl Clear Buffer f ( GL _ DEPTH ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcurr Matrix Ġ= ĠMatrix Stack () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. translate ( 0 . 0 f , Ġ 0 . 0 f , Ġ- 2 0 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. rotate X ( angles . angle X ) ĊĠĠĠĠĠĠĠ Ġdraw G im bal ( gl , Ġcurr Matrix , ĠG im bal Axis . X , ĠVec 4 ( 0 . 4 f , Ġ 0 . 4 f , Ġ 1 . 0 f , Ġ 1 . 0 f )) ĊĊĠĠĠĠĠĠĠ Ġcurr Matrix . rotate Y ( angles . angle Y ) ĊĠĠĠĠĠĠĠ Ġdraw G im bal ( gl , Ġcurr Matrix , ĠG im bal Axis . Y , ĠVec 4 ( 0 . 0 f , Ġ 1 . 0 f , Ġ 0 . 0 f , Ġ 1 . 0 f )) ĊĊĠĠĠĠĠĠĠ Ġcurr Matrix . rotate Y ( angles . angle Z ) ĊĠĠĠĠĠĠĠ Ġdraw G im bal ( gl , Ġcurr Matrix , ĠG im bal Axis . Z , ĠVec 4 ( 1 . 0 f , Ġ 0 . 3 f , Ġ 0 . 3 f , Ġ 1 . 0 f )) ĊĊĠĠĠĠĠĠĠ Ġgl Use Program ( the Program ) ĊĠĠĠĠĠĠĠ Ġcurr Matrix ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. scale ( 3 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. rotate X (- 9 0 f ) ĊĠĠĠĠĠĠĠ Ġ// Set Ġthe Ġbase Ġcolor Ġfor Ġthis Ġobject . ĊĠĠĠĠĠĠĠ Ġgl Uniform 4 f ( base Color Un if , Ġ 1 . 0 f ) ĊĠĠĠĠĠĠĠ Ġgl Uniform Matrix 4 f ( model To Camera Matrix Un if , Ġcurr Matrix . top ()) ĊĊĠĠĠĠĠĠĠ Ġ` object `. render ( gl , Ġ" tint ") ĊĊĠĠĠĠĠĠĠ Ġgl Use Program () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdraw G im bal ( gl : ĠGL 3 , Ġmatrix Stack : ĠMatrix Stack , Ġaxis : ĠG im bal Axis , Ġbase Color : ĠVec 4 ) Ġ= Ġwith ( gl ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! draw G im b als ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ with ĊĊĠĠĠĠĠĠĠ Ġmatrix Stack Ġrun Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( axis ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG im bal Axis . X Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG im bal Axis . Y Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠrotateZ ( 9 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠrotateX ( 9 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG im bal Axis . Z Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠrotateY ( 9 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠrotateX ( 9 0 . 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Use Program ( the Program ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Set Ġthe Ġbase Ġcolor Ġfor Ġthis Ġobject . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Uniform 4 f ( base Color Un if , Ġbase Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Uniform Matrix 4 f ( model To Camera Matrix Un if , Ġtop ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġg im b als [ axis . ordinal ]. render ( gl ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġgl Use Program ( 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġreshape ( gl : ĠGL 3 , Ġw : ĠInt , Ġh : ĠInt ) Ġ= Ġwith ( gl ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcamera To Clip Matrix [ 0 ]. x Ġ= Ġfr ustum Scale Ġ* Ġ( h Ġ/ Ġw . f ) ĊĠĠĠĠĠĠĠ Ġcamera To Clip Matrix [ 1 ]. y Ġ= Ġfr ustum Scale ĊĊĠĠĠĠĠĠĠ Ġgl Use Program ( the Program ) ĊĠĠĠĠĠĠĠ Ġgl Uniform Matrix 4 fv ( camera To Clip Matrix Un if , Ġ 1 , Ġfalse , Ġcamera To Clip Matrix Ġto Ġmat Buffer ) ĊĠĠĠĠĠĠĠ Ġgl Use Program ( 0 ) ĊĊĠĠĠĠĠĠĠ Ġgl Viewport ( 0 , Ġ 0 , Ġw , Ġh ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġpublic Ġoverride Ġfun Ġend ( gl : ĠGL 3 ) Ġ= Ġwith ( gl ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġgl Delete Program ( the Program ) ĊĊĠĠĠĠĠĠĠ Ġ` object `. dispose ( gl ) ĊĠĠĠĠĠĠĠ Ġg im b als . forEach Ġ{ Ġit . dispose ( gl ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġkey Pressed ( e : ĠKeyEvent ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġsmall Angle Increment Ġ= Ġ 9 . 0 f ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( e . keyCode ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . VK _ ESCAPE Ġ-> Ġquit () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . VK _ W Ġ-> Ġangles . angle X Ġ+= Ġsmall Angle Increment ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . VK _ S Ġ-> Ġangles . angle X Ġ-= Ġsmall Angle Increment ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . VK _ A Ġ-> Ġangles . angle Y Ġ+= Ġsmall Angle Increment ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . VK _ D Ġ-> Ġangles . angle Y Ġ-= Ġsmall Angle Increment ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . VK _ Q Ġ-> Ġangles . angle Z Ġ+= Ġsmall Angle Increment ĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . VK _ E Ġ-> Ġangles . angle Z Ġ-= Ġsmall Angle Increment ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠKeyEvent . VK _ SPACE Ġ-> Ġdraw G im b als Ġ= Ġ! draw G im b als ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }