Más contenido relacionado
Mobile AR
- 3. Sey am H s e J fa
An o d E ne g Le Sha n I ov s
@wo d s
- 15. EasyAR Offers EasyAR Suffers
1. Free
2. Cross Platform
3. No Watermark
4. Unlimited Apps
5. Lots of samples(CPP, Kotlin, …)
6. Backward Compatible
1. Almost No Docs
2. Poor Explanation
3. No Gradle Import
- 20. 3.Add Gradle Import to Build.Gradle
4.Sync the Project
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
exclude group: 'com.android.support', module: 'support-annotations'
})
compile 'com.android.support:appcompat-v7:27.1.1'
testCompile 'junit:junit:4.12'
}
- 23. MainActivity
private static String key = "===insert your API Key here===";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON,
WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
if (!Engine.initialize(this, key)) {
Log.e("HelloAR", "Initialization Failed.");
}
glView = new GLView(this);
requestCameraPermission();
}
- 24. @Override
protected void onResume() {
super.onResume();
if (glView != null) { glView.onResume(); }
}
@Override
protected void onPause() {
if (glView != null) { glView.onPause(); }
super.onPause();
}
Activity Lifecycle
- 28. Lifecycle Handling
View
GLSurfaceView
GLView
@Override
public void onResume() {
super.onResume();
Engine.onResume();
}
@Override
public void onPause() {
Engine.onPause();
super.onPause();
}
@Override
protected void onDetachedFromWindow()
{
synchronized (helloAR) {
helloAR.stop();
helloAR.dispose();
}
super.onDetachedFromWindow();
}
@Override
protected void onAttachedToWindow(){
super.onAttachedToWindow();
synchronized (helloAR) {
if (helloAR.initialize()) {
helloAR.start();
}
}
}
- 36. public void render() {
GLES20.glClearColor(1.f, 1.f, 1.f, 1.f);
GLES20.glClear(GLES20.GL_COLOR_BUFFER_BIT | GLES20.GL_DEPTH_BUFFER_BIT);
if (videobg_renderer != null) {
Vec4I default_viewport = new Vec4I(0, 0, view_size.data[0], view_size.data[1]);
GLES20.glViewport(default_viewport.data[0], default_viewport.data[1], default_viewport.data[2], default_viewport.data[3]);
if (videobg_renderer.renderErrorMessage(default_viewport)) {
Return;
}
}
if (streamer == null) { return; }
Frame frame = streamer.peek();
try {
updateViewport();
GLES20.glViewport(viewport.data[0], viewport.data[1], viewport.data[2], viewport.data[3]);
if (videobg_renderer != null) {videobg_renderer.render(frame, viewport);}
for (TargetInstance targetInstance : frame.targetInstances()) {
int status = targetInstance.status();
if (status == TargetStatus.Tracked) {
Target target = targetInstance.target();
ImageTarget imagetarget = target instanceof ImageTarget ? (ImageTarget) (target) : null;
if (imagetarget == null) {continue;}
if (box_renderer != null) {
box_renderer.render(camera.projectionGL(0.2f, 500.f), targetInstance.poseGL(), imagetarget.size());
}}}}
finally {
frame.dispose();
}
}
- 37. Frame frame = streamer.peek();
try {
updateViewport();
GLES20.glViewport(viewport.data[0], viewport.data[1], viewport.data[2], viewport.data[3]);
if (videobg_renderer != null) {
videobg_renderer.render(frame, viewport);
}
for (TargetInstance targetInstance : frame.targetInstances()) {
int status = targetInstance.status();
if (status == TargetStatus.Tracked) {
Target target = targetInstance.target();
ImageTarget imagetarget = target instanceof ImageTarget ? (ImageTarget) (target) : null;
if (imagetarget == null) {continue;}
if (box_renderer != null) {
box_renderer.render(camera.projectionGL(0.2f, 500.f), targetInstance.poseGL(),
imagetarget.size());
}}}}
finally {
frame.dispose();
}
- 39. for (TargetInstance targetInstance : frame.targetInstances()) {
int status = targetInstance.status();
if (status == TargetStatus.Tracked) {
Target target = targetInstance.target();
ImageTarget imagetarget = target instanceof ImageTarget ?
(ImageTarget) (target) : null;
if (imagetarget == null) {continue;}
if (box_renderer != null) {
box_renderer.render(camera.projectionGL(0.2f,500.f),
targetInstance.poseGL(),
imagetarget.size());
}}}}
- 40. if (box_renderer != null) {
box_renderer.render(camera.projectionGL(0.2f,500.f), targetInstance.poseGL(),
imagetarget.size());
}
- 44. Twi r: @wo d s
Tel m: @wo d s
Sey ar
An o d E ne g Le Sha n I ov s
Tha