/** Ċ Ġ* ĠCopyright Ġ 2 0 2 1 . ĠHu awei ĠTechnologies ĠCo ., ĠLtd . ĠAll Ġrights Ġreserved . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġcom . hu awei . are ng ine . demos . hand . controller Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . opengl . GLES 2 0 Ċ import Ġandroid . opengl . GL Surface View Ċ import Ġcom . hu awei . are ng ine . demos . R Ċ import Ġcom . hu awei . are ng ine . demos . common . Log Util Ċ import Ġcom . hu awei . are ng ine . demos . common . controller . Display Rotation Controller Ċ import Ġcom . hu awei . are ng ine . demos . common . exception . Sample App Exception Ċ import Ġcom . hu awei . are ng ine . demos . common . service . Background Texture Service Ċ import Ġcom . hu awei . are ng ine . demos . common . service . Text Service Ċ import Ġcom . hu awei . are ng ine . demos . common . util . Frame PerSecond Ċ import Ġcom . hu awei . are ng ine . demos . common . util . findViewById Ċ import Ġcom . hu awei . are ng ine . demos . common . util . show Screen TextView Ċ import Ġcom . hu awei . are ng ine . demos . hand . service . Hand Box Service Ċ import Ġcom . hu awei . are ng ine . demos . hand . service . Hand Render Service Ċ import Ġcom . hu awei . are ng ine . demos . hand . service . Hand Skeleton Line Service Ċ import Ġcom . hu awei . are ng ine . demos . hand . service . Hand Skeleton Service Ċ import Ġcom . hu awei . are ng ine . demos . hand . service . update Screen Text Ċ import Ġcom . hu awei . are ng ine . demos . hand . util . Constants Ċ import Ġcom . hu awei . hi ar . AR Frame Ċ import Ġcom . hu awei . hi ar . AR Hand Ċ import Ġcom . hu awei . hi ar . AR Session Ċ import Ġcom . hu awei . hi ar . exceptions . AR Session Paused Exception Ċ import Ġjavax . micro edition . kh ronos . e gl . EGL Config Ċ import Ġjavax . micro edition . kh ronos . openg les . GL 1 0 Ċ Ċ /** Ċ Ġ* ĠThis Ġclass Ġshows Ġhow Ġto Ġrender Ġdata Ġobtained Ġfrom ĠH UA WE I ĠAR ĠEngine . Ċ Ġ* Ċ Ġ* Ġ@ author ĠHW Ċ Ġ* Ġ@ since Ġ 2 0 2 0 - 1 0 - 1 0 Ċ Ġ*/ Ċ class ĠHand Render Controller ( private Ġval Ġactivity : ĠActivity , ĊĠĠĠ Ġprivate Ġval Ġdisplay Rotation Controller : ĠDisplay Rotation Controller ) Ġ: ĠGL Surface View . Renderer Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Hand Render Controller " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġar Session : ĠAR Session ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġfps Ġby Ġlazy Ġ{ ĠFrame PerSecond ( 0 , Ġ 0 f , Ġ 0 ) Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġbackground Texture Service Ġby Ġlazy Ġ{ ĠBackground Texture Service () Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġhand Text Service Ġby Ġlazy Ġ{ ĠText Service () Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġhand Render Services Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠArrayList < Hand Render Service >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Hand Box Service ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Hand Skeleton Service ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Hand Skeleton Line Service ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe ĠAR Session Ġobject , Ġwhich Ġis Ġused Ġto Ġobtain Ġthe Ġlatest Ġdata Ġin Ġthe Ġon Draw Frame Ġmethod . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġar Session ĠAR Session . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Ar Session ( ar Session : ĠAR Session ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . ar Session Ġ= Ġar Session ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Created ( gl : ĠGL 1 0 , Ġconfig : ĠE GL Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠClear Ġthe Ġoriginal Ġcolor Ġand Ġset Ġa Ġnew Ġcolor . ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear Color ( 0 . 1 f , Ġ 0 . 1 f , Ġ 0 . 1 f , Ġ 1 . 0 f ) ĊĠĠĠĠĠĠĠ Ġbackground Texture Service . init () ĊĠĠĠĠĠĠĠ Ġfor Ġ( hand Render Service Ġin Ġhand Render Services ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhand Render Service . init () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġhand Text Service . set Listener Ġ{ Ġtext Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Screen TextView ( activity , ĠfindViewById ( activity , ĠR . id . hand TextView ), Ġtext ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Changed ( unused : ĠGL 1 0 , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbackground Texture Service . update Projection Matrix ( width , Ġheight ) ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Viewport ( 0 , Ġ 0 , Ġwidth , Ġheight ) ĊĠĠĠĠĠĠĠ Ġdisplay Rotation Controller . update Viewport Rotation ( width , Ġheight ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Draw Frame ( unused : ĠGL 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠClear Ġthe Ġcolor Ġbuffer Ġand Ġnotify Ġthe Ġdriver Ġnot Ġto Ġload Ġthe Ġdata Ġof Ġthe Ġprevious Ġframe . ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear ( GLES 2 0 . GL _ COLOR _ BUFFER _ BIT Ġor ĠGLES 2 0 . GL _ DEPTH _ BUFFER _ BIT ) ĊĠĠĠĠĠĠĠ Ġar Session Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġdisplay Rotation Controller . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Device Rotation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ar Session Display Geometry ( ar Session ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġframe Ġ= Ġar Session ?. run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Camera Texture Name ( background Texture Service . external Texture Id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbackground Texture Service . render Background Texture ( frame ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġrender Hand ( frame ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠSample App Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util . error ( TAG , Ġ" Exception Ġon Ġthe ĠSample App Exception !"); ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠAR Session Paused Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util . error ( TAG , Ġ" Invoke Ġsession . resume Ġbefore Ġinvoking ĠSession . update ."); ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrender Hand ( frame : ĠAR Frame ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhands Ġ= Ġar Session ?. getAll Track ables ( AR Hand :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ( hands Ġ== Ġnull Ġ|| Ġhands . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhand Text Service . draw Text ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfor Ġ( hand Ġin Ġhands ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe Ġhand Ġrecognition Ġinformation Ġto Ġbe Ġdisplayed Ġon Ġthe Ġscreen . ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStringBuilder (). let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Screen Text ( it , Ġhand , Ġfps ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠDisplay Ġhand Ġrecognition Ġinformation Ġon Ġthe Ġscreen . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhand Text Service . draw Text ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠObtain Ġthe Ġprojection Ġmatrix Ġthrough ĠARC amera . ĊĠĠĠĠĠĠĠ Ġval Ġprojection Matrix Ġ= ĠFloat Array ( 1 6 ) ĊĠĠĠĠĠĠĠ Ġframe . camera ?. get Projection Matrix ( projection Matrix , Ġ 0 , ĠConstants . PRO JECTION _ MATRIX _ NEAR , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . PRO JECTION _ MATRIX _ FAR ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( hand Render Service Ġin Ġhand Render Services ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhand Render Service . render Hand ( hands , Ġprojection Matrix ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }