gpt4 book ai didi

java - 使用 ArCore 将对象动态放置在用户面前

转载 作者:行者123 更新时间:2023-11-30 05:20:32 25 4
gpt4 key购买 nike

我正在使用 ArCore 为 Android 构建一个简单的导航应用程序(使用 Java)。我开始在 Google 的 sceneform 演示上构建我的应用程序 ( https://github.com/google-ar/sceneform-android-sdk/tree/master/samples/hellosceneform )。

当前应用程序正在扫描环境中的 anchor 。用户可以通过点击 anchor 将对象放置在 anchor 上。是否可以使用这些找到的 anchor 自动在用户面前放置例如用于导航的箭头?箭头应该位于用户前方 3m-5m 处,并且在用户靠近时移动。

我知道如何查看 anchor 并始终删除最后一个 anchor 。但我不确定如何将下一个对象自动放置在用户面前。有没有办法做到这一点?

编辑:难道就没有办法了吗?也许从 anchor 读出位置并寻找所需的距离?

最佳答案

我希望这就是您正在寻找的。一旦 AR 场景开始跟踪特征点,这将在手机前面渲染箭头。

//添加一个 boolean 值以确保只渲染 1 个箭头。

 boolean placed = false;

//在 onCreate 函数中添加一个更新监听器,因为应用程序需要一两秒才能获取相机的姿势,如果您尝试从空姿势创建 anchor ,应用程序可能会崩溃。

arFragment.getArSceneView().getScene().addOnUpdateListener(this::onUpdateFrame);

//可以在更新函数中获取相机的位姿,从而在相机前面相应地做一个 anchor 。

private void onUpdateFrame(FrameTime frameTime) {

Frame frame = arFragment.getArSceneView().getArFrame();

// If there is no frame, just return.
if (frame == null) {
return;
}

//Making sure ARCore is tracking some feature points, makes the augmentation little stable.
if(frame.getCamera().getTrackingState()==TrackingState.TRACKING && !placed) {

Pose pos = frame.getCamera().getPose().compose(Pose.makeTranslation(0, 0, -0.3f));
Anchor anchor = arFragment.getArSceneView().getSession().createAnchor(pos);
AnchorNode anchorNode = new AnchorNode(anchor);
anchorNode.setParent(arFragment.getArSceneView().getScene());

// Create the arrow node and add it to the anchor.
Node arrow = new Node();
arrow.setParent(anchorNode);
arrow.setRenderable(arrowRenderable);
placed = true; //to place the arrow just once.

}

}

您必须对箭头的变换进行更改,以将其精确设置在相机前面的中心并处于正确的方向。我希望这能让你开始。干杯!

关于java - 使用 ArCore 将对象动态放置在用户面前,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59660168/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com