【发布时间】:2013-08-03 18:55:57
【问题描述】:
在 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:
关键帧(1/40):
等等。所以要解决上面的#1方法,我需要找到用于这些关键帧的格式。
【问题讨论】:
-
作为场景渲染器的场景视图具有
currentTime的属性。如果您更改它,是否会为您更新几何图形? -
由于我没有使用 SceneKit 进行任何渲染,只是将几何图形导入到我自己的渲染器中,因此我没有任何来自 SceneKit 的 SceneView 或 SceneRenderer 处于活动状态,我可以在其中修改 currentTime 属性,还是我误解了你的建议?
-
你正确理解了我的问题。
-
只是好奇:您之前是否构建了渲染管道,或者有没有在 SceneKit 中无法完成的事情(即使作为节点的渲染委托)?
-
原因是渲染管道是跨平台的,而我正在构建的编辑器/工具部分仅适用于 OSX,我可以通过让 SceneKit 导入COLLADA 文件给我 :)
标签: objective-c macos animation core-animation scenekit