场景和地理定位

Sceneform and geolocation

使用 ARCore 和 Sceneform 我正在尝试在垂直表面(这是一面墙)上添加肖像,我目前正在使用 ViewRenderer 从 Sceneform 库中执行此操作。一切正常,但我现在面临 2 个问题:

第一个问题是 ViewRenderer 将在 3D 中渲染一个 Android 视图,所以我不得不将节点在其右向量上旋转 90 度,以便它在墙上变平。这可行,但现在我的第二个问题是我需要肖像始终与地球引力垂直。

如何实现?

您可能想在为您的对象创建锚点时调用 Pose.extractTranslation() (https://developers.google.com/ar/reference/java/com/google/ar/core/Pose.html#extractTranslation())。这将从 ARCore 处理触摸事件时添加的 Pose 中删除旋转部分。 使用 https://developers.google.com/ar/reference/java/com/google/ar/core/Session#createAnchor(com.google.ar.core.Pose) 您可以从该姿势创建一个新的锚点。

如果你有一个 ArFragment,它看起来像这样:

arFragment?.setOnTapArPlaneListener { hitResult, plane, motionEvent ->
        val arSession = arFragment.arSceneView.session
        val hitPose = hitResult.hitPose
        val poseWithoutRotation = hitPose.extractTranslation()
        val anchor = arSession.createAnchor(poseWithoutRotation)
        val anchorNode = AnchorNode(anchor)
        ...

经过大量研究,我发现目前最好的解决方案 here

但是,如果您对传感器数据应用一些规范化,这样它就不会经常跳来跳去,那么该解决方案将是完美的。