使用 ARCore 和 Sceneform 我正在尝试在垂直表面(即墙壁)上添加肖像我目前正在使用 ViewRenderer 从 Sceneform 库中执行此操作.. 一切正常,但我现在面临 2 个问题:
第一个问题是 ViewRenderer 将以 3D 呈现 Android 视图,因此我必须将节点在其右矢量上旋转 90 度,使其平展在墙上.. 这可行,但现在我的第二个问题是我需要始终保持肖像直接与地球的重力。
怎么可能做到这一点?
在为您的对象创建 Anchor 时,您可能想调用 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)
...
经过大量研究,我发现现在最好的解决方案在这里。
但是,如果您对传感器数据进行一些标准化,这样它就不会经常跳来跳去,那么该解决方案将是完美的。