ARCore:获取网格顶点的世界坐标

ARCore: Get world coordinates for mesh vertices

我正在尝试像这样画出眼角(这里以一个为例):

FloatBuffer buffer = face.getMeshVertices();
Pose centerPose = face.getCenterPose();
Vector3 cornerLeft = new Vector3(centerPose.tx() + buffer.get(99),centerPose.ty() + buffer.get(100),centerPose.tz() + buffer.get(101));
cornerLeft = camera.worldToScreenPoint(cornerLeft);

我红色 https://github.com/google-ar/sceneform-android-sdk/issues/563, but as said here https://developers.google.com/ar/reference/java/arcore/reference/com/google/ar/core/AugmentedFace#getMeshVertices() 给定的顶点是相对于中心姿势的,这就是为什么我将值添加到中心姿势的顶点。但结果不正确。我做错了什么?

解决方案:这不是中心姿势,而是面部的 AugmentedFaceNode,getMeshVirtices() 给出的缓冲区中的值相对于:

if (!faceNodeMap.containsKey(face)) {
              AugmentedFaceNode faceNode = new AugmentedFaceNode(face);
              faceNode.setParent(scene);
              faceNodeMap.put(face, faceNode);
            }
...
FloatBuffer buffer = face.getMeshVertices();
Vector3 vectorLeftEyeLeft = new Vector3(buffer.get(33 * 3), buffer.get((33 * 3) + 1), buffer.get((33 * 3) + 2));
    Vector3 vectorLeftEyeRight = new Vector3(buffer.get(133 * 3),buffer.get((133 * 3) + 1), buffer.get((133 * 3) + 2));
    Node node = new Node();
    node.setLocalPosition(new Vector3((vectorLeftEyeLeft.x + vectorLeftEyeRight.x) / 2, (vectorLeftEyeLeft.y + vectorLeftEyeRight.y) / 2, (vectorLeftEyeLeft.z + vectorLeftEyeRight.z) / 2));
    node.setParent(faceNodeMap.get(face));
return node.getWorldPosition();