【发布时间】: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