Guest User

Untitled

a guest
May 25th, 2018
93
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.57 KB | None | 0 0
  1. /*
  2. See LICENSE folder for this sample’s licensing information.
  3.  
  4. Abstract:
  5. An `SCNNode` subclass demonstrating a basic use of `ARSCNFaceGeometry`.
  6. */
  7.  
  8. import ARKit
  9. import SceneKit
  10.  
  11. class Mask: SCNNode, VirtualFaceContent {
  12.  
  13. var faceOrigin: SCNNode?
  14. var lastX: Float = 0.0
  15. var lastY: Float = 0.0
  16. var state: Int = 0
  17. var buffer: Array<Float>?
  18.  
  19. init(geometry: ARSCNFaceGeometry) {
  20. let material = geometry.firstMaterial!
  21.  
  22. material.diffuse.contents = UIColor.lightGray
  23. material.lightingModel = .physicallyBased
  24.  
  25. super.init()
  26. self.geometry = geometry
  27.  
  28. faceOrigin = loadedContentForAsset(named: "coordinateOrigin")
  29. addChildNode(faceOrigin!)
  30. faceOrigin?.position.z = 0.05;
  31. }
  32.  
  33. required init?(coder aDecoder: NSCoder) {
  34. fatalError("\(#function) has not been implemented")
  35. }
  36.  
  37. // MARK: VirtualFaceContent
  38.  
  39. /// - Tag: SCNFaceGeometryUpdate
  40. func update(withFaceAnchor anchor: ARFaceAnchor) {
  41. let faceGeometry = geometry as! ARSCNFaceGeometry
  42. faceGeometry.update(from: anchor.geometry)
  43. let nosePos: SCNVector3 = faceOrigin!.worldPosition
  44. let facePos: SCNVector3 = self.worldPosition
  45. let vector: SCNVector3 = SCNVector3(
  46. nosePos.x - facePos.x,
  47. nosePos.y - facePos.y,
  48. nosePos.z - facePos.z
  49. )
  50.  
  51. /* Calculate the fromula */
  52. let t = (-facePos.z)/vector.z
  53. let newX = facePos.x + vector.x * t
  54. let newY = facePos.y + vector.y * t
  55.  
  56. let offsetX = newX - self.lastX
  57. let offsetY = newY - self.lastY
  58.  
  59. //print(offsetY)
  60.  
  61. if self.state == 0 {
  62. if offsetY < 0 && offsetY < -0.005 {
  63. state = 1
  64. self.buffer = Array()
  65. }
  66. } else if self.state == 1 {
  67. if self.buffer?.count == 60 {
  68. if let buffer = self.buffer {
  69. var summary: Float = 0.0
  70. for elemt in buffer {
  71. if elemt < 0 {
  72. summary -= elemt
  73. } else {
  74. summary += elemt
  75. }
  76. }
  77. print(summary, buffer)
  78. }
  79. self.state = 0
  80. } else {
  81. let scale: Float = 10000
  82. self.buffer?.append(offsetY * scale)
  83. }
  84. }
  85.  
  86. // Update the position
  87. self.lastX = newX
  88. self.lastY = newY
  89. }
  90. }
Add Comment
Please, Sign In to add comment