【问题标题】:how to display first two objects in loop of anchor in sceneform ARcCore如何在sceneform ARcCore的锚循环中显示前两个对象
【发布时间】:2021-12-10 03:57:26
【问题描述】:
   if (frame.getCamera().getTrackingState() == TrackingState.TRACKING && anchorsts && !placed) {

                Session session = arFragment.getArSceneView().getSession();

                String type = "fwd";
                int distance = 0;
                int nextPoint = 1;
                String[] positions = {"u", "u","r", "r","r", "r", "r", "r", "r", "r"};
                if (turnStatus == null){


                    turnStatus = positions[distance];
                    Log.i("turnStatus", "pos " + positions[distance]);
                }
                float[] rotation = {0, 0, 0, 0};

                do {
                    if (positions[distance].equals("u")) {
                        turnStatus = "u";
                        placeNav(session, new float[]{dx, dy, dz}, rotation, positions[distance]);
                       


                        if (!turnStatus.equals(positions[nextPoint])) {
                            if (positions[nextPoint].equals("r")) {
                                turnDistance = distance;

                       
                            }
                        }
                    } else if (positions[distance].equals("r")){
                        turnDistance ++;
                        turnStatus = "r";
                       
                        placeNav(session, new float[]{turnDistance, -1.5f, -turnDistance}, rotation, positions[distance]);
                        if (!turnStatus.equals(positions[nextPoint])) {
                            if (positions[nextPoint].equals("u")) {
                       
                            }
                        }
                       }
                    distance++;
                    nextPoint ++;
                } while (distance <9);


                placed = true; //to place the arrow just once.

            }

private void placeNav(Session session, float[] pos, float[] rotation, String type) {
  AnchorNode anchorNode = new AnchorNode(anchor);
      
        currentAnchorNode = anchorNode;

        anchorNode.setParent(arFragment.getArSceneView().getScene());

        Node arrow = new Node();
        arrow.setParent(anchorNode);

        if (type.equals("u"))
            arrow.setRenderable(andyRenderable);
        else if (type.equals("r"))
            arrow.setRenderable(andyRenderable);


    }

上面的代码用于将可渲染的循环渲染到场景中。在用户前进时,我只需要显示前两个可渲染对象并显示下一个可渲染对象。这里的位置数组用于将对象渲染到场景中。请帮我实现这个

【问题讨论】:

    标签: augmented-reality arcore sceneform android-augmented-reality


    【解决方案1】:

    只需在 onCreate 方法中创建前两个可渲染对象。为了创建另一个可渲染,当人向前移动时,您应该检查相机的新位置是否在相机之前的位置之前。

    Vector3 newCameraPosition = getScene().getCamera().getWorldPosition();
    Vector3 direction = Vector3.subtract(newCameraPosition, oldCameraPosition);
    Quaternion lookRotation = Quaternion.lookRotation(direction, Vector3.up());
    double product = 
    (newCameraPosition.x - oldCameraPosition.x) * direction.x + (newCameraPosition.y - oldCameraPosition.y) * direction.y + (newCameraPosition.z - oldCameraPosition.z) * direction.z;
    if (product > 0.0) {
        // means camera moved forward
    }
    

    【讨论】:

      猜你喜欢
      • 2016-06-21
      • 1970-01-01
      • 2017-09-02
      • 1970-01-01
      • 2020-03-13
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 1970-01-01
      相关资源
      最近更新 更多