Невозможно загрузить мой 3D-объект (GLTF) во время выполнения - PullRequest
0 голосов
/ 28 марта 2020

Невозможно загрузить мой 3D-объект (GLTF) во время выполнения. или я не могу получить 3D-объект (Gltf) с сервера. , , Я пытаюсь получить 3D-объект с живого сервера и загрузить этот объект в мою сцену. но я не могу загрузить и показать 3D-объект. когда я пытаюсь загрузить объект, я получаю эти сообщения об ошибках ниже, мое приложение не падает, но все еще не может загрузить 3D-модель (GLTF). Или мне нужно получить какой-то специальный тип Url или что-нибудь еще с моего сервера при получении объекта из API?

это мой код (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>

это ошибки, которые я получил в своей 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.

1 Ответ

1 голос
/ 03 апреля 2020

Ну, ошибка logcat говорит сама за себя. Нет файла

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

AFAIK. Нет необходимости в специальном типе URL-адреса, если URL-адрес le git. Попробуйте жестко закодировать ваш imageUri до https://github.com/KhronosGroup/glTF-Sample-Models/raw/master/2.0/Duck/glTF/Duck.gltf и посмотрите, что произойдет, я думаю. (Источник: Загрузка 3D-моделей во время выполнения )

...