FreeBinary 格式说明
说明
简称FB格式,是一个简单的二进制文件打包格式。
作用是FBX、unity、js等交换的一个中间格式。
由李剑英制定,易于读取,易于扩展
相应的代码可以用svn取得
SVN:http://code.taobao.org/svn/hayabusa/trunk/fbxdumpxna
浏览器查看:http://code.taobao.org/p/hayabusa/src/trunk/fbxdumpxna/
该格式中所有的字符串、整数写入方式均为一致的
实践
我们在实践中的使用方法是,将fbxdump部署在服务器,软件将fbx传到服务器,然后下载回dump打包后的文件。
这样就可以让软件拥有跨平台处理fbx的能力。
通过asp.net的处理代码如下
Svn:http://code.taobao.org/svn/hayabusa/trunk/ppsystem
浏览器查看:http://code.taobao.org/p/hayabusa/src/trunk/ppsystem/
字符串打包说明
字符串存储方式
Byte1 strlen(字符串对应的utf8数组长度)
[utf8 bytearray
…
..
…] utf8 数组
写入代码参考
整数打包说明
该格式中整数打包均为小头在前字节序
写入代码参考
打包格式说明
该文件第一层为打包层
是一个不压缩文件包,将多个二进制文件存为一层。
head字符串,字符串,按照第一个字节为字符串长度,后续为utf8数组的形式存
索引偏移,int32 整数,小头在前,写入四个字节
中间二进制区
….
….
【此处是索引偏移位置】
索引文件长度,int32整数
索引文件二进制区
包解析方法代码参考
索引文件为文本文件,以\n分隔,一行一个文件
每行三个信息Filename|filelen|posinpack\n
解析索引文件的逻辑用字符串分隔即可,参考代码如下。
场景格式说明
FreeBinary只是打包格式。
FBXXNADump是我们开发的xnadump工具,该工具将fbxdump为自定义格式,尽量保存了fbx中的信息,使用xna,是因为xnafbximporter是一个很好地c#包装,c#开发很顺,实质不依赖xna,只依赖dx9c,vc2010redist,dotnet framework4,大部分正常windows系统默认拥有所有依赖。
Dump出来的文件是这样,pack.bin 就是fb格式。是一个文件包。
其他就是打包到pack.bin 里的文件,只是保留了下来,pack.bin 里面也是这些内容
可以看到分为了4个部分。
Dump格式中文件名即为文件hash,仅有treejson除外
场景treejson格式说明
Treejson是json格式,每一层为一个jsonobject,按场景图树结构存储
参数如下
Name 节点名称
Type 节点类型,只有两种,node 空节点,mesh 有模型的节点
Trans_matrix 矩阵,下面三个是矩阵的分解,数据均无转换,fbx原文
Trans_scale
Trans_rotate
Trans_move
当为mesh节点时,有meshinfo子对象
Meshinfo制定一个mesh属性,只有sha1,指向对应的mesh文件
指定一个材质数组,只有sha1,指向对应的材质文件
场景材质格式说明
每一个材质是一个json文件,一些基本属性,
关键是颜色和贴图,
贴图可以导出多张,key是贴图的作用,name是贴图对应的文件,只有sha1
场景模型格式说明
场景模型为二进制格式
包含三个部分
1顶点位置
2顶点其他信息
3子模型划分
顶点位置是必须有的,一开始就先写入四字节顶点数量,然后写入顶点位置数组
然后是写入顶点其他信息
这个部分层次稍微有点多
首先是写入有几个其他信息,数量可能为零
然后作为一个数组写入
对每个信息,先写入两个字符串,一个名字,一个信息。
名字决定该信息是什么,uv?normal?这类的
Type决定该信息是什么类型,vector2 还是vector3,对应type,写入方式不同
最后是写入子模型划分信息,这个地方设计是按照unity的设计思路来的
分为几个子模型
然后每个子模型写入索引缓存,写的int32,没有精密的控制容量
场景贴图格式说明
场景贴图为原始格式保存,支持jpg和png
FreeBinary 格式说明的更多相关文章
- 日期格式代码出现两次的错误 ORA-01810
错误的原因是使用了两次MM . 一.Oracle中使用to_date()时格式化日期需要注意格式码 如:select to_date('2005-01-01 11:11:21','yyyy-MM-dd ...
- 一个粗心的Bug,JSON格式不规范导致AJAX错误
一.事件回放 今天工作时碰到了一个奇怪的问题,这个问题很早很早以前也碰到过,不过没想到过这么久了竟然又栽在这里. 当时正在联调一个项目,由于后端没有提供数据接口,于是我直接本地建立了一个 json ...
- excel 日期/数字格式不生效需要但双击才会生效的解决办法
原因: Excel2007设置过单元格格式后,并不能立即生效必须挨个双击单元格,才能生效.数据行很多.效率太低. 原因:主要是一些从网上拷贝过来的日期或数字excel默认为文本格式或特殊-中文数字格式 ...
- 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo
有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...
- System.Guid ToString五中格式
参考:https://msdn.microsoft.com/en-us/library/97af8hh4.aspx 测试代码: using System; using System.Collectio ...
- WebApi返回Json格式字符串
WebApi返回json格式字符串, 在网上能找到好几种方法, 其中有三种普遍的方法, 但是感觉都不怎么好. 先贴一下, 网上给的常用方法吧. 方法一:(改配置法) 找到Global.asax文件,在 ...
- 你所能用到的BMP格式介绍
原理篇: 一.编码的意义. 让我们从一个简单的问题开始,-2&-255(中间的操作符表示and的意思)的结果是多少,这个很简单的问题,但是能够写出解答过程的人并不 多.这个看起来和图片格式没有 ...
- 值得注意的ibatis动态sql语法格式
一.Ibatis常用动态sql语法,简单粗暴用一例子 <select id="iBatisSelectList" parameterClass="java.util ...
- Lind.DDD.LindMQ~关于持久化到Redis的消息格式
回到目录 关于持久化到Redis的消息格式,主要是说在Broker上把消息持久化的过程中,需要存储哪些类型的消息,因为我们的消息是分topic的,而每个topic又有若干个queue组成,而我们的to ...
随机推荐
- Html Agility Pack 解析Html
Hello 好久不见 哈哈,今天给大家分享一个解析Html的类库 Html Agility Pack.这个适用于想获取某网页里面的部分内容.今天就拿我的Csdn的博客列表来举例. 打开页面 用Fir ...
- java中的字符串相关知识整理
字符串为什么这么重要 写了多年java的开发应该对String不陌生,但是我却越发觉得它陌生.每学一门编程语言就会与字符串这个关键词打不少交道.看来它真的很重要. 字符串就是一系列的字符组合的串,如果 ...
- 漫扯:从polling到Websocket
Http被设计成了一个单向的通信的协议,即客户端发起一个request,然后服务器回应一个response.这让服务器很为恼火:我特么才是老大,我居然不能给小弟发消息... 轮询 老大发火了,小弟们自 ...
- Java8实战分享
虽然很多人已经使用了JDK8,看到不少代码,貌似大家对于Java语言or SDK的使用看起来还是停留在7甚至6. Java8在流式 or 链式处理,并发 or 并行方面增强了很多,函数式的风格使代码可 ...
- 红黑树——算法导论(15)
1. 什么是红黑树 (1) 简介 上一篇我们介绍了基本动态集合操作时间复杂度均为O(h)的二叉搜索树.但遗憾的是,只有当二叉搜索树高度较低时,这些集合操作才会较快:即当树的高度较高(甚至一种极 ...
- Unity3D框架插件uFrame实践记录(二)
5.创建属性和命令 本小节主要内容包括: 在Element节点上创建属性数据 在Element节点上创建命令数据 5.1.在Element节点上创建属性数据 在这里,我们首先为Login节点中的属性( ...
- CentOS:Yum源的配置
# cd /etc/yum.repos.d/ # mv CentOS-Base.repo CentOS-Base.repo.bak # wget http://mirrors.163.com/.hel ...
- [原创]Macbook Pro Retina 15吋安装Windows 7和Windows 8.1方法
前言 本以为有Bootcamp神器在手,Macbook装Win系统应该是不在话下,没想到着实折腾了一番.期间因为误操作导致OSX也挂掉进不去只得磁盘全部抹掉网络恢复安装.为了让大家少走弯路,提供个人安 ...
- Princeton Algorithms week3 Assignment
这周编程作业是实现检测点共线的算法.和排序算法有关系的地方在于,对斜率排序后可以很快的检测出来哪些点是共线的,另外这个算法的瓶颈也在于排序的性能. 一点收获: java传参数时传递的是值,这很多人都知 ...
- 【第三篇】ASP.NET MVC快速入门之安全策略(MVC5+EF6)
目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...