Проблема с рендерингом видео на изображении с использованием формы сцены

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

  private fun createArScene() {
    // Create an ExternalTexture for displaying the contents of the video.
    externalTexture = ExternalTexture().also {
        mediaPlayer.setSurface(it.surface)
    }

    // Create a renderable with a material that has a parameter of type 'samplerExternal' so that
    // it can display an ExternalTexture.
    ModelRenderable.builder()
        .setSource(requireContext(), R.raw.augmented_video_model)
        .build()
        .thenAccept { renderable ->
            videoRenderable = renderable
            renderable.isShadowCaster = false
            renderable.isShadowReceiver = false
            renderable.material.setExternalTexture("videoTexture", externalTexture)
        }
        .exceptionally { throwable ->
            Log.e(TAG, "Could not create ModelRenderable", throwable)
            return@exceptionally null
        }

    videoAnchorNode = VideoAnchorNode().apply {
        setParent(arSceneView.scene)
    }
  }

при прослушивании обновлений

    override fun onUpdate(frameTime: FrameTime) {


    val frame = arSceneView.arFrame


    if (frame == null || frame.camera.trackingState != TrackingState.TRACKING) {
        return
    }

    val updatedAugmentedImages = frame.getUpdatedTrackables(AugmentedImage::class.java)
    for (augmentedImage in updatedAugmentedImages) {
        if (activeAugmentedImage != augmentedImage && augmentedImage.trackingState == TrackingState.TRACKING) {
            try {
                dismissArVideo()
                playbackArVideo(augmentedImage)
                break
            } catch (e: Exception) {
                Log.e(TAG, "Could not play video [${augmentedImage.name}]", e)
            }
        }
    }


}

Итак, я считаю, что мне нужно продолжать проверять объект externalTexture, но проблема в том, как моя система узнает, что я больше не фокусируюсь на изображении. чтобы я мог его убить ?


person Vishvendu Palawat    schedule 22.10.2019    source источник


Ответы (1)


В прослушивателе обновлений вы можете отслеживать изображение, как показано ниже:

Frame frame = arFragment.getArSceneView().getArFrame();
    Collection<AugmentedImage> augmentedImages = 
frame.getUpdatedTrackables((AugmentedImage.class));
    for (AugmentedImage image: augmentedImages){
        if(image.getTrackingState() == TrackingState.TRACKING){
            if(image.getName().equals("image")){

                isImageDetected = true;

                playVideo(image.createAnchor(image.getCenterPose()), 
image.getExtentX(), image.getExtentZ());
                break;
            }
        }
    }

Вы можете проверить с помощью таких состояний отслеживания, как ОСТАНОВЛЕНО, ПРИОСТАНОВЛЕНО и ПРИСОЕДИНЯЕТСЯ

person Mallikarjun Hampannavar    schedule 23.10.2019
comment
Я добавил свой прослушиватель обновлений в код. Вы видите, что это отличается от того, что вы предоставили? - person Vishvendu Palawat; 23.10.2019
comment
Проблема в том, что он обнаруживает, когда я меняю image1.jpg на image2.jpg, но если я удаляю image1.jpg в этом месте, он продолжает показывать видео, которое было сопоставлено с image1.jpg. Моя проблема заключается в том, как определить, что изображения нет. после сканирования image1.jpg и остановки видео - person Vishvendu Palawat; 23.10.2019
comment
Пожалуйста, взгляните на этот medium.com/krootl/ - person Mallikarjun Hampannavar; 23.10.2019
comment
@VishvenduPalawat У вас есть решение? - person Mallikarjun Hampannavar; 30.10.2019
comment
Нет, мой вариант использования отличается от того, что они там показали - person Vishvendu Palawat; 30.10.2019
comment
@VishvenduPalawat Каков ваш вариант использования? - person Mallikarjun Hampannavar; 30.10.2019