4

在 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 对象,CAAnimation 对象是通过 CAAnimationGroup.animations 获得的。CAAnimation 对象(对于我的 DAE 文件)是 CAKeyframeAnimation 的实际实例,我从中获得 CAKeyframeAnimation.values:

Keyframe (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 方法,我需要找到用于这些关键帧的格式。

4

2 回答 2

1

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

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

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

于 2013-08-06T12:29:04.087 回答
0

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

于 2014-08-20T00:56:10.780 回答