我有一个AR屏幕,其中放置了一些3d对象。我正在将google AR Core与android SDK结合使用。
我需要在单击清除按钮时从场景中删除这些对象。
我能够删除最后放置的对象。但是其他物体没有移走。
这是我正在使用的代码。
if (newAnchor != null) {
arFragment.getArSceneView().getScene().removeChild(newAnchor);
newAnchor.getAnchor().detach();
答案 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);
}
}