android - ARCore:获取网格顶点的世界坐标
问题描述
我正在尝试像这样获得眼角(这里以一个为例):
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,但正如这里所说的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();
推荐阅读
- angular - RXJs Angular - 对象未定义
- excel - 在线程注释 VB 中保存单元格更改
- python - 尝试导入函数时出现“未使用的导入:图像”错误
- javascript - 逃跑按钮javascript
- c# - VSCode 缺少 C# 智能感知
- observablehq - 读取数据的具体问题
- sublimetext3 - 带有 Git-Bash 的崇高文本 3
- javascript - 带有绑定的多个按钮和 this 引用
- permissions - 在 phpmyadmin 中导入 sql 文件时打开目录“/opt”时出错:权限被拒绝
- javascript - Jquery - 您如何仅从最近的父级获取复选框值?