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

标签 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 从中获取 CAAnimation 对象。 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 方法,我需要找到用于这些关键帧的格式。

最佳答案

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

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

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

关于objective-c - 使用 SceneKit 从 DAE/COLLADA 中提取动画顶点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18017990/

相关文章:

objective-c - 在 Objective-C 中使用 Swift 下标

java - MacOSX 顶部的 JMenuBar

objective-c - 如何将宏和常量放入 iOS 项目的 .pch 文件中?

macos - Mac OS X Lion 10.7 中的配置错误 -- OpenSSL 需要库 'crypto'

objective-c - 具有多个 header 的 NSMutableURLRequest

jQuery 同步动画?

Java Swing - 如何为 JLabel 添加出现效果?

javascript - 更改默认滚动条行为

objective-c - 执行获取请求 :error: freezes app

iphone - 从同步请求切换到带有图片上传的异步请求?