使用Sceneform在AR环境中显示前置摄像头预览

时间:2018-09-07 05:44:00

标签: android arcore sceneform

我试图通过创建一个简单的应用程序来尝试使用ARCore和Scenefrom SDK,在该应用程序中,用户可以在AR空间中点击以放置一个虚拟镜像,以便在其中可以看到自己的环境。

到目前为止,我所做的就是尝试使用Camera2 API捕获要在SurfaceViewTextureView上显示的前置摄像头预览,然后使用ViewRenderable将该视图加载到AR环境中,但无法在AR中显示预览。

由于我不太熟悉Camera2 API,因此我也尝试使用Google's CameraView库。与之前相同,我使用ViewRenderable将此视图加载到AR,并分别在节点#start()#stop()的生命周期中调用其onActivated()onDeactivated()方法。

import com.google.android.cameraview.CameraView

private lateinit var mirrorRenderable: ViewRenderable
private lateinit var cameraView: CameraView

// During onCreate()
ViewRenderable.builder()
    .setView(this, R.layout.view_mirror)
    .build()
    .thenAccept {
        mirrorRenderable = it
        cameraView = it.view.findViewById(R.id.camera_view)
    }

// Upon tapping AR scene
val mirrorNode = Node()
with (mirrorNode) {
    renderable = mirrorRenderable
    addLifecycleListener(object : Node.LifecycleListener {
        override fun onActivated(node: Node) {
            cameraView.start()
        }

        override fun onUpdated(node: Node, frameTime: FrameTime) {}

        override fun onDeactivated(node: Node) {
            cameraView.stop()
        }
    })
}

仍然没有成功。

问题1:我在上面的代码段中错过了什么吗?

第二季度:我们不能像其他2D Android视图一样在SurfaceView的AR中使用TextureViewViewRenderable吗?

因为我从Scenefrom SDK中找到了一个名为ExternalTexture的东西,其中包含SurfaceSurfaceTexture的实例以在AR环境中使用。有了这个发现,它似乎支持了我的 Q2 ,而且似乎一开始我就对Sceneform的ViewRenderable API误解了,因为我认为它可以在AR环境中呈现任何Android 2D视图就像在ActivityFragment中可以做什么。

如果是这样,那么

第三季度:我如何利用这个ExternalTexture来满足自己的要求?

例如如果将相机的预览加载到Surface的{​​{1}}实例中,则找不到将其添加到AR环境的方法。

我找不到很多例子,如果可以分享,我将不胜感激。

0 个答案:

没有答案