zoukankan      html  css  js  c++  java
  • 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整数

        索引文件二进制区

     

    包解析方法代码参考

     

    索引文件为文本文件,以 分隔,一行一个文件

    每行三个信息Filename|filelen|posinpack

     

    解析索引文件的逻辑用字符串分隔即可,参考代码如下。

    场景格式说明

    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

  • 相关阅读:
    20172304 结对编程--四则运算实验总结
    寒假作业01
    20162317-20162315结对编程(四则运算)第二周阶段总结
    20162317袁逸灏 第十二周实验报告:实验三
    20162317-20162315结对编程(四则运算)第一周阶段总结
    关于解决MySort
    《程序设计与数据结构》第9周学习总结
    20162317 2016-2017-2 《程序设计与数据结构》第8周学习总结
    20162317袁逸灏 第八周实验报告:实验二 Java面向对象程序设计
    学号 2016-2017-2 《程序设计与数据结构》第7周学习总结
  • 原文地址:https://www.cnblogs.com/crazylights/p/5008274.html
Copyright © 2011-2022 走看看