首页 > 解决方案 > ARCore 虚拟物体移动

问题描述

所以我开始在 Java 中的 Android Studio 中使用 ARCore,并测试了他们的演示 HelloAR,它可以工作。

现在我想添加简单的东西,例如将对象移动到滚动方向。

在 TapHelper 我需要为 GestureDetector 添加 onScroll

@Override
        public boolean onScroll(MotionEvent e1, MotionEvent e2, float distanceX, float distanceY) {

        }

但这就是我现在卡住的地方,虚拟对象是基于锚点渲染的?那么我需要更新锚点位置还是虚拟对象的位置?我该怎么做,锚没有任何更新它的位置的方法,我是销毁它并创建一个新的,还是我错过了什么?

标签: javaandroidandroid-studioaugmented-realityarcore

解决方案


如果您只想旋转可渲染对象本身,则不需要创建新锚点,但是如果您想将可渲染对象移动到“世界”中的新位置,那么此时的标准方法似乎是删除锚点并重新创建它。

以下是您可以如何执行此操作的示例:

private AnchorNode moveRenderable(AnchorNode myAnchorNodeToMove, Pose newPoseToMoveTo) {
        //Move a renderable to a new pose
        if (myAnchorNodeToMove != null) {
            arFragment.getArSceneView().getScene().removeChild(myAnchorNodeToMove);
        } else {
            Log.d(TAG,"moveRenderable - myAnchorNode was null");
            return null;
        }
        Frame frame = arFragment.getArSceneView().getArFrame();
        Session session = arFragment.getArSceneView().getSession();
        Anchor myAnchor = session.createAnchor(newPoseToMoveTo.extractTranslation());
        AnchorNode newMyAnchorNode = new AnchorNode(myAnchor);
        newMyAnchorNode.setRenderable(andyRenderable);
        newMyAnchorNode.setParent(arFragment.getArSceneView().getScene());

        return newMyAnchorNode;
    }

上面是从一个工作示例修改的,使其在此处更具可读性 - 完整源代码在这里:https ://github.com/mickod/LineView


推荐阅读