加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 07:05:26 所属栏目:百科 来源:网络整理
导读:使用Mac OS X上的SceneKit加载COLLADA(DAE)文件,您可以通过遍历SCNNode:s及其各自的SCNGeometry:s树轻松获取所有几何体,并使用[geometry geometrySourcesForSemantic:SCNGeometrySourceSemanticVertex]提取顶点数据. 但是,给定一个包含动画对象的DAE文件
使用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对象通过CAAnimationGroup.animations从CAAnimationGroup对象获取. CAAnimation对象(对于我的DAE文件)是CAKeyframeAnimation的实际实例,我从中获取CAKeyframeAnimation.values:

关键帧(1/40):< 00000000 0000f0bf 00000080 d9956d3c 000000a0 0e32a13c 00000000 00000000 00000020 636772bc 00000020 290000ef3f 00000000 0f7ecebf 00000000 00000000 00000020 1324a1bc 00000000 000007 0000 00 00000020 000000ef 00000000 00000000 00000000 00000000 00000000 00000000300> 00000000 00000006900 00000000 0000f03f>

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

解决方法

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读