Я занимаюсь разработкой приложения для Android с использованием ARCore-Augmented Faces API в Android Studio.На данный момент я закончил настройку приложения (5 кнопок и соответствующая 3d-модель), и он работает хорошо, когда я нажимаю одну из этих кнопок, когда приложение запускается впервые.Проблема в том, что когда я нажимаю другую кнопку, чтобы изменить текущую маску, она не заменит текущую маску новой маской.
Однако, чтобы решить эту проблему.Я попытался использовать метод 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);
});
}
Итак, я ожидаю, что текущая маска будет заменена новой, когда пользователь нажмет другую кнопку.