swift - 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 形状变形。我是否应该做任何其他事情来强制它重新绘制或计算变形?
解决方案
唔。看起来我将变形器附加到形状的父级,而不是实际的球体。有趣的是,在这里提问有时会产生“啊哈”的时刻。像这样在我的领域中阅读修复了它:
sphereNode = SCNReferenceNode(named: "sphere").childNodes.first
sphereNode2 = SCNReferenceNode(named: "sphere2").childNodes.first
sphereNode?.morpher = SCNMorpher()
sphereNode!.morpher?.targets = [(sphereNode2.geometry)!]
sphereNode!.name = "EFFECT"
推荐阅读
- javascript - 我正在尝试实现一个函数,该函数接受数组输入并给出数组的乘积,在 Javascript 中跳过 0 但我只能使用 .reduce
- python - scandir 迭代器的行为不符合文档(Win10,py 3.9.6)
- etl - Pentaho ETL 工具会死吗?
- javascript - 如何在 Angular 中使用模块内的类
- spring-boot - Spring JPA - 如果不存在,如何设置data.sql添加数据,如果存在则忽略
- python-3.x - 在 Selenium 中自动下载 .csv
- socket.io - 为什么连接上的套接字但 `socket.connected` 是假的?
- android - 如何在flutter中实现如下键盘布局?
- c++ - 如何使用 libcurl 获取文件名?
- python - 绘制具有相同列的 2 个不同数据帧的直方图