Search code examples
javaandroidsceneform

Not able to load my 3D object(GLTF) at run time


Not able to load my 3D object(GLTF) at runtime. or i might not getting 3D object(Gltf) from server. . . i'm trying to get 3D object from a live server and try to load that object into my scenefoam. but i'm not able to load and show 3D object. when i try to load the object i got these error mention below my app is not crashing but still not able to load the 3D model (GLTF). Or i need to get some special-type of Url or anything else from my server when getting object from api ?

this is my code (java )

///ARObjectActivity.java

public class ARObjectActivity extends AppCompatActivity {



private ArFragment arFragment;
private String Asset_3D = "";
String imageUri;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_a_r_object);

    arFragment=(ArFragment) getSupportFragmentManager().findFragmentById(R.id.arFragment);

    WebServiceFactory.getInstance().getARObject(2).enqueue(new Callback<ARObject>() {
        @Override
        public void onResponse(Call<ARObject> call, Response<ARObject> response) {
            if (response.body().getFlag() ==1){

                Asset_3D = response.body().getFILES().getFilePath();

                imageUri = "http://abc.example.pk"+Asset_3D;

                Log.e("3dObject",imageUri );

                arFragment.setOnTapArPlaneListener((hitResult, plane, motionEvent) ->
                        placeModel(hitResult.createAnchor()));


            }
        }

        @Override
        public void onFailure(Call<ARObject> call, Throwable t) {

        }
    });


}

private void placeModel(Anchor anchor) {

    Toast.makeText(this, ""+imageUri, Toast.LENGTH_SHORT).show();


            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                ModelRenderable.builder()
                        .setSource(ARObjectActivity.this, RenderableSource.builder()
                                        .setSource(ARObjectActivity.this,
                                                Uri.parse(imageUri),
                                                RenderableSource.SourceType.GLTF2)
                                        .setScale(0.5f)
                                        .setRecenterMode(RenderableSource.RecenterMode.ROOT)
                                        .build()
                        )
                        .setRegistryId(Asset_3D)
                        .build()
                        .thenAccept(modelRenderable -> addNoteToScene(modelRenderable,anchor))
                        .exceptionally(throwable -> {
                            AlertDialog.Builder builder = new AlertDialog.Builder(ARObjectActivity.this);
                            builder.setMessage(throwable.getMessage()).show();
                            return null;

                        });
            }


}

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


}

}

ARObject.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".Activities.ARObjectActivity">

<fragment
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:id="@+id/arFragment"
    android:name="com.google.ar.sceneform.ux.ArFragment"/>


</LinearLayout>

these are the errors i got in my logcat

 2020-03-28 17:40:32.929 7301-7301/com.adroit.asle E/native: hit_test.cc:381 generic::internal: No 
point hit.
2020-03-28 17:40:32.953 7301-7980/com.adroit.asle E/ModelRenderable: Unable to load Renderable 
registryId='/CONTENT/PRODUCT/MODELS/model23329.gltf'
 java.util.concurrent.CompletionException: java.util.concurrent.CompletionException: 
java.io.FileNotFoundException: http://abc.example.pk/CONTENT/PRODUCT/MODELS/model23329.gltf
    at com.google.ar.sceneform.utilities.SceneformBufferUtils.inputStreamToByteBuffer(SourceFile:48)
    at com.google.ar.sceneform.rendering.LoadRenderableFromSfbTask.
lambda$downloadAndProcessRenderable$0$LoadRenderableFromSfbTask
(LoadRenderableFromSfbTask.java:118)
    at com.google.ar.sceneform.rendering.
-$$Lambda$LoadRenderableFromSfbTask$0DkaOpfpmr8DYlbaxWogZtUpKTw.get(Unknown Source:4)
    at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1625)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
    at java.lang.Thread.run(Thread.java:764)
 Caused by: java.util.concurrent.CompletionException: java.io.FileNotFoundException: 
http://abc.example.pk/CONTENT/PRODUCT/MODELS/model23329.gltf
    at com.google.ar.sceneform.assets.RenderableSource.downloadUri(Unknown Source:26)
    at com.google.ar.sceneform.assets.RenderableSource.call(Unknown Source:53)
    at com.google.ar.sceneform.assets.RenderableSource.call(Unknown Source:0)
    at com.google.ar.sceneform.utilities.SceneformBufferUtils.inputStreamToByteBuffer(SourceFile:42)
    at com.google.ar.sceneform.rendering.LoadRenderableFromSfbTask.
lambda$downloadAndProcessRenderable$0$LoadRen derableFromSfbTask(LoadRenderableFromSfbTask.java:118) 
    at 
com.google.ar.sceneform.rendering.
-$$Lambda$LoadRenderableFromSfbTask$0DkaOpfpmr8DYlbaxWogZtUpKTw.get(Unknown Source:4) 
    at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1625) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
    at java.lang.Thread.run(Thread.java:764) 
 Caused by: java.io.FileNotFoundException: 
http://abc.example.pk/CONTENT/PRODUCT/MODELS/model23329.gltf
    at 
 com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:251)
    at com.google.ar.sceneform.utilities.LoadHelper
.lambda$remoteUriToInputStreamCreator$3$LoadHelper(SourceFile:124)
    at com.google.ar.sceneform.utilities.c.call(Unknown Source:2)
    at com.google.ar.sceneform.assets.RenderableSource.downloadUri(Unknown Source:13)
    at com.google.ar.sceneform.assets.RenderableSource.call(Unknown Source:53) 
    at com.google.ar.sceneform.assets.RenderableSource.call(Unknown Source:0) 
    at com.google.ar.sceneform.utilities.SceneformBufferUtils.inputStreamToByteBuffer(SourceFile:42) 
    at com.google.ar.sceneform.rendering.LoadRenderableFromSfbTask
.lambda$downloadAndProcessRenderable$0$LoadRenderableFromSfbTask
(LoadRenderableFromSfbTask.java:118) 
    at 
 com.google.ar.sceneform.rendering.
-$$Lambda$LoadRenderableFromSfbTask$0DkaOpfpmr8DYlbaxWogZtUpKTw.get(Unknown Source:4) 
    at java.util.concurrent.CompletableFuture$AsyncSupply.run(CompletableFuture.java:1625) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
    at java.lang.Thread.run(Thread.java:764) 
2020-03-28 17:40:32.962 7301-7301/com.adroit.asle E/native: hit_test.cc:381 generic::internal: No 
point hit.

Solution

  • Well, the error logcat speaks itself. There is no file

    Caused by: java.util.concurrent.CompletionException: java.io.FileNotFoundException: 
    http://abc.example.pk/CONTENT/PRODUCT/MODELS/model23329.gltf
    

    AFAIK there is no need some special-type of Url as long as the url is legit. Try hardcoded your imageUri to https://github.com/KhronosGroup/glTF-Sample-Models/raw/master/2.0/Duck/glTF/Duck.gltf and see what happen i guess. (Source: Load 3D models at runtime)