Ошибка рендеринга видео на изображении с использованием сцены - PullRequest
0 голосов
/ 22 октября 2019

Я успешно могу отобразить видео на изображении при его обнаружении. Проблема в том, что когда я удаляю изображение из этого места, видео все еще продолжает показываться в этом месте, тогда как изображение больше не существует в этом месте. Ниже мой код, когда я использовал для создания 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, нопроблема в том, как моя система узнает, что я больше не фокусируюсь на изображении. чтобы я мог его убить ?

1 Ответ

0 голосов
/ 23 октября 2019

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

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;
            }
        }
    }

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

...