arcore - 如何使用 arcore 和 sceneform 使用按钮从场景中删除单个可渲染对象?

标签 arcore sceneform

我正在尝试制作一个按钮,在选择 3D 模型后将其从场景中删除。

我知道删除3D对象的方法是使用anchor.detach()。我可以使用 node.select() 选择单个模型。但是,我不确定选择节点后如何访问 anchor 。

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
        fab.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                deleteObject(//I'm not sure how to get the anchor from the selected node//);
            }
        });

private void deleteObject(Anchor anchor){
        anchor.detach();
    }

最佳答案

如果您想删除特定的可渲染对象并且您已经知道 anchor 节点(我相信您的情况来自问题),那么下面的代码将删除可渲染对象和 anchor 节点:

private void removeAnchorNode(AnchorNode nodeToremove) {
        //Remove an anchor node
        if (nodeToremove != null) {
            arFragment.getArSceneView().getScene().removeChild(nodeToremove);
            nodeToremove.getAnchor().detach();
            nodeToremove.setParent(null);
            nodeToremove = null;
            Toast.makeText(LineViewMainActivity.this, "Test Delete - anchorNode removed", Toast.LENGTH_SHORT).show();
        } else {
            Toast.makeText(LineViewMainActivity.this, "Test Delete - markAnchorNode was null", Toast.LENGTH_SHORT).show();
        }
    }

toast 只是为了帮助测试,因此可以根据您的选择删除或保留。

更新 - Kotlin 版本(2020 年 4 月测试):

    private fun removeAnchorNode(nodeToRemove: AnchorNode) {
        //Remove an Anchor node
        arFragment.getArSceneView().getScene().removeChild(nodeToRemove);
        nodeToRemove.getAnchor()?.detach();
        nodeToRemove.setParent(null);
        nodeToRemove.renderable = null
    }

关于arcore - 如何使用 arcore 和 sceneform 使用按钮从场景中删除单个可渲染对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54176491/

相关文章:

java - ARCore – 渲染距离相机 200 米的物体

android - ARCore 与 OpenCV

java - 如何正确使用setLocaleScale方法?我在确定 AR 模型的大小时遇到​​问题

java - ARCore – 禁用 ModelRenderable 的移动

java - 如何在ARCore中获取最新的检测到的平面?

android - 使用 Sceneform 实时下载 3D 模型

android - 模型未显示,但阴影显示

java - 如何将 Renderable 放置到 HitTestResult getPoint() 位置

android - 错误: this application requires the latest version of Google Play services for AR

android - 如何在 ARCore/Sceneform 中加速平面检测