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