如何在SceneKit中从Collada文件中分离出多个动画

2023-11-23

我正在将第三方 .dae Collada 文件作为场景加载到 SceneKit 项目中。

.dae 文件中有许多不同的动画,设置在不同的时间/帧。我试图弄清楚如何将它们分开并通过引用名称引用每个单独的动画。 dae 文件中没有易于理解的参考名称 - 动画全部设置为一个动画。

我能够将动画解析为 CAAnimation 对象,并使用以下代码验证我是否已成功完成此操作:

SCNScene *scene = [SCNScene sceneNamed:@"art.scnassets/man.dae"];
SCNNode *man = [scene.rootNode childNodeWithName:@"Bip01" recursively:YES];
CAAnimation *animation = [man animationForKey:@"test_Collada_DAE-1"];
[man removeAllAnimations];
[man addAnimation:animation forKey:@"animation"];

有没有办法为我的 CAAnimation 对象设置开始和结束帧或时间?解析各种动画的最佳方法是什么?我希望我不必手动将 dae 文件拆分为多个文件并单独加载每个文件。


3D 工具通常将多个动画导出为带有子动画的单个动画。在这种情况下,SceneKit 会将这些动画加载为带有子动画的 CAAnimationGroup。因此,一种选择是“解析”动画组的子动画并检索您想要的动画。另一种选择是使用 SCNSceneSource 按名称检索(子)动画(但这仅在您的 3D 工具在导出 DAE 时导出名称时才有效)。

如果您需要“裁剪”动画(即从较长的动画中提取从 t0 开始、持续时间为 D 的动画),CoreAnimation 有一个 API:

  • 创建一个动画组来“裁剪”,持续时间为 D。

  • 添加您想要裁剪的动画作为子动画并设置它的 时间偏移到 t0。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在SceneKit中从Collada文件中分离出多个动画 的相关文章

随机推荐

  • 有时 Facebook 共享对话框无法在 iOS 上加载

    有时 当我启动 Facebook 共享对话框时 操作系统会切换到 Facebook 应用程序 但共享对话框不会加载 然后如果你再试一次 通常会成功 为什么第一次不起作用 NSURL url NSURL URLWithString some
  • 如何在 Perl 中有效地解析 CSV 文件?

    我正在开展一个项目 涉及在 Perl 中解析大型 csv 格式的文件 并且希望提高工作效率 我的方法是split 首先按行读取文件 然后split 每行再次用逗号来获取字段 但这并不是最理想的 因为至少需要两次传递数据 一次按行分割 然后再
  • 相同数据的多个查找结构:内存重复?

    假设我有一群人的数据 并且我希望能够以不同的方式查找他们 也许有某种数据结构 如二叉树 可以方便按名称查找 也许还有另一个 如列表 是按创建顺序排列的 也许还有更多 在许多语言中 每个人都会在堆上分配一次 每个数据结构都包含指向该内存的指针
  • Rails 应用程序有批量电子邮件插件吗?

    有谁知道有一个插件或可以用来为 Rails 应用程序发送批量电子邮件的东西吗 具体来说 我希望能够将 HTML 电子邮件文件传递给 rake 任务或其他任务 并将其通过电子邮件发送给所有注册到我的网站并选中 请向我发送有关 XXX 的信息
  • 确定是否通过 FCM 通知单击打开了活动

    我正在使用 fcm 控制台向所有安装了我的应用程序的设备发送消息 通知没有任何额外的有效负载 只有通知消息 我想知道是否有一种简单的方法可以知道是否通过 FCM 通知单击打开了活动 有一个解决方案 通过扩展FirebaseMessaging
  • 模拟索引属性

    我正在使用 Moq 编写单元测试 我创建了一个模拟对象 现在 当我尝试模拟其属性时 我收到错误 表达式树可能不包含索引属性 这是我的代码 public Node GetNode IMyInterface interface string i
  • Pycharm:设置运行manage.py任务的环境变量

    我已经移动了我的SECRET KEY我的设置文件中的值 当我加载 virtualenv 时它会被设置 我可以确认该值存在于python manage py shell 当我运行 Django 控制台时 SECRET KEY失踪了 这是应该的
  • 如何在 Perl 中增加带有前导零的值?

    这是同样的问题this one 但是使用 Perl 我想迭代一个只有一个前导零的值 shell 中的等价物是 for i in seq w 01 99 do echo i done 由于前导零很重要 因此您可能希望将它们用作字符串 而不是数
  • 获取添加的 DOM 节点的 className (mutationObserver)

    我正在编写一个简单的用户脚本 如果 Facebook 帖子包含特定的单词列表 它将自动隐藏该帖子 核心功能有效 但我的MutationObserver似乎没有读过className of mutation addedNodes适当地 我循环
  • char 与 wchar_t

    我正在尝试打印出 wchar t 字符串 代码如下 include
  • 如何验证 ASP.Net MVC 2 中的复选框?

    使用 MVC2 我有一个简单的 ViewModel 其中包含一个布尔字段 该字段在视图上呈现为复选框 我想验证用户是否选中了该框 我的 ViewModel 上的 Required 属性似乎不起作用 我相信这是因为未选中的复选框表单字段实际上
  • 重写虚函数仅因调用约定不同是什么意思?

    我正在尝试实施IUnknown 我按照发球台的说明进行操作 但不起作用 当我尝试编译时 我得到 Error 2 error C2695 testInterfaceImplementation AddRef overriding virtua
  • 是否可以检测 Android 强制门户浏览器?

    我有一个强制门户 从 Android 5 0 Lollipop 开始 它在 Android 的强制门户浏览器而不是设备的默认浏览器中启动 我需要以某种方式检测它们是否在强制门户浏览器中 而不是常规网络浏览器 如果是 则显示不同的内容 是否可
  • 服务器端 Blazor 不提供 HttpClient 进行注入

    当我尝试注入 HttpClient 时 我在 razor 页面中收到错误 未处理的承诺拒绝 错误 System InvalidOperationException 无法为类型上的属性 Http 提供值 没有 类型为 System Net H
  • 使用 Visual Studio 开发服务器时如何让 Web 服务使用固定端口号?

    我有一个 ASP NET 网站和一个 Windows 窗体应用程序 我的网络服务的位置是 http localhost 12312 MyWebSiteFolder WSFile asmx 问题是 端口号不断变化 如果我重新打开解决方案 它会
  • 在获取聊天历史记录时,我没有从 Openfire 获取用户历史记录

    我通过在 open fire 中安装 open fire 插件来从 openfire 获取历史记录并尝试了这段代码 let iq1 DDXMLElement name iq iq1 addAttribute withName type st
  • Kotlin中如何在延迟后调用函数?

    如标题 有没有办法在延迟 例如1秒 后调用函数Kotlin 还有一个选项可以使用Handler gt postDelayed Handler postDelayed doSomethingHere 1000
  • 处理可选的 python 字典字段

    我正在处理加载到 Python 字典中的 JSON 数据 其中很多都有可选字段 其中可能包含字典之类的东西 dictionary1 required value1 one value2 two optional value1 one dic
  • 使 Java 类通用,但仅适用于两种或三种类型

    我很惊讶在 stackoverflow 上找不到这个问题 我只能将其归咎于我的谷歌搜索不佳 无论如何都要指出重复的问题 这是一个玩具类 它返回与您放入其中的内容相反的内容 目前它适用于整数 但只需要非常小的更改即可适用于字符串 public
  • 如何在SceneKit中从Collada文件中分离出多个动画

    我正在将第三方 dae Collada 文件作为场景加载到 SceneKit 项目中 dae 文件中有许多不同的动画 设置在不同的时间 帧 我试图弄清楚如何将它们分开并通过引用名称引用每个单独的动画 dae 文件中没有易于理解的参考名称 动