【问题标题】:SceneKit, manually control skeleton from skinnerSceneKit,从蒙皮人手动控制骨架
【发布时间】:2022-04-08 11:47:12
【问题描述】:

Apple 演示了带有 3d 姿态估计的控制 3d 机器人。一切都连接在一起,像魔术一样工作。没有使用SceneKit
https://developer.apple.com/documentation/arkit/content_anchors/capturing_body_motion_in_3d

我正在尝试在SceneKit 中手动控制同一个机器人。想出不方便的方法:

let rightHand = skeleton?.childNode(withName: "right_hand_joint", recursively: true)
rightHand?.rotation = SCNVector4(0, 1, 0, .pi / 2.0)
rightHand?.parent?.rotation = SCNVector4(0, 1, 0, .pi / 2.0)

有没有其他方法,我可以设置关节的位置,它会自动计算骨架的角度?我发现的所有其他示例都从 .dae 文件加载了一些动画。

【问题讨论】:

    标签: swift scenekit


    【解决方案1】:

    我看到方法 "childNode(withName: String)" 只是查看当前的子节点。

    为了在所有节点中找到一个,我创建了这个函数。

    extension SCNNode {
        
        func getNode(_ name: String) -> SCNNode? {
            if self.name == name {
                return self
            }
            if self.childNodes.count == 0 {
                return nil
            }
            for n in self.childNodes {
                let result = n.getNode(name)
                if result != nil {
                    return result
                }
            }
            return nil
        }
    }
    

    之后我可以得到需要的节点。

    let rightHand = skeleton?.getNode("right_hand_joint")
    rightHand?.rotation = SCNVector4(0, 1, 0, .pi / 2.0)
    rightHand?.parent?.rotation = SCNVector4(0, 1, 0, .pi / 2.0)
    

    结果:

    【讨论】:

    • 请仔细阅读问题。 childNode 函数可以递归工作。关于如何通过四肢位置控制分身的问题
    猜你喜欢
    • 2014-12-13
    • 2022-11-21
    • 1970-01-01
    • 2013-07-20
    • 2016-12-02
    • 2021-12-16
    • 1970-01-01
    • 2018-10-04
    • 2017-05-31
    相关资源
    最近更新 更多