我试图通过创建一个简单的应用程序来尝试使用ARCore和Scenefrom SDK,在该应用程序中,用户可以在AR空间中点击以放置一个虚拟镜像,以便在其中可以看到自己的环境。
到目前为止,我所做的就是尝试使用Camera2 API捕获要在SurfaceView
或TextureView
上显示的前置摄像头预览,然后使用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中使用TextureView
和ViewRenderable
吗?
因为我从Scenefrom SDK中找到了一个名为ExternalTexture
的东西,其中包含Surface
和SurfaceTexture
的实例以在AR环境中使用。有了这个发现,它似乎支持了我的 Q2 ,而且似乎一开始我就对Sceneform的ViewRenderable
API误解了,因为我认为它可以在AR环境中呈现任何Android 2D视图就像在Activity
或Fragment
中可以做什么。
如果是这样,那么
第三季度:我如何利用这个ExternalTexture
来满足自己的要求?
例如如果将相机的预览加载到Surface
的{{1}}实例中,则找不到将其添加到AR环境的方法。
我找不到很多例子,如果可以分享,我将不胜感激。