使用SceneKit从DAE / COLLADA中提取动画顶点

时间:2013-08-02 13:23:06

标签: objective-c macos animation core-animation scenekit

在Mac OS X上使用SceneKit加载COLLADA(DAE)文件,您可以通过遍历SCNNode:s及其各自的SCNGeometry:s树轻松获取所有几何体,并使用[geometry geometrySourcesForSemantic:SCNGeometrySourceSemanticVertex]提取顶点数据

但是,给定一个包含动画对象的DAE文件 - SceneKit是否能够在动画中给定给定时间内每个顶点的确切位置,还是可以从关联的CAAnimation对象中提取所有动画数据?

我的用例是我想使用SceneKit导入DAE文件,但是使用我自己的渲染管道来处理其他所有文件。

澄清 显然有两种方法可以实现:

1)从关联的动画中获取并解析关键帧

2)让SceneKit评估给定时间的场景,并给我预先计算的顶点(等)坐标

我在用例中的目标是#2,但是如果我能找到SceneKit#1使用的关键帧格式的文档也是可以接受的。

我的问题是,对于#1,我无法进一步挖掘以下内容:

SCNNode.animationKeys为给定的SCNNode提供动画密钥,[SCNNode animationForKey:key]给定CAAnimationGroup对象,通过CAAnimationGroup.animations从CAAnimationGroup对象获取CAAnimation对象。 CAAnimation对象(对于我的DAE文件)是CAKeyframeAnimation的实际实例,我从中获取CAKeyframeAnimation.values:

关键帧(1/40):其中00000000 0000f0bf 00000080 d9956d3c 000000a0 0e32a13c 00000000 00000000 00000020 636772bc 00000020 2914ef3f 00000000 0f7ecebf 00000000 00000000 00000020 1324a1bc 00000000 0f7ecebf 00000020 2914efbf 00000000 00000000 00000000 00000000 000000c0 205c6d40 00000000 00a069c0 00000000 0000f03f>

等。所以要解决上面的#1方法,我需要找到用于这些关键帧的格式。

2 个答案:

答案 0 :(得分:1)

我的理解是你需要从SceneKit中检索节点(对象位置)+几何(顶点,法线......)+动画信息 - 然后将这些信息转换为引擎的表示,然后播放动画并转换顶点在您的引擎中。

SceneKit将使用SCNNode / SCNGeometry API为您提供几何和层次结构信息。 您可以使用SCNNode的SCNAnimatable协议(animationKeys / animationForKey:)

检索动画

您可以使用CoreAnimation的CAKeyframeAnimation / CAAnimationGroup API检索动画的各个关键帧。

答案 1 :(得分:0)

看起来SCNNode有presentationNode,可以在动画期间为您提供节点信息。