Как удалить 3d объекты, которые размещены на экране AR - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть экран AR, где я поместил несколько 3d объектов.Я использую Google AR Core с Android SDK.

Мне нужно удалить эти объекты со сцены при нажатии кнопки очистки.

Мне удалось удалить последний размещенный объект.Но другие объекты не были удалены.

Это код, который я использую.

if (newAnchor != null) {
            arFragment.getArSceneView().getScene().removeChild(newAnchor);
            newAnchor.getAnchor().detach();

Ответы [ 2 ]

0 голосов
/ 30 сентября 2019

Вы можете определить, нажал ли пользователь на конкретный узел, подобный этому - в этом примере проверяется, является ли хит-узел визуализируемым «Энди», т.е. пример по умолчанию, воспроизводимый с помощью Sceneform:

private void handleOnTouch(HitTestResult hitTestResult, MotionEvent motionEvent) {
        Log.d(TAG,"handleOnTouch");
        // First call ArFragment's listener to handle TransformableNodes.
        arFragment.onPeekTouch(hitTestResult, motionEvent);

        // Check for touching a Sceneform node
        if (hitTestResult.getNode() != null) {
            Log.d(TAG,"handleOnTouch hitTestResult.getNode() != null");
            Node hitNode = hitTestResult.getNode();

            if (hitNode.getRenderable() == andyRenderable) {
                //DO whatever you need to here...

            }
            return;

И вы можете удалить узел следующим образом:

private void removeAnchorNode(AnchorNode nodeToremove) {
        //Remove an anchor node
        if (nodeToremove != null) {
            arFragment.getArSceneView().getScene().removeChild(nodeToremove);
            anchorNodeList.remove(nodeToremove);
            nodeToremove.getAnchor().detach();
            nodeToremove.setParent(null);
            nodeToremove = null;
        } else {
            //Handle error case here
        }
    }

Полный код доступен здесь: https://github.com/mickod/LineView - приведенные выше отредактированные выдержки.

0 голосов
/ 27 сентября 2019

Если вам нужно очистить сцену, вы можете сделать следующее:

arSceneView.getScene().callOnHierarchy { node ->
  node.setParent(null);
  if(node instanceof AnchorNode) {
    ((AnchorNode) node).getAnchor().detach();
  }
}
...