如何在ARCore / Sceneform中加速平面检测

时间:2018-09-17 16:30:31

标签: android augmented-reality arcore sceneform

ARCore场景样例项目“ hellosceneform”非常酷,并且运行良好。

问题是移动电话以在其上放置锚点的表面的要求。太慢了。

我的应用程序不需要在垂直平面(墙壁)上显示任何内容,而仅在地板上显示任何内容。无论如何,我可以跳过“移动电话”步骤或至少加快速度吗?

我尝试过:

session.getConfig().setPlaneFindingMode(Config.PlaneFindingMode.HORIZONTAL);

认为,如果我不再需要查找垂直平面,那么一切都会更快。....看起来不够快。

谢谢!

3 个答案:

答案 0 :(得分:1)

隐藏动画,该动画向用户显示如何移动手机 使用

 arFragment.planeDiscoveryController.hide()
 arFragment.planeDiscoveryController.setInstructionView(null)

答案 1 :(得分:0)

不幸的是,该框架受(用于读取)启用的计算机视觉模型(用于检测平面)的限制。平面发现控制器(即“移动电话”步骤)是对用户的推动,可以通过照相机为模型提供他们需要检测这些平面的深度信息。删除此步骤不会加快流程,只会使用户无须任何说明。

在没有改进核心平面检测模型的情况下,我不希望有一种方法可以使其更快。我们能做的最好的事情就是提出UX微调,鼓励用户更有效地横向移动手机。

答案 2 :(得分:0)

在ARCore中加快平面检测非常容易。这是一个代码段:

class MainActivity : AppCompatActivity() {

    lateinit var arFrag: ArFragment

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_ux)

        arFrag = supportFragmentManager.findFragmentById(R.id.ux_fragment) as ArFragment
        arFrag.planeDiscoveryController.hide()
        arFrag.planeDiscoveryController.setInstructionView(null)
        arFrag.arSceneView.planeRenderer.isEnabled = false
        arFrag.arSceneView.scene.setOnUpdateListener(::onFrame)
    }

    // ........................................................
}

希望这会有所帮助。