Je suis l'exemple ARCore (https://github.com/google-ar/arcore-android-sdk) et j'essaye de supprimer l'objet 3d (andy) déjà ajouté. Comment puis-je détecter si un événement de frappe avec ARCore touche un objet 3D déjà ajouté?Détection d'un événement tap avec ARCore sur un objet 3D déjà ajouté
Répondre
J'ai eu la même question ces jours-ci, j'ai essayé 2 solutions,
1. frame.hitTest (MotionEvent)
2. projet, le sommet du monde Arcore à 2d coordonnées en vue
au début, j'utiliser 1. pour obtenir le succès poser sur l'avion et comparer à la pose existait déjà objet 3D, mais une fois l'objet 3d laissé cela ne fonctionnera pas dans l'avion.
À la fin, j'utilise 2. pour obtenir le vertex de l'objet 3d affiché, puis faire un test avec la position de prise.
Si vous suivez l'exemple Arcore, vous pouvez voir cette ligne dans la méthode de tirage de ObjectRenderer.java
Matrix.multiplyMM(mModelViewProjectionMatrix, 0,
cameraPerspective, 0, mModelViewMatrix, 0);
« mModelViewProjectionMatrix » il suffit d'utiliser cette matrice de ModelViewProjection pour cartographier le sommet de votre déjà ajouté objet 3d du monde 3d arcore à la vue 2D.
Dans mon cas, je fais quelque chose comme ça,
pose.toMatrix(mAnchorMatrix, 0);
objectRenderer.updateModelMatrix(mAnchorMatrix, 1);
objectRenderer.draw(cameraView, cameraPerspective, lightIntensity);
float[] centerVertexOf3dObject = {0f, 0f, 0f, 1};
float[] vertexResult = new float[4];
Matrix.multiplyMV(vertexResult, 0,
objectRenderer.getModelViewProjectionMatrix(), 0,
centerVertexOf3dObject, 0);
// circle hit test
float radius = (viewWidth/2) * (cubeHitAreaRadius/vertexResult[3]);
float dx = event.getX() - (viewWidth/2) * (1 + vertexResult[0]/vertexResult[3]);
float dy = event.getY() - (viewHeight/2) * (1 - vertexResult[1]/vertexResult[3]);
double distance = Math.sqrt(dx * dx + dy * dy);
boolean isHit = distance < radius;
J'utilise cette application dans Arcore Mesure,
https://play.google.com/store/apps/details?id=com.hl3hl3.arcoremeasure
et le code source, https://github.com/hl3hl3/ARCoreMeasure/blob/master/app/src/main/java/com/hl3hl3/arcoremeasure/ArMeasureActivity.java