我希望能够从 iPad Pro 激光雷达导出网格和纹理。
这里有如何导出网格的示例,但我也希望能够导出环境纹理
ARKit 3.5 – 如何使用 LiDAR 从新 iPad Pro 导出 OBJ?
ARMeshGeometry 存储网格的顶点,是否必须在扫描环境时“记录”纹理并手动应用它们?
这篇文章似乎展示了一种获取纹理坐标的方法,但我看不到使用 ARMeshGeometry 做到这一点的方法:将 ARFaceGeometry 保存到 OBJ 文件
任何指向正确方向的点,或要看的东西,非常感谢!
克里斯
我试图在屏幕上叠加 ARFaceAnchor 顶点以完成两个场景 1) 有一个虚拟人脸保持在中心(屏幕上)位置,但反映几何体的变化。顶点 2)让虚拟人脸与实际人脸重叠(来自预览层) .
我在这里遵循了Rickster 的建议,但只成功地从屏幕上的某些角度投影了脸部(仅出现在左下方并旋转)。我不太熟悉每个矩阵的不同目的,但这是我到目前为止所得到的。有什么建议吗?
let modelMatrix = faceAnchor.transform
var points: [CGPoint] = []
faceAnchor.geometry.vertices.forEach {
// Convert the vertex position from model space to camera space (use the anchor’s transform)
let vertex4 = vector_float4($0.x, $0.y, $0.z, 1)
let vertexCamera = simd_mul(modelMatrix, vertex4)
// Multiply with the camera projection with that vector to get to normalized image coordinates
let normalizedImageCoordinates = simd_mul(projectionMatrix, vertexCamera)
let point = CGPoint(x: CGFloat(normalizedImageCoordinates.x), y: CGFloat(normalizedImageCoordinates.y))
points.append(point)
}
Run Code Online (Sandbox Code Playgroud) snapshot我正在 ARKit 中使用 SceneKit 运行面部跟踪配置,在每个帧中我可以通过属性或作为缓冲区访问相机源capturedImage,我还能够将每个面部顶点映射到图像坐标空间并添加一些UIView助手( 1点平方)在屏幕上实时显示所有面顶点,如下所示:
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
guard let faceGeometry = node.geometry as? ARSCNFaceGeometry,
let anchorFace = anchor as? ARFaceAnchor,
anchorFace.isTracked
else { return }
let vertices = anchorFace.geometry.vertices
for (index, vertex) in vertices.enumerated() {
let vertex = sceneView.projectPoint(node.convertPosition(SCNVector3(vertex), to: nil))
let xVertex = CGFloat(vertex.x)
let yVertex = CGFloat(vertex.y)
let newPosition = CGPoint(x: xVertex, y: yVertex)
// Here i update the position of each UIView …Run Code Online (Sandbox Code Playgroud)