0

我运行了 ARCore SDK 和 Sceneform SDK 中提供的所有示例。但在 Sceneform 样本中,它只检测平面表面而不检测墙壁。但它适用于 ARCore SDK 中提供的示例。那么 Sceneform 中没有墙壁检测功能吗?是否有任何使用 Sceneform 无法访问的 ARCore 功能?

4

1 回答 1

1

使用 Sceneform 时,可以使用 Android 上 ARCore 的所有功能。最常见的用例非常简单,例如在地板上处理对象。

要访问 ARCore 会话,您可以调用ArSceneView.getSession()

您可以通过调用Scene.setOnUpdateListener()然后在侦听器中调用 ArSceneView.getArFrame()来设置场景侦听器来执行每帧操作。

例如

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    this.sceneView = (ArSceneView) findViewById(R.id.scene_view);
    sceneView.getScene().setOnUpdateListener((this::onSceneUpdate));
}

private void onSceneUpdate(FrameTime updatedTime) {
    Frame frame = sceneView.getArFrame();
    Collection<Anchor> updatedAnchors = frame.getUpdatedAnchors();
    for (Anchor anchor : updatedAnchors) {
        // Handle updated anchors...
    }
}

对于需要会话配置的 ARCore 功能,您可以在自己的代码中创建会话并调用ArSceneView.setupSession(),或者如果您使用 ArFragment,您可以扩展 ArFragment 可以实现getSessionConfiguration(),该方法在创建会话后立即调用。

请记住,如果您直接配置会话以将更新模式设置为 LATEST_CAMERA_IMAGE。

于 2018-05-16T22:28:59.967 回答