我正在使用ARCore-Augmented Faces API在Android Studio上开发AR Android应用程序。目前,我已经完成了应用程序的设置(5个按钮和它们关联的3D模型),当我首次点击其中一个按钮启动应用程序时,它运行得很好。问题是当我点击另一个按钮以更换当前面罩时,它不会用新的面罩替换当前面罩。
然而,为了解决这个问题,我尝试使用restart()方法并尝试删除facenode。但是似乎这些解决方案都没有起作用。
这是我目前正在处理的代码部分(不是修复的代码),我仍然困扰着我遇到的问题。
因此,当用户单击另一个按钮时,我预计当前的口罩将被新口罩替换。
然而,为了解决这个问题,我尝试使用restart()方法并尝试删除facenode。但是似乎这些解决方案都没有起作用。
这是我目前正在处理的代码部分(不是修复的代码),我仍然困扰着我遇到的问题。
alchemist_ovalbtn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
alchemistOval();
}
});
scene.addOnUpdateListener(
(FrameTime frameTime) -> {
if (faceRegionsRenderable == null) {
return;
}
Collection<AugmentedFace> faceList =
sceneView.getSession().getAllTrackables(AugmentedFace.class);
// Make new AugmentedFaceNodes for any new faces.
for (AugmentedFace face : faceList) {
if (!faceNodeMap.containsKey(face)) {
AugmentedFaceNode faceNode = new AugmentedFaceNode(face);
faceNode.setParent(scene);
faceNode.setFaceRegionsRenderable(faceRegionsRenderable);
faceNode.setFaceMeshTexture(faceMeshTexture);
faceNodeMap.put(face, faceNode);
}
}
});
// Remove any AugmentedFaceNodes associated with an AugmentedFace that stopped tracking.
Iterator<Map.Entry<AugmentedFace, AugmentedFaceNode>> iter =
faceNodeMap.entrySet().iterator();
while (iter.hasNext()) {
Map.Entry<AugmentedFace, AugmentedFaceNode> entry = iter.next();
AugmentedFace face = entry.getKey();
if (face.getTrackingState() == TrackingState.STOPPED) {
AugmentedFaceNode faceNode = entry.getValue();
faceNode.setParent(null);
iter.remove();
}
}
public void alchemistOval() {
ModelRenderable.builder()
.setSource(this, R.raw.alchemist_oval)
.build()
.thenAccept(
modelRenderable -> {
faceRegionsRenderable = modelRenderable;
modelRenderable.setShadowCaster(false);
modelRenderable.setShadowReceiver(false);
});
}
因此,当用户单击另一个按钮时,我预计当前的口罩将被新口罩替换。