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

Objective c 使用SceneKit从DAE/COLLADA提取动画顶点,objective-c,macos,animation,core-animation,scenekit,Objective C,Macos,Animation,Core Animation,Scenekit,使用Mac OS X上的SceneKit加载COLLADA(DAE)文件,您可以通过遍历SCNNode:s树及其各自的SCNGeometry:s轻松获取所有几何体,并使用[geometry geometrySourcesForSemantic:SCNGeometrySourceSemanticVertex]提取顶点数据 但是,给定包含动画对象的DAE文件,SceneKit是否能够在动画中的给定时间为我提供每个顶点的确切位置,或者我是否可以从关联的动画对象中提取所有动画数据 我的使用案例是,我希望

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

但是,给定包含动画对象的DAE文件,SceneKit是否能够在动画中的给定时间为我提供每个顶点的确切位置,或者我是否可以从关联的动画对象中提取所有动画数据

我的使用案例是,我希望使用SceneKit导入DAE文件,但其他所有内容都使用我自己的渲染管道

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

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

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

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

我的问题是,对于#1,我只想挖掘以下内容:

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

关键帧(1/40):


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

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

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


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

看起来像SCNNode,它可以在动画过程中为您提供节点信息。

作为场景渲染器的场景视图具有
currentTime
的属性。如果更改它,是否会为您更新几何体?因为我没有使用SceneKit进行任何渲染,只是将几何体导入到我自己的渲染器中,所以我没有任何SceneKit中的SceneView或ScenerEnder处于活动状态,在其中我可以修改currentTime属性,或者我误解了你的建议?你正确地理解了我的问题。只是好奇:你以前是否构建了渲染管道,或者在SceneKit中是否存在无法执行的操作(即使作为节点的渲染代理)?原因是渲染管道是跨平台的,虽然我正在构建的编辑器/工具部分仅限于OSX,我可以通过让SceneKit为我导入COLLADA文件来节省大量时间:)谢谢,我尝试过这种方法-如果您还了解实际关键帧使用的数据格式,这将非常有帮助。