通过在 ARCore 中检测到的平面上点击来渲染多个球体

Rendering multiple spheres by taping on a detected plane in ARCore

我正在尝试制作一个应用程序,在该应用程序中,我可以通过在特定布局的平面上点击来渲染多个球体。我希望它是某种分子的形状,球体是组成原子的。我需要每个单独的球体都是单独的实体(单独的节点),这样我就可以向它们添加 OnTouchListeners 并在它之后在选定的球体之间建立联系。我有点卡住了。有人知道我该如何处理这个问题吗? 我在 android 工作室与 Java 一起工作,并使用 ARCore 和 Sceneform。

您可以在检测到磁带事件或用户按下按钮时添加可渲染对象和锚点。

只要您知道要添加它们的相对位置,就可以通过设置姿势平移为您单独添加的每个节点设置位置。

见下图在预览画面中心点前1M处添加节点的例子:

            // Place the anchor 1m in front of the camera. 
            Frame frame = arFragment.getArSceneView().getArFrame();
            Session session = arFragment.getArSceneView().getSession();
            Anchor newMarkAnchor = session.createAnchor(
                        frame.getCamera().getPose()
                                .compose(Pose.makeTranslation(0, 0, -1f)) //This will place the anchor 1M in front of the camera
                                .extractTranslation());
            AnchorNode addedAnchorNode = new AnchorNode(newMarkAnchor);
            addedAnchorNode.setRenderable(andyRenderable);

您可以添加多个具有不同可渲染对象的 AnchorNode,并为每个对象应用不同的转换以将其放置在您想要的位置。

Pose.makeTranslation 的文档在这里:https://developers.google.com/ar/reference/java/com/google/ar/core/Pose#makeTranslation(float,%20float,%20float)

您可以检查任何触摸事件以查看是否触摸了任何单个可渲染对象,并且您还可以在节点之间添加线条 - 请参阅此存储库以获取检测可渲染对象被触摸并在可渲染对象之间画一条线的示例:

请注意,上述存储库使用了已弃用的旧版 Sceneform,但相同的原则仍然适用。