如何使用arcore和sceneform使用按钮从场景中删除单个可渲染对象? [英] How do I delete individual renderables from the scene using a button using arcore and sceneform?
问题描述
我正在尝试制作一个按钮,可以在选择后从场景中删除 3d 模型.
I'm trying to make a button that will delete a 3d model from the scene after it is selected.
我知道删除 3d 对象的方法是使用 anchor.detach().我可以使用 node.select() 选择单个模型.但是,我不确定如何在选择节点后访问锚点.
I know that the way to delete 3d objects is by using anchor.detach(). And I can select individual models using node.select(). However, I am not sure how to access the anchor after selecting the node.
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();
}
推荐答案
如果你想删除一个特定的 Renderable 并且你已经知道 Anchronode,这就是我相信你的案例来自问题,那么下面的代码将删除可渲染和锚节点:
If you want to delete a particular Renderable and you already know the Anchronode, which is what I believe your case is from the question, then the code below will remove the Renderable and Anchornode:
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 只是为了帮助测试,因此可以根据您的选择移除或留下.
The toast are just to help testing so can be removed or left as you choose.
更新 - Kotlin 版本(2020 年 4 月测试):
Update - Kotlin version (tested April 2020):
private fun removeAnchorNode(nodeToRemove: AnchorNode) {
//Remove an Anchor node
arFragment.getArSceneView().getScene().removeChild(nodeToRemove);
nodeToRemove.getAnchor()?.detach();
nodeToRemove.setParent(null);
nodeToRemove.renderable = null
}
这篇关于如何使用arcore和sceneform使用按钮从场景中删除单个可渲染对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!