Created
October 13, 2018 15:55
-
-
Save SunXiaoShan/41eafe7e85c0c91b87effa8c0dbb6a76 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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