java - 图像处理使用 ARCore 和 Android Studio 使用 ArFragment 将 3D 模型放置在图像上

标签 java android-studio arcore android-augmented-reality

我已经通过检测图像成功实现了3D模型,但问题是我必须旋转、放大和缩小该模型。我也通过使用transformabel方法实现了它,但问题是每当我触摸该模型时,它都会变倍。

          AnchorNode anchorNode = new AnchorNode(anchor);
          arFragment.getArSceneView().getScene().addChild(anchorNode);
          TransformableNode transformableNode = new TransformableNode(arFragment.getTransformationSystem());
          transformableNode.setParent(anchorNode);
          transformableNode.setRenderable(modelRenderable);
          transformableNode.select();

enter image description here ] 1

最佳答案

移动可渲染对象的常见方法(可能是撰写本文时的主要方法)是实际删除它,然后在新位置或姿势中创建它 - 例如:

  1. 删除现有的可渲染对象并从场景中移除
  2. 创建一个新 anchor 并将其放置在您想要的姿势/位置
  3. 将可渲染对象添加到您刚刚创建的新 anchor

在代码中:

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

        return newMarkAnchorNode;
    }

上面是示例应用程序的编辑摘录 - 您可以在此处找到完整的源代码并对其进行修改等:https://github.com/mickod/LineView

另一个注意事项 - 在 AR 环境中放大和缩小可渲染对象可能会有点困惑。可渲染对象就像现实世界中的一个对象,因此您可以讨论放大和缩小整个相机 View ,或者使可渲染对象本身变大或变小。

关于java - 图像处理使用 ARCore 和 Android Studio 使用 ArFragment 将 3D 模型放置在图像上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59552365/

相关文章:

unity-game-engine - 如何使用Unity在ARcore增强图像场景中显示不同图像的不同预制件?

augmented-reality - 1.16.0 的 Sceneform 依赖项(不兼容 AndroidX)

android - 我无法打印此数组。应用程序在此行后停止工作

java - 当存在 XML 注释而不是元素时,Jackson XML 反序列化失败

java - 如何对所有映射使用相同的 IdentifierGenerator 实例

Android Studio-程序类型已经存在 : com. google.android.gms.internal.measurement.zzwp

templates - Android studio中自定义模板的合并gradle

java - 如何限制一个类在 Java 中采用某些类型?

java - 为什么使用静态方法不利于单元测试?

java - 进程 'command ' C :\Program Files\Java\jdk1. 8.0_25\bin\java.exe'' 已完成,退出值非零 1