"LLMs for Python Engineers: Advanced Data Analysis and Semantic Kernel",Oleks...
Breizhcamp Rennes 2011
1. Creating Novel Augmented Reality
Applications for Mobile Users
www.diotasoft.com
Sebastian Knödel Ludovic Perrier
skn@diotasoft.com
lpe@diotasoft.com
sekont.tumblr.com
ludovic_perrier
sekond
Breizhcamp 1
2. Content
Brief History of Mobile AR
Mobile AR SDKs & APIs
iCyclope for IPhone
Qualcomm AR SDK (QCAR)
QCAR & Unity3D
Mobile AR Games
Future of mobile AR
Breizhcamp 2
3. What is mobile AR good for?
Services
- Information visualization
- Navigation
Games
Promotion, Advertising
Industrial Applications Courtesy Qualcomm
Why now?
Because todays Smart Phones are able to!
- Hardware (computing capacity, sensors,
cameras, screensize, …)
- Software, powerful SDKs (Android, Iphone,
QCAR, …)
Courtesy Layar
Breizhcamp 3
4. Mobile Augmented Reality
Milgram's Continuum
Mixed Reality
Real Augmented Augmented Virtual
Environment Environment Virtuality Environment
Breizhcamp 4
6. 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
Breizhcamp 6
7. Vision-based Tracking
Calculate camera position and orientation relative to
markers – image registration
1. Stage 2. Stage
Feature Detection Coordinate system
Breizhcamp 7
10. Brief History of Mobile AR
Vision based tracking
Courtesy Qualcomm
Qualcomm AR
Courtesy Metaio
Metaio/Juneio
Diotasoft – iCyclope – Werber 2010
Breizhcamp 10
12. Video & Sound
Sound mp3 Video pvr
video = [Video alloc];
for (int i = 0; i < countFile; i++){
[imgDataArray addObject:[[NSData alloc]
initWithContentsOfFile:path]];
}
Breizhcamp 12
13. Camera Capture & Tracking
Capture camera image
/*We setup the input*/
AVCaptureDeviceInput *captureInput = [AVCaptureDeviceInput …];
/*We setup the output*/
AVCaptureVideoDataOutput *captureOutput =
[AVCaptureVideoDataOutput alloc] ..];
From image to position
bool mTracked =
[tracking imgPointer width:width height:height :position];
Breizhcamp 13
18. QCAR API
Virtual Multi Image Image
Button Target Target
Marker Developer Application
Tracker
Camera Rendering
Android
Breizhcamp 18
19. Developing with QCAR
myAR_App.java
/** The main activity for the myAR_App */
public class myAR_App extends Activity{…}
myAR_Renderer.java
/** The renderer class for the myAR_App activity. */
public class myAR_Renderer implements GLSurfaceView.Renderer{…}
myAR_GLView.java
/** Configuring an translucent OpenGL surface view */
public class myAR_GLView extends GLSurfaceView{…}
myAR_NativeRenderer.cpp
/** OpenGL Rendering */
myNativeRenderFrame(JNIEnv *, jobject){…}
Breizhcamp 19
20. Developing with QCAR
myAR_App
/** The main activity for the myAR_App */
public class myAR_App extends Activity
{
protected void onCreate(Bundle savedInstanceState)
{
loadTextures();
// init myAR_GLView, init myAR_Renderer, ScreenOrientation, SplashScreen
initApplication();
mInitQCARTask = new InitQCARTask(); // Initialize QCAR asynchronously.
mInitQCARTask.execute();
mLoadTrackerTask = new LoadTrackerTask(); // Load the tracking data
mInitQCARTask.execute();
onQCARInitializedNative();//tracking of multiple targets simultaneously
startCamera();
}
}
Breizhcamp 20
21. Developing with QCAR
myAR_GLView
/** Configuring an translucent OpenGL surface view */
public class myAR_GLView extends GLSurfaceView
{
public void init(int flags, boolean translucent, int depth, int stencil)
{
this.getHolder().setFormat(PixelFormat.TRANSLUCENT);
setOpenGLContext(1.1/2.0);
}
}
Breizhcamp 21
22. Developing with QCAR
myAR_Renderer
/** The renderer class for the myAR_App activity. */
public class myAR_Renderer implements GLSurfaceView.Renderer
{
public void onSurfaceCreated(GL10 gl, EGLConfig config)
{
initRendering(); // native fct
QCAR.onSurfaceCreated();
}
/** Called when the surface changed size. */
public void onSurfaceChanged(GL10 gl, int width, int height)
{
updateRendering(width, height); // native fct
QCAR.onSurfaceChanged(width, height);
}
/** Called to draw the current frame. */
public void onDrawFrame(GL10 gl)
{
// Call native function to render content
myRenderFrameNative();
}
}
Breizhcamp 22