首页 > 解决方案 > ARkit SCNMorpher 不适合我。没有错误,只是没有形状变化

问题描述

我正在尝试一个简单的示例,使用 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..的值。当我打开/关闭我的下巴时它们会发生变化,并且该值会传递给变形器。我看到了基本的球体形状,但它永远不会向 sphere2 形状变形。我是否应该做任何其他事情来强制它重新绘制或计算变形?

标签: swiftarkit

解决方案


唔。看起来我将变形器附加到形状的父级,而不是实际的球体。有趣的是,在这里提问有时会产生“啊哈”的时刻。像这样在我的领域中阅读修复了它:

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

推荐阅读