Playcanvas是一款开源的3d引擎,底层格式是自家定义的json格式,其文档说明如下:

https://developer.playcanvas.com/en/user-manual/graphics/file-format/

但是在官网翻不到其动画文件的解析代码,这里根据其引擎源码的解析,对其源码文件格式解析如下记录

{"animation":{// 动画时长"duration": 0.2,"nodes":[{// key.t 动画对应的时间节点// key.p 该时间节点对应的translations// key.r 该时间节点对应的rotations// key.s 该时间节点对应的scale"keys":[{"p":[0,0,0],"s":[1,1,1],"r":[0,0,0],"t":0}],//节点名称"name": "RootNode",// 一般为空,当keys为null时,取default作为keys的值"default": {}},{"keys":[{"p":[0,0,0],"s":[1,1,1],"r":[0,0,0],"t":0},{"p":[0.1,0,0],"s":[1,1,1],"r":[0,0,0],"t":0.1},{"p":[0.1,0,0.1],"s":[1,1,1],"r":[0,0,0],"t":0.2}],"name": "Node1",// 一般为空,当keys为null时,取default作为keys的值"default": {}}          ]}
}

实现playcanvas动画到gltf动画的转换(python代码示例)

animation_nodes = animation_data['nodes']
# 一般animation_nodes第一个节点为root,无需转换
animation_nodes.pop(0)
animations = []
channels = []
samplers = []
for animation_node in animation_nodes:# 查找node name 对应 gltf node 的 indexnode_index = self.search_node_index(animation_node['name'])if node_index == -1:continuecurrent_times = []translations = []rotations = []scales = []for key in animation_node['keys']:current_times.append(key['t'])translations.extend(key['p'])rotations.extend(math_util.euler_to_quaternion(key['r']))scales.extend(key['s'])input_accessor = gltf_accessor_util.create_gltf_accessors(current_times, AccessorComponentType.FLOAT, 'SCALAR', 0)output_t_accessor = gltf_accessor_util.create_gltf_accessors(translations, AccessorComponentType.FLOAT, 'VEC3', 0)output_r_accessor = gltf_accessor_util.create_gltf_accessors(rotations, AccessorComponentType.FLOAT, 'VEC4', 0)output_s_accessor = gltf_accessor_util.create_gltf_accessors(scales, AccessorComponentType.FLOAT, 'VEC3', 0)# playcanvas每个node的p、r、s 对应 gltf三个sampler和channelpath_accessor_relatives = dict(translation=output_t_accessor,rotation=output_r_accessor,scale=output_s_accessor,)for path, accessor in path_accessor_relatives.items():samplers.append(dict(input=input_accessor,interpolation='LINEAR',  # 默认output=accessor,))channels.append(dict(target=dict(node=node_index, path=path),sampler=len(samplers) - 1,))
if len(channels) > 0 and len(samplers) > 0:animation_dict['channels'] = channelsanimation_dict['samplers'] = samplers# 当有多段动画(多个json)时,可以在最外层添加for循环,并添加到animationsanimations.append(animation_dict)if len(animations) > 0:self.gltf_json['animations'] = animations  

Playcanvas动画格式解析相关推荐

  1. (转)Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法

    版权声明:本文出自郭霖的博客,转载必须注明出处. 目录(?)[-] ValueAnimator的高级用法 ObjectAnimator的高级用法 转载请注明出处:http://blog.csdn.ne ...

  2. 转:YUV RGB 常见视频格式解析

    转: http://www.cnblogs.com/qinjunni/archive/2012/02/23/2364446.html YUV RGB 常见视频格式解析 I420是YUV格式的一种,而Y ...

  3. 十大经典排序算法动画与解析,看我就够了

    作者 | 程序员小吴 转载自五分钟学算法(ID: CXYxiaowu) 排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内部排序和外部排序.内部排序是数据记录在内存中进行 ...

  4. 【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )

    文章目录 安卓直播推流专栏博客总结 一. AAC 音频格式解析 二. FLV 音频数据标签解析 1. 分析 FLV 格式中的 AAC 音频格式数据 2. AAC 音频特殊配置 3. AAC 音频数据标 ...

  5. java 解析日期格式_日期/时间格式/解析,Java 8样式

    java 解析日期格式 自Java 几乎 开始以来,Java开发人员就通过java.util.Date类(自JDK 1.0起)和java.util.Calendar类(自JDK 1.1起 )来处理日期 ...

  6. 日期/时间格式/解析,Java 8样式

    自Java 几乎 开始以来,Java开发人员就通过java.util.Date类(自JDK 1.0起)和java.util.Calendar类(自JDK 1.1起 )来处理日期和时间. 在这段时间内, ...

  7. 3D模型格式解析(OBJ)

    文章目录 OBJ格式解析 一.OBJ格式 二.vtkOBJReader源码解析 1.主要部分 总结 OBJ格式解析 通过解读vtk源码中对OBJ文件的读取代码,讲解如何获取obj模型的顶点(verte ...

  8. android 属性动画实例,Android属性动画完全解析 中 ,ValueAnimator和ObjectAnimator的高级用法...

    大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画进行了 ...

  9. c语言组json包,json格式解析和libjson的用法介绍(关于cjson的使用方法)

    在阅读本文之前,请先阅读下<Rss Reader实例开发之系统设计>一文. Rss Reader实例开发中,进行网络数据交换时主要使用到了两种数据格式:JSON与XML.本文主要介绍JSO ...

最新文章

  1. 98年建模a题论文_2019年第九届APMCM亚太地区大学生数学建模竞赛 A 题(中英版)...
  2. 曾被ICLR拒稿,字节跳动今斩获最佳论文,ACL 2021各大奖项揭晓
  3. sparksql删除MySQL数据_Databricks 第6篇:Spark SQL 维护数据库和表
  4. 腾讯,百度,网易游戏,华为笔面经验
  5. [转] GDBT详解
  6. Linux iptables 配置详解
  7. Ontheinternet的深圳论坛
  8. DeFi 借贷协议 NAOS Finance 完成种子轮融资
  9. 美国visa虚拟信用卡
  10. 惊了!一个程序员的水平能差到什么程度
  11. 方立勋jdbc mysql视频_java视频教程 Java自学视频整理(持续更新中...)
  12. 君正Ingenic X1000E_halley2 更改Logo
  13. mysql 保存富文本的类型_富文本编辑器内容在mysql数据库以什么类型保..._网络编辑_帮考网...
  14. cortex系列处理器排行_arm处理器排行_ARM Cortex A系列处理器性能分类比较ARM处理器排名 ZNDS资讯...
  15. 怎么改微信号第二次_微信号怎么改2017 微信号怎么改第二次方法介绍
  16. 力荐!50 个最实用的免费机器学习数据集
  17. 细谈JVM垃圾回收与部分底层实现
  18. tesla k80显卡 配置支持opengl
  19. 用Python自动生成Excel报表
  20. 春节或将成为短信唯一的救命稻草?

热门文章

  1. Z-Blog 添加收藏本站
  2. HTTPS是怎么防止劫持的
  3. python---之cython的使用
  4. h5页面输入框在安卓手机上被键盘挡住
  5. 杠杆炒股选择几倍比较适合?
  6. pythonfillcolor填充不了颜色_如何在matplotlib 2.0中仅使用图案填充(无背景色)填充区域...
  7. 构造二叉树-前序遍历
  8. 多分类问题中sklearn的RFECV指定scoring函数
  9. Hadoop 入门总结
  10. 《质量总监成长记》笔记