ios - 如何将混合形状 SCNNode 居中以查看
问题描述
所以我对 ARKit 和 SceneKit 还很陌生,我正在关注 Apple 的教程。https://developer.apple.com/documentation/arkit/tracking_and_visualizing_faces。
我要做的是创建一个类似于 Animoji 屏幕的视图,其中包含 BlendShape 的 SCNNode 在视图中居中,并且 Blendshape 的 z 值不会根据面部与相机的距离/距离而改变. 我还想让相机不可见,这样你就只能看到 BlendShape。
解决此问题的最佳方法是什么以及如何做?
我尝试将枢轴设置为 0 并将 position.z 设置为 0,但我认为这不是正确的方法。
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
guard let faceAnchor = anchor as? ARFaceAnchor
else { return }
let blendShapes = faceAnchor.blendShapes
guard let eyeBlinkLeft = blendShapes[.eyeBlinkLeft] as? Float,
let eyeBlinkRight = blendShapes[.eyeBlinkRight] as? Float,
let jawOpen = blendShapes[.jawOpen] as? Float
else { return }
eyeLeftNode.scale.z = 1 - eyeBlinkLeft
eyeRightNode.scale.z = 1 - eyeBlinkRight
jawNode.position.y = originalJawY - jawHeight * jawOpen
node.pivot = SCNMatrix4MakeTranslation(0,0,0)
node.position.z = 0
}
下面的视图类似于我想要实现的,没有其他混合形状的列表。
解决方案
如果您对 ARKit 自动移动场景中的节点不感兴趣,您可以避免将 an 绑定SCNNode
到ARAnchor
(即不实现-renderer:nodeForAnchor:
)。相反,您会查询ARAnchor
in -session:didUpdateAnchors:
。
事实上,由于您实际上并没有 AR 体验,而只是面部跟踪,因此您甚至不需要一个,ARSCNView
而只需要一个SCNView
.
推荐阅读
- c - 虽然循环在C中被跳过
- list - F#关于打字的问题,float*float类型与'float'类型不匹配
- android-studio - 构建失败并出现异常。颤动的Gradle问题
- tensorflow - 如何将运行时信息传递给 Tensorflow 2 图形函数?
- oracle - 在同一会话状态下更改变量值
- python - Docker 中的 Elasticsearch:elasticsearch.exceptions.ConnectionError:ConnectionError - Python
- javascript - Deno Bundle 的混淆和压缩
- alert - Splunk 警报计划
- typescript - 打字稿:如何在对象中选择类型?
- java - 如何实现 SpringRetry