Skip to content

Instantly share code, notes, and snippets.

@SunXiaoShan
Created October 13, 2018 15:55
Show Gist options
  • Save SunXiaoShan/41eafe7e85c0c91b87effa8c0dbb6a76 to your computer and use it in GitHub Desktop.
Save SunXiaoShan/41eafe7e85c0c91b87effa8c0dbb6a76 to your computer and use it in GitHub Desktop.
extension ViewController: ARSCNViewDelegate {
func renderer(_ renderer: SCNSceneRenderer, nodeFor anchor: ARAnchor) -> SCNNode? {
guard let faceAnchor = anchor as? ARFaceAnchor,
let device = sceneView.device else { return nil }
let faceGeometry = ARSCNFaceGeometry(device: device)
let node = SCNNode(geometry: faceGeometry)
node.geometry?.firstMaterial?.fillMode = .lines
DispatchQueue.main.async {
self.updateFeatures(for: node, using: faceAnchor)
}
return node
}
func renderer(_ renderer: SCNSceneRenderer, didUpdate node: SCNNode, for anchor: ARAnchor) {
guard let faceAnchor = anchor as? ARFaceAnchor, let faceGeometry = node.geometry as? ARSCNFaceGeometry else { return }
// 更新,臉部表情變化時的位置
faceGeometry.update(from: faceAnchor.geometry)
updateFeatures(for: node, using: faceAnchor)
}
func updateFeatures(for node: SCNNode, using anchor: ARFaceAnchor) {
for (feature, indices) in zip(features, featureIndices) {
let child = node.childNode(withName: feature, recursively: false) as? EmojiNode
let vertices = indices.map { anchor.geometry.vertices[$0] }
child?.updatePosition(for: vertices)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment