android - 使用场景形式在图像上渲染视频
问题描述
当它检测到图像时,我能够成功地在图像上渲染视频。问题是当我从那个地方删除图像时,视频仍然继续显示在那个地方,而图像在那个地方不再存在。下面是我以前创建时的代码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 对象,但问题是我的系统如何知道我不再关注图像。这样我就可以杀了它?
解决方案
在更新侦听器上,您可以像下面这样跟踪图像,
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;
}
}
}
您可以查看 STOPPED、PAUSED 和 TACKING 等跟踪状态
推荐阅读
- javascript - JS中调用的方法对象函数是什么?
- reactjs - 2 将实时坐标从移动(RN)传递到网络(反应)的问题
- python-3.x - 如何在 2021 年从 Python 应用程序发布到 Facebook 页面
- java - Java Agent DeadLock 启动时锁定 ClassLoader 和 [I?
- c# - 如何在 Visual Studio C# 中禁用右大括号的缩进
- angular - 在函数 Angular 中找不到声明
- php - 将文档根目录包含到变量路径
- spring - Spring Boot 中组件之间的 MessageHandler
- python - ImportError:无法从“torch._six”导入名称“PY3”
- regex - 如何获取网站的版权字符串