Skip to content

Commit

Permalink
partially implemented lake AR
Browse files Browse the repository at this point in the history
  • Loading branch information
sangeetagupta2068 committed Sep 17, 2020
1 parent 28d286f commit 8d571e1
Show file tree
Hide file tree
Showing 11 changed files with 345 additions and 18 deletions.
2 changes: 1 addition & 1 deletion .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

7 changes: 7 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,10 @@ android {
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions{
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
}

dependencies {
Expand All @@ -42,5 +46,8 @@ dependencies {

implementation 'com.github.bumptech.glide:glide:4.9.0'

implementation 'com.google.ar.sceneform.ux:sceneform-ux:1.15.0'
implementation 'com.google.ar.sceneform:assets:1.15.0'

}
apply plugin: 'com.google.gms.google-services'
Binary file added app/sampledata/sample/Astronaut.bin
Binary file not shown.
154 changes: 154 additions & 0 deletions app/sampledata/sample/Astronaut.gltf
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
{
"accessors" : [
{
"bufferView" : 0,
"componentType" : 5123,
"count" : 4812,
"max" : [ 4811 ],
"min" : [ 0 ],
"name" : "buffer-0-accessor-indices-buffer-0-mesh-0",
"type" : "SCALAR"
},
{
"bufferView" : 2,
"componentType" : 5126,
"count" : 4812,
"max" : [ 1.119698047637939, 4.021694183349609, 0.7111790180206299 ],
"min" : [ -1.119698047637939, 0, -0.7358450293540955 ],
"name" : "buffer-0-accessor-position-buffer-0-mesh-0",
"type" : "VEC3"
},
{
"bufferView" : 2,
"byteOffset" : 57744,
"componentType" : 5126,
"count" : 4812,
"max" : [ 1, 1, 1 ],
"min" : [ -1, -1, -1 ],
"name" : "buffer-0-accessor-normal-buffer-0-mesh-0",
"type" : "VEC3"
},
{
"bufferView" : 1,
"componentType" : 5126,
"count" : 4812,
"max" : [ 0.9919459819793701, 0 ],
"min" : [ 0, -0.9937999844551086 ],
"name" : "buffer-0-accessor-texcoord-buffer-0-mesh-0",
"type" : "VEC2"
},
{
"bufferView" : 3,
"componentType" : 5126,
"count" : 0,
"max" : [ 0, 0, 0, 0 ],
"min" : [ 0, 0, 0, 0 ],
"name" : "buffer-0-accessor-color-buffer-0-mesh-0",
"type" : "VEC4"
}
],
"asset" : {
"generator" : "Obj2GltfConverter",
"version" : "2.0"
},
"bufferViews" : [
{
"buffer" : 0,
"byteLength" : 9624,
"byteStride" : 0,
"name" : "buffer-0-bufferview-ushort",
"target" : 34963
},
{
"buffer" : 0,
"byteLength" : 38496,
"byteOffset" : 9624,
"byteStride" : 8,
"name" : "buffer-0-bufferview-vec2",
"target" : 34962
},
{
"buffer" : 0,
"byteLength" : 115488,
"byteOffset" : 48120,
"byteStride" : 12,
"name" : "buffer-0-bufferview-vec3",
"target" : 34962
},
{
"buffer" : 0,
"byteLength" : 1,
"name" : "buffer-0-bufferview-vec4"
}
],
"buffers" : [
{
"byteLength" : 163616,
"name" : "buffer-0",
"uri" : "Astronaut.bin"
}
],
"images" : [
{
"mimeType" : "image/png",
"name" : "Astronaut_mat-image",
"uri" : "Astronaut_BaseColor.png"
}
],
"materials" : [
{
"doubleSided" : true,
"name" : "Astronaut_mat",
"pbrMetallicRoughness" : {
"baseColorFactor" : [ 0.5, 0.5, 0.5, 1 ],
"baseColorTexture" : {
"index" : 0
},
"metallicFactor" : 0,
"roughnessFactor" : 0.9699476628648295
}
}
],
"meshes" : [
{
"name" : "buffer-0-mesh-0",
"primitives" : [
{
"attributes" : {
"NORMAL" : 2,
"POSITION" : 1,
"TEXCOORD_0" : 3
},
"indices" : 0,
"material" : 0
}
]
}
],
"nodes" : [
{
"mesh" : 0,
"name" : "node-0"
}
],
"samplers" : [
{
"name" : "Astronaut_mat-sampler",
"wrapS" : 10497,
"wrapT" : 10497
}
],
"scenes" : [
{
"name" : "scene-0",
"nodes" : [ 0 ]
}
],
"textures" : [
{
"name" : "Astronaut_mat-texture",
"sampler" : 0,
"source" : 0
}
]
}
Binary file added app/sampledata/sample/Astronaut_BaseColor.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
18 changes: 11 additions & 7 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.pukhuriandbeels.limknowpilot">
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera.ar" android:required="true"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<application
android:allowBackup="true"
Expand Down Expand Up @@ -32,6 +40,9 @@
<meta-data
android:name="preloaded_fonts"
android:resource="@array/preloaded_fonts" />
<meta-data
android:name="com.google.ar.core"
android:value="required"/>

<provider
android:name="androidx.core.content.FileProvider"
Expand All @@ -43,12 +54,5 @@
android:resource="@xml/file_paths" />
</provider>
</application>
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

</manifest>
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ public boolean onNavigationItemSelected(@NonNull MenuItem item) {
startActivity(intent);
break;
case R.id.augmented_reality_game:
Intent lakeARIntent = new Intent(CitizenScienceActivity.this, LakeARActivity.class);
startActivity(lakeARIntent);
break;
case R.id.reporting:
break;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,14 +1,156 @@
package com.pukhuriandbeels.limknowpilot;

import androidx.appcompat.app.AlertDialog;
import androidx.appcompat.app.AppCompatActivity;

import android.net.Uri;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;

import com.google.android.gms.tasks.OnSuccessListener;
import com.google.ar.core.Anchor;
import com.google.ar.core.HitResult;
import com.google.ar.core.Plane;
import com.google.ar.sceneform.AnchorNode;
import com.google.ar.sceneform.assets.RenderableSource;
import com.google.ar.sceneform.rendering.ModelRenderable;
import com.google.ar.sceneform.rendering.Renderable;
import com.google.ar.sceneform.ux.ArFragment;
import com.google.ar.sceneform.ux.BaseArFragment;
import com.google.ar.sceneform.ux.TransformableNode;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.firestore.FirebaseFirestore;
import com.google.firebase.storage.FileDownloadTask;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;

import java.io.File;
import java.io.IOException;

public class LakeARActivity extends AppCompatActivity {

private ArFragment arFragment;
private Button buttonAR;

private ModelRenderable modelRenderable;
private String MODEL_URL = "";
private FirebaseAuth firebaseAuth;
private StorageReference firebaseStorageReference;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_lake_a_r);
setContentView(R.layout.activity_lake_ar);
initialize();
setListeners();
}

private void initialize(){
arFragment = (ArFragment) getSupportFragmentManager().findFragmentById(R.id.lake_ar_fragment);
buttonAR = findViewById(R.id.button_lake_ar);
}

private void setListeners(){
arFragment.setOnTapArPlaneListener(new BaseArFragment.OnTapArPlaneListener() {
@Override
public void onTapPlane(HitResult hitResult, Plane plane, MotionEvent motionEvent) {
placeModel(hitResult.createAnchor());
}
});
}

private void placeModel(Anchor anchor){
ModelRenderable.builder().setSource(this, RenderableSource.builder()
.setSource(this, Uri.parse(MODEL_URL),RenderableSource.SourceType.GLB)
.setScale(0.75f)
.setRecenterMode(RenderableSource.RecenterMode.ROOT)
.build()

).setRegistryId(MODEL_URL)
.build()
.thenAccept(renderable -> {
addNodeToScene(renderable,anchor);
}).exceptionally(throwable -> {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setMessage(throwable.getMessage()).show();
return null;
});
}

private void addNodeToScene(ModelRenderable renderable, Anchor anchor) {
AnchorNode anchorNode = new AnchorNode(anchor);
anchorNode.setRenderable(renderable);
arFragment.getArSceneView().getScene().addChild(anchorNode);
}

// private void setupModel(){
// ModelRenderable.builder().setSource(
// this,
// RenderableSource
// .builder()
// .setSource(this, Uri.parse(MODEL_URL),RenderableSource.SourceType.GLB).setScale(0.75f)
// .setRecenterMode(RenderableSource.RecenterMode.ROOT)
// .build())
// .setRegistryId(MODEL_URL)
// .build()
// .thenAccept(renderable -> modelRenderable = renderable)
// .exceptionally(throwable -> {
// Toast.makeText(LakeARActivity.this, "Unable to load model.", Toast.LENGTH_SHORT).show();
// return null;
// });
// }
//
// private void setupPlane() {
// arFragment.setOnTapArPlaneListener(((hitResult, plane, motionEvent) -> {
// Anchor anchor = hitResult.createAnchor();
// AnchorNode anchorNode = new AnchorNode(anchor);
// anchorNode.setRenderable(modelRenderable);
// arFragment.getArSceneView().getScene().addChild(anchorNode);
//// createModel(anchorNode);
//
// }));
// }
//
// private void createModel(AnchorNode anchorNode){
// TransformableNode transformableNode = new TransformableNode(arFragment.getTransformationSystem());
// transformableNode.setParent(anchorNode);
// transformableNode.setRenderable(modelRenderable);
// transformableNode.select();
// }
//
// private void setupFirebase(){
// firebaseAuth = FirebaseAuth.getInstance();
//
// firebaseStorageReference = FirebaseStorage.getInstance().getReference();
// StorageReference macrophyteStorageReference = firebaseStorageReference.child("AR Animals");
// StorageReference sampleReference = macrophyteStorageReference.child("AR Animals/BlackNeckedStilt.glb");
//
// try {
// File file = File.createTempFile("BlackNeckedStilt","glb");
// sampleReference.getFile(file).addOnSuccessListener(new OnSuccessListener<FileDownloadTask.TaskSnapshot>() {
// @Override
// public void onSuccess(FileDownloadTask.TaskSnapshot taskSnapshot) {
// buildModel(file);
// Toast.makeText(getApplicationContext(),"Reached here", Toast.LENGTH_SHORT).show();
// }
// });
// } catch (IOException e) {
// e.printStackTrace();
// }
//
// }
//
// private void buildModel(File file) {
// RenderableSource renderableSource = RenderableSource.builder()
// .setSource(this,Uri.parse(file.getPath()),RenderableSource.SourceType.GLB)
// .setRecenterMode(RenderableSource.RecenterMode.ROOT)
// .build();
//
// ModelRenderable.builder().setSource(this, renderableSource).setRegistryId(Uri.parse(file.getPath())).build().thenAccept(renderable -> {
// modelRenderable = renderable;
// });
// }
}
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,8 @@ public boolean onNavigationItemSelected(@NonNull MenuItem item) {
case R.id.macrophytes:
break;
case R.id.augmented_reality_game:
Intent lakeARIntent = new Intent(MacrophyteListActivity.this, LakeARActivity.class);
startActivity(lakeARIntent);
break;
case R.id.reporting:
Intent intent = new Intent(MacrophyteListActivity.this, InvasiveSpeciesWatchActivity.class);
Expand Down
Loading

0 comments on commit 8d571e1

Please sign in to comment.