- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我一直在尝试从 ARSCNFaceGeometry
中提取面部特征(例如嘴巴)以更改其颜色或添加不同的 Material
,但没有成功。我知道我需要创建一个 SCNGeometry
,我有 SCNGeometrySource
但无法创建 SCNGeometryElement
。已尝试在 update(from faceGeometry: ARFaceGeometry)
中从 ARFaceAnchor
创建它,但到目前为止还不能。非常感谢有人帮助
最佳答案
ARSCNFaceGeometry
是单个网格。如果您希望它的不同区域具有不同的颜色,最好的办法是应用纹理贴图(您在 SceneKit 中通过为 Material 属性内容提供图像来实现)。
没有与网格中的顶点相关联的语义信息——也就是说,没有任何内容表明“这个点是鼻尖,这些点是上唇的边缘,等等”。但是网格在拓扑上是稳定的,因此如果您创建纹理图像在嘴唇周围添加一点颜色或在眼睛上方添加闪电或其他任何东西,它会在脸部四处移动时保持原样。
如果您在开始绘制纹理方面需要帮助,可以尝试以下几种方法:
制作一个正方形图像并用双渐变填充它,这样每个像素的红色和蓝色分量基于该像素的 x 和 y 坐标。或者其他一些独特的图案。将该纹理应用于模型,并查看其外观 - 纹理中的地标将指导您在何处绘画。
使用 init(blendShapes:)
初始化器和一个空的 blendShapes
字典创建一个虚拟的 ARSCNFaceGeometry
(你不需要一个事件的 ARFaceTracking
session ,但你确实需要 iPhone X)。使用 SceneKit 的场景导出 API(或模型 I/O)将该模型写入某种 3D 文件(.scn,您可以在 Mac 上进一步处理,或类似 .obj 的文件)。
将该文件导入您最喜欢的 3D 建模工具(Blender、Maya 等)并使用该工具绘制纹理。然后在您的应用中使用带有真实面孔的纹理。
实际上,上面的内容过于简单化了,尽管它是常见情况的简单答案。 ARSCNFaceGeometry
实际上最多可以包含四个子网格,如果您使用 init(device:fillMesh:)
创建它的话初始值设定项。但即使那样,这些部分也不是面部的语义标记区域——它们是常规面部模型中的孔,是眼睛和嘴巴露出的地方的平面填充物。 p>
关于ios - 从 ARSCNFaceGeometry 中提取人脸特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47277914/
在通过以下方式获得的检测到的面部网格周围绘制边界的最简单方法是什么: let faceGeometry = ARSCNFaceGeometry(device: device) let node = S
我一直在尝试从 ARSCNFaceGeometry 中提取面部特征(例如嘴巴)以更改其颜色或添加不同的 Material ,但没有成功。我知道我需要创建一个 SCNGeometry,我有 SCNGeo
我正在尝试在 iPhone X 上使用 ARKit 和 SceneKit 执行 3D 特征检测,使用 Vision 检测面部标志。然后我使用 ARSCNView.hitTest根据使用 ARSCNFa
我是一名优秀的程序员,十分优秀!