Playcanvas动画格式解析
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动画格式解析相关推荐
- (转)Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
版权声明:本文出自郭霖的博客,转载必须注明出处. 目录(?)[-] ValueAnimator的高级用法 ObjectAnimator的高级用法 转载请注明出处:http://blog.csdn.ne ...
- 转:YUV RGB 常见视频格式解析
转: http://www.cnblogs.com/qinjunni/archive/2012/02/23/2364446.html YUV RGB 常见视频格式解析 I420是YUV格式的一种,而Y ...
- 十大经典排序算法动画与解析,看我就够了
作者 | 程序员小吴 转载自五分钟学算法(ID: CXYxiaowu) 排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内部排序和外部排序.内部排序是数据记录在内存中进行 ...
- 【Android RTMP】音频数据采集编码 ( AAC 音频格式解析 | FLV 音频数据标签解析 | AAC 音频数据标签头 | 音频解码配置信息 )
文章目录 安卓直播推流专栏博客总结 一. AAC 音频格式解析 二. FLV 音频数据标签解析 1. 分析 FLV 格式中的 AAC 音频格式数据 2. AAC 音频特殊配置 3. AAC 音频数据标 ...
- java 解析日期格式_日期/时间格式/解析,Java 8样式
java 解析日期格式 自Java 几乎 开始以来,Java开发人员就通过java.util.Date类(自JDK 1.0起)和java.util.Calendar类(自JDK 1.1起 )来处理日期 ...
- 日期/时间格式/解析,Java 8样式
自Java 几乎 开始以来,Java开发人员就通过java.util.Date类(自JDK 1.0起)和java.util.Calendar类(自JDK 1.1起 )来处理日期和时间. 在这段时间内, ...
- 3D模型格式解析(OBJ)
文章目录 OBJ格式解析 一.OBJ格式 二.vtkOBJReader源码解析 1.主要部分 总结 OBJ格式解析 通过解读vtk源码中对OBJ文件的读取代码,讲解如何获取obj模型的顶点(verte ...
- android 属性动画实例,Android属性动画完全解析 中 ,ValueAnimator和ObjectAnimator的高级用法...
大家好,在上一篇文章当中,我们学习了Android属性动画的基本用法,当然也是最常用的一些用法,这些用法足以覆盖我们平时大多情况下的动画需求了.但是,正如上篇文章当中所说到的,属性动画对补间动画进行了 ...
- c语言组json包,json格式解析和libjson的用法介绍(关于cjson的使用方法)
在阅读本文之前,请先阅读下<Rss Reader实例开发之系统设计>一文. Rss Reader实例开发中,进行网络数据交换时主要使用到了两种数据格式:JSON与XML.本文主要介绍JSO ...
最新文章
- 98年建模a题论文_2019年第九届APMCM亚太地区大学生数学建模竞赛 A 题(中英版)...
- 曾被ICLR拒稿,字节跳动今斩获最佳论文,ACL 2021各大奖项揭晓
- sparksql删除MySQL数据_Databricks 第6篇:Spark SQL 维护数据库和表
- 腾讯,百度,网易游戏,华为笔面经验
- [转] GDBT详解
- Linux iptables 配置详解
- Ontheinternet的深圳论坛
- DeFi 借贷协议 NAOS Finance 完成种子轮融资
- 美国visa虚拟信用卡
- 惊了!一个程序员的水平能差到什么程度
- 方立勋jdbc mysql视频_java视频教程 Java自学视频整理(持续更新中...)
- 君正Ingenic X1000E_halley2 更改Logo
- mysql 保存富文本的类型_富文本编辑器内容在mysql数据库以什么类型保..._网络编辑_帮考网...
- cortex系列处理器排行_arm处理器排行_ARM Cortex A系列处理器性能分类比较ARM处理器排名 ZNDS资讯...
- 怎么改微信号第二次_微信号怎么改2017 微信号怎么改第二次方法介绍
- 力荐!50 个最实用的免费机器学习数据集
- 细谈JVM垃圾回收与部分底层实现
- tesla k80显卡 配置支持opengl
- 用Python自动生成Excel报表
- 春节或将成为短信唯一的救命稻草?