ARkit SCNMorpher对我不起作用。没有错误,只有形状没有变化

时间:2019-08-24 22:07:42

标签: swift arkit

我正在尝试使用SCNMorpher混合到多边形之间的简单示例。除了点的位置,它们在拓扑上是相同的

每个文件都存储在一个.scn文件中,我得到的形状如下:

sphereNode = SCNReferenceNode(named: "sphere")
sphereNode2 = SCNReferenceNode(named: "sphere2")
sphereNode?.morpher = SCNMorpher()
sphereNode!.morpher?.targets = [(sphereNode2?.childNodes.first!.geometry)!]
sphereNode!.name = "EFFECT"

我正在使用faceAnchor混合形状来驱动它

if let effectNode = sceneView?.scene.rootNode.childNode(withName: "EFFECT", recursively: true) {
    let v = faceAnchor?.blendShapes[ARFaceAnchor.BlendShapeLocation.jawOpen]
    effectNode.morpher?.setWeight(v as! CGFloat, forTargetNamed: "sphere2")
}

我也尝试过:

...
effectNode.morpher?.setWeight(v as! CGFloat, forTargetAt: 0)
...

代码运行。.我可以打印v ..的值,因为我打开/合上颚时它们会更改,并且该值将传递到morpher。我看到了基本球体形状,但从未向sphere2形状变形。我是否应该做其他任何事情来迫使它重新绘制或计算变形?

1 个答案:

答案 0 :(得分:0)

嗯。看起来我是在将变形器附加到形状的父级上,而不是实际的球体上..有趣的是,这里的问题有时会造成“ Ah Ha”时刻。这样在我的领域中阅读可以解决问题:

sphereNode = SCNReferenceNode(named: "sphere").childNodes.first
sphereNode2 = SCNReferenceNode(named: "sphere2").childNodes.first
sphereNode?.morpher = SCNMorpher()
sphereNode!.morpher?.targets = [(sphereNode2.geometry)!]
sphereNode!.name = "EFFECT"