/** Ċ Ġ* Ġ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 . augment ed image . controller Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . opengl . GLES 2 0 Ċ import Ġandroid . opengl . GL Surface View Ċ import Ġandroid . opengl . Matrix Ċ import Ġandroid . util . Pair Ċ import Ġcom . hu awei . are ng ine . demos . augment ed image . service . Image Key Line Service Ċ import Ġcom . hu awei . are ng ine . demos . augment ed image . service . Image Key Point Service Ċ import Ġcom . hu awei . are ng ine . demos . augment ed image . service . Image Label Service Ċ import Ġcom . hu awei . are ng ine . demos . augment ed image . util . Constants Ċ import Ġcom . hu awei . are ng ine . demos . common . Log Util Ċ import Ġcom . hu awei . are ng ine . demos . common . Log Util . debug Ċ import Ġcom . hu awei . are ng ine . demos . common . Log Util . info Ċ import Ġcom . hu awei . are ng ine . demos . common . controller . Display Rotation Controller Ċ import Ġcom . hu awei . are ng ine . demos . common . service . Background Texture Service Ċ import Ġcom . hu awei . hi ar .* Ċ import Ġcom . hu awei . hi ar . exceptions . AR Session Paused Exception Ċ import Ġjava . util .* Ċ import Ġjavax . micro edition . kh ronos . e gl . EGL Config Ċ import Ġjavax . micro edition . kh ronos . openg les . GL 1 0 Ċ Ċ /** Ċ Ġ* ĠAug ment ed Ġimage Ġrendering Ġmanager , Ġconfigured Ġto Ġrender Ġthe Ġimage . Ċ Ġ* Ċ Ġ* Ġ@ author ĠHW Ċ Ġ* Ġ@ since Ġ 2 0 2 1 - 0 3 - 2 9 Ċ Ġ*/ Ċ class ĠAug ment ed Image Render Controller ( private Ġval Ġm Activity : ĠActivity , ĊĠĠĠ Ġprivate Ġval Ġdisplay Rotation Controller : ĠDisplay Rotation Controller ) Ġ: ĠGL Surface View . Renderer Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Aug ment ed Image Render Controller " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġvar Ġm Session : ĠAR Session ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġis Image Track Only Ġ= Ġfalse ĊĊĠĠĠ Ġprivate Ġval Ġimage Related Display s Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠArrayList < Aug ment ed Image Component Display >(). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Image Key Point Service ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Image Key Line Service ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd ( Image Label Service ( m Activity )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġbackground Display Ġby Ġlazy Ġ{ ĠBackground Texture Service () Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠAn chors Ġof Ġthe Ġaugment ed Ġimage Ġand Ġits Ġrelated Ġcenter , Ġwhich Ġis Ġcontrolled Ġby Ġthe Ġindex Ġkey Ġof ĊĠĠĠĠ Ġ* Ġthe Ġaugment ed Ġimage Ġin Ġthe Ġdatabase . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġaugment ed Image Map : ĠMutable Map < Int , ĠPair < AR Aug ment ed Image , ĠAR Anchor ?> ?> Ġ= ĠHashMap () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠSet Ġthe ĠAR Session , Ġwhich Ġupdates Ġand Ġobt ains Ġthe Ġlatest Ġdata Ġfrom ĠOn Draw Frame . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġar Session ĠAR Session . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset Ar Session ( ar Session : ĠAR Session ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġm Session Ġ= Ġar Session ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Created ( gl : ĠGL 1 0 , Ġconfig : ĠE GL Config ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġwindow Ġcolor . ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear Color ( 0 . 1 f , Ġ 0 . 1 f , Ġ 0 . 1 f , Ġ 1 . 0 f ) ĊĠĠĠĠĠĠĠ Ġbackground Display . init () ĊĠĠĠĠĠĠĠ Ġimage Related Display s . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . init () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Surface Changed ( gl : ĠGL 1 0 , Ġwidth : ĠInt , Ġheight : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġbackground Display . 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 ( gl : ĠGL 1 0 ) Ġ{ ĊĠĠĠĠĠĠĠ ĠGLES 2 0 . gl Clear ( GLES 2 0 . GL _ COLOR _ BUFFER _ BIT Ġor ĠGLES 2 0 . GL _ DEPTH _ BUFFER _ BIT ) ĊĠĠĠĠĠĠĠ Ġm Session Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġdisplay Rotation Controller . run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Device Rotation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdate Ar Session Display Geometry ( m Session ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm Session !!. set Camera Texture Name ( background Display . external Texture Id ) ĊĠĠĠĠĠĠĠ Ġval Ġar Frame : ĠAR Frame ; ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar Frame Ġ= Ġm Session !!. update () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : ĠAR Session Paused Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Util . error ( TAG , Ġ" Invoke Ġsession . resume Ġbefore Ġinvoking ĠSession . update ."); ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ; ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġar Camera Ġ= Ġar Frame . camera ĊĠĠĠĠĠĠĠ Ġbackground Display . render Background Texture ( ar Frame ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġtracking Ġis Ġnot Ġset , Ġthe Ġaugment ed Ġimage Ġis Ġnot Ġdrawn . ĊĠĠĠĠĠĠĠ Ġif Ġ( ar Camera . tracking State Ġ== ĠAR Track able . Tracking State . PA USED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo ( TAG , Ġ" Draw Ġbackground Ġpaused !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠObtain Ġthe Ġprojection Ġmatrix . ĊĠĠĠĠĠĠĠ Ġval Ġprojection Matrix Ġ= ĠFloat Array ( Constants . PRO J _ MATRIX _ SIZE ) ĊĠĠĠĠĠĠĠ Ġar Camera . get Projection Matrix ( projection Matrix , ĠConstants . PRO J _ MATRIX _ OFFSET , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠConstants . PRO J _ MATRIX _ NEAR , ĠConstants . PRO J _ MATRIX _ FAR ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠObtain Ġthe Ġview Ġmatrix . ĊĠĠĠĠĠĠĠ Ġval Ġview Matrix Ġ= ĠFloat Array ( Constants . PRO J _ MATRIX _ SIZE ) ĊĠĠĠĠĠĠĠ Ġif Ġ( is Image Track Only ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMatrix . set Identity M ( view Matrix , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġar Camera . getView Matrix ( view Matrix , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠDraw Ġthe Ġaugment ed Ġimage . ĊĠĠĠĠĠĠĠ Ġdraw Aug ment ed Images ( ar Frame , Ġprojection Matrix , Ġview Matrix ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdraw Aug ment ed Images ( frame : ĠAR Frame , Ġproj mtx : ĠFloat Array , Ġview mtx : ĠFloat Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġupdated Aug ment ed Images Ġ= Ġframe . get Updated Track ables ( AR Aug ment ed Image :: class . java ) ĊĠĠĠĠĠĠĠ Ġdebug ( TAG , Ġ" draw Aug ment ed Images : ĠUpdated Ġaugment Ġimage Ġis Ġ" Ġ+ Ġupdated Aug ment ed Images . size ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠIter atively Ġupdate Ġthe Ġaugment ed Ġimage Ġmapping Ġand Ġremove Ġthe Ġelements Ġthat Ġcannot Ġbe Ġdrawn . ĊĠĠĠĠĠĠĠ Ġupdated Aug ment ed Images . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( it . tracking State ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAR Track able . Tracking State . PA USED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAR Track able . Tracking State . TRACK ING Ġ-> Ġinit Tracking Images ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAR Track able . Tracking State . STOP PED Ġ-> Ġaugment ed Image Map . remove ( it . index ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠMap Ġthe Ġanchor Ġto Ġthe ĠAug ment ed Image Ġobject Ġand Ġdraw Ġall Ġaugment ation Ġeffects . ĊĠĠĠĠĠĠĠ Ġaugment ed Image Map . values . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaugment ed Image Ġ= Ġit !!. first ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( augment ed Image . tracking State Ġ== ĠAR Track able . Tracking State . TRACK ING ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimage Related Display s . forEach { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . on Draw Frame ( augment ed Image , Ġview mtx , Ġproj mtx ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Tracking Images ( augment ed Image : ĠAR Aug ment ed Image ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġan Ġanchor Ġfor Ġthe Ġnewly Ġfound Ġimage Ġand Ġbind Ġit Ġto Ġthe Ġimage Ġobject . ĊĠĠĠĠĠĠĠ Ġif Ġ(! augment ed Image Map . containsKey ( augment ed Image . index )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcenter Pose Anchor : ĠAR Anchor Ġ?= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! is Image Track Only ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcenter Pose Anchor Ġ= Ġaugment ed Image . create Anchor ( augment ed Image . center Pose ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġaugment ed Image Map [ augment ed Image . index ]= ĠPair . create ( augment ed Image , Ġcenter Pose Anchor ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġset Image Track Only ( is Only Image Track : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Image Track Only Ġ= Ġis Only Image Track ĊĠĠĠ Ġ} Ċ }