SlideShare a Scribd company logo
1 of 16
Download to read offline
Creating Novel Augmented Reality
     Applications for Android


                    www.diotasoft.com

Sebastian Knödel     Ludovic Perrier     Yohan Hadjedi

skn@diotasoft.com    lpe@diotasoft.com   yha@diotasoft.com
  sekond               ludovic_perrier     nah0y



                           PAUG                          1
Content


Brief History of Mobile AR
Mobile AR SDKs & APIs
Qualcomm AR SDK (QCAR)

QCAR & Unity3D
Mobile AR Games
Future of mobile AR


                   PAUG      2
Brief History of Mobile AR

Sensor based tracking
   GPS position
   Compass orientation
                                          Courtesy Wikitude   Wikitude   2009




Vision based tracking




                           Courtesy TU Graz


  Special Marker 1999    ARToolkitPlus 2007                    NyARToolkit 2009
                               PAUG                                        3
Brief History of Mobile AR
                   Vision based tracking




                                               Courtesy Qualcomm


                                               Qualcomm AR




                                                  Courtesy Metaio
Natural Features
                     Diotasoft - Werber 2010   Metaio/Juneio



                            PAUG                           4
Mobile AR SDKs & APIs

Proprietary          Public




              PAUG            5
Qualcomm AR SDK (QCAR)
•    Library for mobile AR development          Different target types
•    Android only
•    Supported devices Qualcomm CPU
     (Nexus One/S, HTC Desire)
•    SDK with Eclipse integration




                                         PAUG                   6
Workflow QCAR

                                     Mobile application
Target Images (jpg/png)
                                   App Logic & Rendering
                                          Engine




                                        Target Position
        QDevNet

                                        QCAR library
   Target Management
       Application
    Target.dat Config.xml             Target Resources


                            PAUG                          7
QCAR API



Virtual   Multi Image      Image
Button      Target         Target
                                     Marker   Developer Application



                 Tracker



                        Camera                   Rendering



                                    Android


                                     PAUG                       8
Developing with QCAR
Initialize
                                    Java
   SDK       myApp extends Activity{ 	                                         C/CPP
             void onCreate(){	                               myNativeRenderFrame(JNIEnv *, jobject){	

                                                             glClear(…);	
              Initialize_App();	
              Initialize_QCAR();                             // Render video background:    	
  Load                                                       QCAR::Renderer::getInstance().begin();	
 Tracker      mLoadTrackerTask = new LoadTrackerTask();      for(i … state.getNumActiveTrackables()) {	

                                                              QCAR::Trackable* trackable =     	
                                                              state.getActiveTrackable(i);         	
                   mRenderer = new myRenderer();	
                   mGlView.setRenderer(mRenderer);	           modelViewMatrix =            	
 Update                                                       convertPose2GLMatrix(trackable->getPose());	
 Camera            myRenderer implements                      glMatrixMode(GL_MODELVIEW);          	
  Pose             GLSurfaceView.Renderer{	                   glLoadMatrixf(modelViewMatrix.data); 	
                       void onDrawFrame(GL10 gl){	               …   	
                              myNativeRenderFrame();          … 	
                       }	                                     Add Your OpenGLES 1.1/2.0 Render Code Here 	
                   }	                                         …	
                                                             }	
Update GL    }	
Rendering                                                    // finish GL Rendering	
             void onPause(){	                                 QCAR::Renderer::getInstance().end();	

                  QCAR.onPause();                            }	
             }	

             void onDestroy(){	
                  QCAR.deinit();
Close SDK    }	
             };	

                                                      PAUG                                     9
QCAR and Unity3D




       PAUG        10
QCAR and Unity3D




              Workflow

              •    Create Target QDevNet
              •    Add target resources to project

              •    Add ARCamera Prefab
              •    Add myTarget Prefab
              •    Add 3D objects, physics, shaders,
                   Game Logic, etc.
              •    Deploy on Android device




       PAUG                              11
Soundplugin for Unity3D
        public class JavaClass{	       JavaClass.java                                  SoundManager.java
        private Activity mActivity;	
                                                             public static void initSounds(Context theContext) 	
        public JavaClass(Activity currentActivity) {	        { 	
           mActivity = currentActivity;	                        …	
           SoundManager.initSounds(mActivity);	
SDK     }	
                                                                mAudioManager = 	
                                                                (AudioManager) mContext.getSystemService   	
        public int ActivitySoundPlay(int id, 	                  (Context.AUDIO_SERVICE); 	        	
           float volume) {	                                  }	
           return SoundManager.playSound(id, volume,…);	
        }	



         jint JNI_OnLoad(JavaVM* vm, void* reserved) {	
                                                                               NativeJavaBridge.CPP (JNI)
              jclass cls_Activity    = jni_env->FindClass("com/unity3d/player/UnityPlayer");	
              jclass cls_JavaClass   = jni_env->FindClass("com/diotasoft/pluginunity/JavaClass");	
              activitySoundPlay      = jni_env->GetMethodID(cls_JavaClass, "ActivitySoundPlay", "(IFFIF)I");	
              …	
         }	
NDK      int playSound(int index, float volume, int repeat, float pitch) {	
            jint currentStream = (jint)jni_env->CallObjectMethod(JavaClass, activitySoundPlay, index, volume,
         repeat, pitch);	
            …	
         }	




        public class AndroidSoundPoolPlugin : MonoBehaviour {	
                                                                            AndroidSoundPlugin.CS (C#)

Unity         [DllImport("javabridge")]	
              private static extern int playSound(int index, float volume, int repeat, float pitch);	
              [DllImport("javabridge")]	
              private static extern void stopSound(int currentStream);	
        };	
                                                           PAUG                                             12
Diotasoft Games




The Circus          ARLabyrinth


             PAUG                 13
Conclusions



 QCAR Android SDK/NDK                          QCAR Unity

• Open system (hands on)         • Closed system
• Existant code integration      • Fast content creation
• Features you implement         • Plugins & profiling
• Developer community            • Rich feature sets provided




                               PAUG                             14
Future is Markerless




         PAUG          15
Merci beaucoup




      PAUG       16

More Related Content

What's hot

Open CL For Haifa Linux Club
Open CL For Haifa Linux ClubOpen CL For Haifa Linux Club
Open CL For Haifa Linux Club
Ofer Rosenberg
 
Google Developer Fest 2010
Google Developer Fest 2010Google Developer Fest 2010
Google Developer Fest 2010
Chris Ramsdale
 
Architecture components, Константин Марс, TeamLead, Senior Developer, DataArt
Architecture components, Константин Марс, TeamLead, Senior Developer, DataArtArchitecture components, Константин Марс, TeamLead, Senior Developer, DataArt
Architecture components, Константин Марс, TeamLead, Senior Developer, DataArt
Alina Vilk
 
Using Grails to Power your Electric Car
Using Grails to Power your Electric CarUsing Grails to Power your Electric Car
Using Grails to Power your Electric Car
GR8Conf
 

What's hot (18)

Qt for beginners part 1 overview and key concepts
Qt for beginners part 1   overview and key conceptsQt for beginners part 1   overview and key concepts
Qt for beginners part 1 overview and key concepts
 
Qt State Machine Framework
Qt State Machine FrameworkQt State Machine Framework
Qt State Machine Framework
 
Open CL For Haifa Linux Club
Open CL For Haifa Linux ClubOpen CL For Haifa Linux Club
Open CL For Haifa Linux Club
 
Qt Programming on TI Processors
Qt Programming on TI ProcessorsQt Programming on TI Processors
Qt Programming on TI Processors
 
Building Cross-Platform Apps using Qt and Qyoto
Building Cross-Platform Apps using Qt and QyotoBuilding Cross-Platform Apps using Qt and Qyoto
Building Cross-Platform Apps using Qt and Qyoto
 
JBoss World 2010
JBoss World 2010JBoss World 2010
JBoss World 2010
 
Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010Building Web Apps Sanely - EclipseCon 2010
Building Web Apps Sanely - EclipseCon 2010
 
QThreads: Are You Using Them Wrong?
QThreads: Are You Using Them Wrong? QThreads: Are You Using Them Wrong?
QThreads: Are You Using Them Wrong?
 
Meet the Widgets: Another Way to Implement UI
Meet the Widgets: Another Way to Implement UIMeet the Widgets: Another Way to Implement UI
Meet the Widgets: Another Way to Implement UI
 
Google Developer Fest 2010
Google Developer Fest 2010Google Developer Fest 2010
Google Developer Fest 2010
 
Architecture components, Константин Марс, TeamLead, Senior Developer, DataArt
Architecture components, Константин Марс, TeamLead, Senior Developer, DataArtArchitecture components, Константин Марс, TeamLead, Senior Developer, DataArt
Architecture components, Константин Марс, TeamLead, Senior Developer, DataArt
 
Introduction to the Qt Quick Scene Graph
Introduction to the Qt Quick Scene GraphIntroduction to the Qt Quick Scene Graph
Introduction to the Qt Quick Scene Graph
 
Qt 5 - C++ and Widgets
Qt 5 - C++ and WidgetsQt 5 - C++ and Widgets
Qt 5 - C++ and Widgets
 
Qt and QML performance tips & tricks for Qt 4.7
Qt and QML performance tips & tricks for Qt 4.7Qt and QML performance tips & tricks for Qt 4.7
Qt and QML performance tips & tricks for Qt 4.7
 
GOOGLE APP ENGINE Training in Chennai
GOOGLE APP ENGINE Training in ChennaiGOOGLE APP ENGINE Training in Chennai
GOOGLE APP ENGINE Training in Chennai
 
Qt for beginners part 2 widgets
Qt for beginners part 2   widgetsQt for beginners part 2   widgets
Qt for beginners part 2 widgets
 
Using Grails to Power your Electric Car
Using Grails to Power your Electric CarUsing Grails to Power your Electric Car
Using Grails to Power your Electric Car
 
[Webinar] QtSerialBus: Using Modbus and CAN bus with Qt
[Webinar] QtSerialBus: Using Modbus and CAN bus with Qt[Webinar] QtSerialBus: Using Modbus and CAN bus with Qt
[Webinar] QtSerialBus: Using Modbus and CAN bus with Qt
 

Similar to Paug paris 2011

Breizhcamp Rennes 2011
Breizhcamp Rennes 2011Breizhcamp Rennes 2011
Breizhcamp Rennes 2011
sekond0
 
Hybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitHybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKit
Ariya Hidayat
 
Shape12 6
Shape12 6Shape12 6
Shape12 6
pslulli
 
Google io bootcamp_2010
Google io bootcamp_2010Google io bootcamp_2010
Google io bootcamp_2010
Chris Ramsdale
 

Similar to Paug paris 2011 (20)

Breizhcamp Rennes 2011
Breizhcamp Rennes 2011Breizhcamp Rennes 2011
Breizhcamp Rennes 2011
 
Augmented World Expo 2013 Mobile AR SDK Comparison and Tutorial
Augmented World Expo 2013 Mobile AR SDK Comparison and TutorialAugmented World Expo 2013 Mobile AR SDK Comparison and Tutorial
Augmented World Expo 2013 Mobile AR SDK Comparison and Tutorial
 
Hybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKitHybrid Apps (Native + Web) via QtWebKit
Hybrid Apps (Native + Web) via QtWebKit
 
Hybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitHybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKit
 
Hybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitHybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKit
 
426 lecture6a osgART Development
426 lecture6a osgART Development426 lecture6a osgART Development
426 lecture6a osgART Development
 
The Ring programming language version 1.7 book - Part 75 of 196
The Ring programming language version 1.7 book - Part 75 of 196The Ring programming language version 1.7 book - Part 75 of 196
The Ring programming language version 1.7 book - Part 75 of 196
 
The Ring programming language version 1.8 book - Part 77 of 202
The Ring programming language version 1.8 book - Part 77 of 202The Ring programming language version 1.8 book - Part 77 of 202
The Ring programming language version 1.8 book - Part 77 of 202
 
Game development with_lib_gdx
Game development with_lib_gdxGame development with_lib_gdx
Game development with_lib_gdx
 
React Native for multi-platform mobile applications
React Native for multi-platform mobile applicationsReact Native for multi-platform mobile applications
React Native for multi-platform mobile applications
 
Philipp Nagele (Wikitude) Wikitude SDK Tutorial
Philipp Nagele (Wikitude) Wikitude SDK Tutorial Philipp Nagele (Wikitude) Wikitude SDK Tutorial
Philipp Nagele (Wikitude) Wikitude SDK Tutorial
 
Shape12 6
Shape12 6Shape12 6
Shape12 6
 
Pavlo Zhdanov "Java and Swift: How to Create Applications for Automotive Head...
Pavlo Zhdanov "Java and Swift: How to Create Applications for Automotive Head...Pavlo Zhdanov "Java and Swift: How to Create Applications for Automotive Head...
Pavlo Zhdanov "Java and Swift: How to Create Applications for Automotive Head...
 
JS digest. February 2017
JS digest. February 2017JS digest. February 2017
JS digest. February 2017
 
Qt & Webkit
Qt & WebkitQt & Webkit
Qt & Webkit
 
Ultracode Berlin #2 : Introduction to Perceptual Computing by Sulamita Garcia
Ultracode Berlin #2 : Introduction to Perceptual Computing by Sulamita GarciaUltracode Berlin #2 : Introduction to Perceptual Computing by Sulamita Garcia
Ultracode Berlin #2 : Introduction to Perceptual Computing by Sulamita Garcia
 
End to end todo list app with NestJs - Angular - Redux & Redux Saga
End to end todo list app with NestJs - Angular - Redux & Redux SagaEnd to end todo list app with NestJs - Angular - Redux & Redux Saga
End to end todo list app with NestJs - Angular - Redux & Redux Saga
 
Mobile AR SDK Tutorial - Augmented World Expo New York 2014
Mobile AR SDK Tutorial - Augmented World Expo New York 2014Mobile AR SDK Tutorial - Augmented World Expo New York 2014
Mobile AR SDK Tutorial - Augmented World Expo New York 2014
 
Google io bootcamp_2010
Google io bootcamp_2010Google io bootcamp_2010
Google io bootcamp_2010
 
FLAR Workflow
FLAR WorkflowFLAR Workflow
FLAR Workflow
 

Recently uploaded

Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Recently uploaded (20)

Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)Introduction to Multilingual Retrieval Augmented Generation (RAG)
Introduction to Multilingual Retrieval Augmented Generation (RAG)
 
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
Emergent Methods: Multi-lingual narrative tracking in the news - real-time ex...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 

Paug paris 2011

  • 1. Creating Novel Augmented Reality Applications for Android www.diotasoft.com Sebastian Knödel Ludovic Perrier Yohan Hadjedi skn@diotasoft.com lpe@diotasoft.com yha@diotasoft.com sekond ludovic_perrier nah0y PAUG 1
  • 2. Content Brief History of Mobile AR Mobile AR SDKs & APIs Qualcomm AR SDK (QCAR) QCAR & Unity3D Mobile AR Games Future of mobile AR PAUG 2
  • 3. Brief History of Mobile AR Sensor based tracking GPS position Compass orientation Courtesy Wikitude Wikitude 2009 Vision based tracking Courtesy TU Graz Special Marker 1999 ARToolkitPlus 2007 NyARToolkit 2009 PAUG 3
  • 4. Brief History of Mobile AR Vision based tracking Courtesy Qualcomm Qualcomm AR Courtesy Metaio Natural Features Diotasoft - Werber 2010 Metaio/Juneio PAUG 4
  • 5. Mobile AR SDKs & APIs Proprietary Public PAUG 5
  • 6. Qualcomm AR SDK (QCAR) •  Library for mobile AR development Different target types •  Android only •  Supported devices Qualcomm CPU (Nexus One/S, HTC Desire) •  SDK with Eclipse integration PAUG 6
  • 7. Workflow QCAR Mobile application Target Images (jpg/png) App Logic & Rendering Engine Target Position QDevNet QCAR library Target Management Application Target.dat Config.xml Target Resources PAUG 7
  • 8. QCAR API Virtual Multi Image Image Button Target Target Marker Developer Application Tracker Camera Rendering Android PAUG 8
  • 9. Developing with QCAR Initialize Java SDK myApp extends Activity{ C/CPP void onCreate(){ myNativeRenderFrame(JNIEnv *, jobject){ glClear(…); Initialize_App(); Initialize_QCAR(); // Render video background: Load QCAR::Renderer::getInstance().begin(); Tracker mLoadTrackerTask = new LoadTrackerTask(); for(i … state.getNumActiveTrackables()) { QCAR::Trackable* trackable = state.getActiveTrackable(i); mRenderer = new myRenderer(); mGlView.setRenderer(mRenderer); modelViewMatrix = Update convertPose2GLMatrix(trackable->getPose()); Camera myRenderer implements glMatrixMode(GL_MODELVIEW); Pose GLSurfaceView.Renderer{ glLoadMatrixf(modelViewMatrix.data); void onDrawFrame(GL10 gl){ … myNativeRenderFrame(); … } Add Your OpenGLES 1.1/2.0 Render Code Here } … } Update GL } Rendering // finish GL Rendering void onPause(){ QCAR::Renderer::getInstance().end(); QCAR.onPause(); } } void onDestroy(){ QCAR.deinit(); Close SDK } }; PAUG 9
  • 10. QCAR and Unity3D PAUG 10
  • 11. QCAR and Unity3D Workflow •  Create Target QDevNet •  Add target resources to project •  Add ARCamera Prefab •  Add myTarget Prefab •  Add 3D objects, physics, shaders, Game Logic, etc. •  Deploy on Android device PAUG 11
  • 12. Soundplugin for Unity3D public class JavaClass{ JavaClass.java SoundManager.java private Activity mActivity; public static void initSounds(Context theContext) public JavaClass(Activity currentActivity) { { mActivity = currentActivity; … SoundManager.initSounds(mActivity); SDK } mAudioManager = (AudioManager) mContext.getSystemService public int ActivitySoundPlay(int id, (Context.AUDIO_SERVICE); float volume) { } return SoundManager.playSound(id, volume,…); } jint JNI_OnLoad(JavaVM* vm, void* reserved) { NativeJavaBridge.CPP (JNI) jclass cls_Activity = jni_env->FindClass("com/unity3d/player/UnityPlayer"); jclass cls_JavaClass = jni_env->FindClass("com/diotasoft/pluginunity/JavaClass"); activitySoundPlay = jni_env->GetMethodID(cls_JavaClass, "ActivitySoundPlay", "(IFFIF)I"); … } NDK int playSound(int index, float volume, int repeat, float pitch) { jint currentStream = (jint)jni_env->CallObjectMethod(JavaClass, activitySoundPlay, index, volume, repeat, pitch); … } public class AndroidSoundPoolPlugin : MonoBehaviour { AndroidSoundPlugin.CS (C#) Unity [DllImport("javabridge")] private static extern int playSound(int index, float volume, int repeat, float pitch); [DllImport("javabridge")] private static extern void stopSound(int currentStream); }; PAUG 12
  • 13. Diotasoft Games The Circus ARLabyrinth PAUG 13
  • 14. Conclusions QCAR Android SDK/NDK QCAR Unity • Open system (hands on) • Closed system • Existant code integration • Fast content creation • Features you implement • Plugins & profiling • Developer community • Rich feature sets provided PAUG 14
  • 16. Merci beaucoup PAUG 16