【问题标题】:Loading Collada dae file into SceneKit for joint manipulation将 Collada dae 文件加载到 SceneKit 以进行联合操作
【发布时间】:2015-01-12 16:42:04
【问题描述】:

我正在将一个装配好的 collada 文件加载到 SceneKit 并尝试将骨盆向前旋转 45 度和脊柱。骨盆和脊柱节点确实会加载,但是,旋转似乎不起作用。提取的 2 个 SCNNode 类是 dad 文件中的“联合”节点。

NSURL *url = [[NSBundle mainBundle] URLForResource:@"rigged-character" withExtension:@"dae"];
SCNSceneSource *source = [SCNSceneSource sceneSourceWithURL:url options:nil];
pelvis = [source entryWithIdentifier:@"ID179469248" withClass:[SCNNode class]];
spine = [source entryWithIdentifier:@"ID179691712" withClass:[SCNNode class]];

[pelvis setPivot:SCNMatrix4MakeRotation(MCP_DEGREES_TO_RADIANS(45), 0, 1, 0)];
[spine setPivot:SCNMatrix4MakeRotation(MCP_DEGREES_TO_RADIANS(45), 0, 1, 0)];

有谁知道为什么,我需要补充一下: [myView.scene.rootNode addChildNode:pelvis]; [骨盆addChildNode:spine];

感谢您的帮助。

【问题讨论】:

  • 您是要旋转节点还是改变它们的轴心?
  • 另外,为什么不从 SCNSkinner 的骨架层次结构中获取骨骼节点?
  • 在我从 Cheetah3d 导出的 collada 文件中,我确实有骨盆、脊椎和颈部表示为关节。我想旋转和弯曲骨盆/臀部 45 度,然后我的脊椎 45 度。我刚刚研究了 SCNSkinner,也许这可能是解决这个问题的方法。让我进一步研究一下,让我更深入地研究一下。如果您有任何其他建议,那就太好了。
  • @David Ronnqvist - 当我在搜索 SCNSkinner 的示例时,它看起来很合适,但搜索返回的页面不到 3 页。我希望会有例子。我可以像上面那样加载模型并对骨骼执行转换,还是您认为我需要创建一个 SCNSkinner 对象(不确定我需要提供的 SCNGeometry 和 boneInverseBindTransforms 参数)。非常感谢。
  • 我希望 dae 文件中的导出字符已经有一个 SCNSkinner。如果没有,我会尝试重新导出角色。在代码中创建一个 skinner 对象是相当复杂的。我只建议在默认情况下 SceneKit 不支持导入另一种文件格式时这样做。

标签: objective-c collada scenekit kinematics


【解决方案1】:

为了创建骨架,我构建骨架如下:

  1. 在collada文件中创建SCNView加载
  2. SCNView.scene.rootNode 中检索每个SCNNode
  3. 使用addChildNode将子节点添加到SCNView的根节点

希望这会有所帮助!

【讨论】:

    猜你喜欢
    • 2014-10-12
    • 2016-09-27
    • 2021-03-25
    • 2018-12-22
    • 2014-10-10
    • 2018-03-12
    • 1970-01-01
    • 2015-06-10
    • 2018-01-05
    相关资源
    最近更新 更多