如何删除放置在AR屏幕上的3d对象

时间:2019-09-26 20:08:23

标签: android arcore android-sdk-manager

我有一个AR屏幕,其中放置了一些3d对象。我正在将google AR Core与android SDK结合使用。

我需要在单击清除按钮时从场景中删除这些对象。

我能够删除最后放置的对象。但是其他物体没有移走。

这是我正在使用的代码。

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

3 个答案:

答案 0 :(得分:0)

如果需要清理场景,可以执行以下操作:

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

答案 1 :(得分:0)

您可以检测用户是否在这样的特定节点上轻按-在此示例中,检查是查看命中节点是否为“ Andy”可渲染,即默认示例可通过Sceneform渲染:

// sorting properly accented "Č" in Czech language (should come after "C" and before "D")

// 1) Simple sort:
$array = ['bca', 'čaz', 'cba', 'abc', 'daz'];
$collator = collator_create('cs-CZ');
collator_sort($collator, $array);
// result:
// ['abc', 'bca', 'cba', 'čaz', 'daz']

// 2) Maintain index assotiations:
$array = [
    'x' => 'Česko',
    'y' => 'Dänmark',
    'z' => 'Brunei',
    'w' => 'Cyprus'
];
$coll = collator_create('sk'); // set Slovak locale (or sk-SK)
collator_asort($coll, $array);

/* result:
$array = [
    'z' => 'Brunei',
    'w' => 'Cyprus',
    'x' => 'Česko',
    'y' => 'Dänmark',
];
*/

您可以删除这样的节点:

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;

此处提供完整代码:https://github.com/mickod/LineView-以上是经编辑的摘录。

答案 2 :(得分:0)

您可以使用以下代码从场景表单中分离android模型

 List<Node> children = new ArrayList<>(arFragment.getArSceneView().getScene().getChildren());
        for (Node node : children) {
            if (node instanceof AnchorNode) {
                if (((AnchorNode) node).getAnchor() != null) {
                    ((AnchorNode) node).getAnchor().detach();
                }
            }
            if (!(node instanceof Camera) && !(node instanceof Sun)) {
                node.setParent(null);
            }
        }