使用GPS位置在ARCore中渲染3D对象?

PvD*_*Dev 4 java android core-location arcore

我试图在Android中使用arcore构建增强现实导航.AR导航方向在印度是否可用?我只是按照这个链接使用arcore开发带有核心loaction的ar导航.https://github.com/appoly/ARCore-Location/tree/legacy.

是否有可能在Android中使用ARCore进行导航?任何帮助非常感谢请....

Aka*_*hra 10

我也在研究这个问题,据我说,这是有可能的.由于其他一些工作,我还没有完成它,但我可以告诉你为实现这个目标你可以遵循的步骤.

最初,您需要了解如何在不点击屏幕的情况下放置对象,因为ARCore示例不允许这样做.我在StackOverflow上问了这个问题,最后得到了一个确实有效的答案. 如何在不点击屏幕的情况下放置对象.你可以参考这个来实现这一点.

在此之后,您需要找出将ar对象显示为方向所需的方向.为此,使用此公式找出标题

let lat1:Double = latSource/180 * .pi
let lng1:Double = lngSource/180 * .pi
let lat2:Double = latDestination/180 * .pi
let lng2:Double = lngDestination/180 * .pi

let y = sin(lng2 - lng1)*cos(lat2)
let x = cos(lat1) * sin(lat2) - sin(lat1) * cos(lat2) * cos(lng2 - lng1)

let tan2 = atan2(y, x)
let degre = tan2 * 180 / .pi
if degre < 0 {  return degre+360  }
else {  return degre  }
Run Code Online (Sandbox Code Playgroud)

您需要传递源和目的地的纬度和经度,然后这将返回您目的地的TrueNorth角度.这是写的Swift,我希望你能把它转换成你想要的语言.Java或Kotlin

然后,您需要将此角度与设备罗盘角度匹配,并且当两者匹配时使用不放置对象的方法.我已经分享了这个链接.这将为您提供目的地的对象.

之后,进行循环并将对象放在不同的z轴上.这是我写的代码

@Override
public void onUpdate(FrameTime frameTime) {



        frame = fragment.getArSceneView().getArFrame();

        if (frame != null) {

            for (Object o : frame.getUpdatedTrackables(Plane.class)) {

                plane = (Plane) o;

                if (plane.getTrackingState() == TrackingState.TRACKING) {
                    fragment.getPlaneDiscoveryController().hide();

                    Iterator iterableAnchor = frame.getUpdatedAnchors().iterator();

                    if (!iterableAnchor.hasNext()) {
                        method(plane, frame);
                    }
                }
            }
        }

}

public void makeAr(Plane plane, Frame frame ) {

    for (int k = 0; k <10 ; k ++) {
        if (this.degree >= 160 && this.degree <= 170) {
            Toast.makeText(this, "walk", Toast.LENGTH_SHORT).show();
            List<HitResult> hitTest = frame.hitTest(screenCenter().x, screenCenter().y);

            Iterator hitTestIterator = hitTest.iterator();

            while (hitTestIterator.hasNext()) {
                HitResult hitResult = (HitResult) hitTestIterator.next();

                modelAnchor = null;
                modelAnchor = plane.createAnchor(hitResult.getHitPose());

                AnchorNode anchorNode = new AnchorNode(modelAnchor);
                anchorNode.setParent(fragment.getArSceneView().getScene());

                TransformableNode transformableNode = new TransformableNode(fragment.getTransformationSystem());
                transformableNode.setParent(anchorNode);
                transformableNode.setRenderable(MainActivity.this.andyRenderable);

                float x = modelAnchor.getPose().tx();
                float y = modelAnchor.getPose().compose(Pose.makeTranslation(0f, 0f, 0)).ty();

                transformableNode.setWorldPosition(new Vector3(x, y, -k));

            }
        }
    }
}

private Vector3 screenCenter() {
    View vw = findViewById(android.R.id.content);
    return new Vector3(vw.getWidth() / 2f, vw.getHeight() / 2f, 0f);
}
Run Code Online (Sandbox Code Playgroud)

此OnUpdate方法将Ar绘制到目标.完成此操作后,您需要使用Google Map Api数据安排所有内容.

据我所知,这是使用ARCore在AR中进行导航的最佳方式,因为在ARCore中有非常的限制,将来会有一些其他库可以使它变得容易.

我也尝试过ArCore位置,但这对你来说不会让你觉得它放在2D图像而不是3D,以及当你在路上行走时它不稳定.

祝你好运,希望你能完成这件事.


Can*_*ato 0

印度可以使用 AR 导航吗?

是的,今天唯一明智的地方是中国,正如你在这里看到的

在android中可以使用ARCore进行ar导航吗?

不确定我是否明白,但是是的,您可以使用 AR Core 来导航您的应用程序,例如步行,并在屏幕上显示 AR 对象或从设备移动中获取姿势/帧信息。您可以在世界中放置锚点,并将该锚点与 GPS 位置连接,将该锚点保存在云/数据库中并加载到其他手机中。或者直接渲染对象并将其保存在数据库中。当用户走近某个地方时,您会将其加载到他的手机中。