Перевод примера расширенного изображения от Classi c ARCore-Sceneform в Sceneform 1.16.0 - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь перевести пример расширенного изображения из Sceneform 1.15.0 для использования с ARCore 1.18.0 и Sceneform 1.16.0. (Обратите внимание, что репозиторий Sceneform 1.16.0 на GitHub поставляется только с образцом загрузчика gltfio).

Моя цель - использовать библиотеку GLTFIO для загрузки анимированных GLTF / GLB для отображения на изображениях. (Эта функция была невозможна с механизмом плагина Android Studio, предусмотренным для предыдущих версий Sceneform 1.16.0).

Таким образом я изменяю старый механизм загрузки, показанный в вышеупомянутом примере Sceneform 1.15.0:

...
CompletableFuture.allOf(model)
    .thenAccept((Void aVoid) -> {
        _image = image;
    
        setAnchor(image.createAnchor(image.getCenterPose()));
    
        Node nodeRenderable=new Node();
        nodeRenderable.setParent(this);
        nodeRenderable.setRenderable(modelgetNow(null));
    })
    .exceptionally(
        throwable -> {
            Log.e(TAG, "Exception loading", throwable);
            return null;
        });
    }
...

... примерно так ...

...
//gltfio
WeakReference<ARActivity> weakActivity = new WeakReference<>((ARActivity) _context);
//
ModelRenderable.builder()
    .setSource(_context,Uri.parse(uriAsset))
    .setIsFilamentGltf(true)
    .build()
    .thenAccept(modelRenderable -> {
        ARActivity activity = weakActivity.get();
        if (activity != null) {
            _image = image;
            _renderable = modelRenderable;
            //
            // Set the anchor based in the center of the image.
            setAnchor(image.createAnchor(image.getCenterPose()));
            //
            Node nodeRenderable=new Node();
            nodeRenderable.setParent(this);
            nodeRenderable.setRenderable(modelRenderable);
        }
    })
    .exceptionally(throwable -> {
        Toast toast =Toast.makeText(_context, "Unable to load renderable", Toast.LENGTH_LONG);
        toast.setGravity(Gravity.CENTER, 0, 0);
        toast.show();

        return null;
    });
...

Все работает правильно, без ошибок и предупреждений в LogCat. Я имею в виду, что приложение отлично отслеживает изображение, но модель не отображается вообще.

К вашему сведению, я понял, что, когда я возобновляю работу приложения, модель отображается (но фиксируется на экране), пока я не наведу устройство на (расширяемое) изображение.

Кто-нибудь сталкивался с этим сценарием?

Любая помощь?

1 Ответ

1 голос
/ 05 августа 2020

Решено. Предлагаемый код gltfio-loader работал хорошо. Это была проблема только с 3D-моделью, из-за которой она отображалась вне пространства обрезки.

...