分享

对openflight格式和api的学习心得(转)

 昵称12278894 2013-08-08
OpenFlight格式和API的英文手册在MultiGen的官方网站上可以免费下到,我就不贴出来了,由于我英文差,如果有些理解错误的地方谢谢大家指出来。

第一章讲的是场景描述,以前有人贴过,我就不废话了

第二章 OpenFlight文件格式

  一个OpenFlight数据库的层次结构被作为一个文件存储在磁盘上。文件由线性的二进制流记录组成。字节在文件中的存储顺序是按照Big Endian方式存储的(即0x1234在内存中存储顺序为0x12 0x34)。所有的OpenFlight记录都是以4个字节序列开始的。序列的前两个字节标识了记录类型(opcode),后两个字节指明记录的长度。在这种结构规律下,OpenFlight记录很容易从磁盘中读取并加以分析。

● 所有的OpenFlight记录的长度都是4字节的整数倍。当一个记录不到4字节的整数倍时,会自动填补成4的整数倍。在某些情况下,OpenFlight记录被填补成8字节的整数倍。
● 所有记录的长度(所有记录的值)同所有值的偏移值都是以字节为单位的。
● 除非明确的说明,位域和掩码都是从0开始计算的。(例如第一个位的位号为0)
● 除非明确的说明,矩阵记录的元素是以排为主要顺序存储在OpenFlight文件中的。例如,矩阵元素应该以如下顺序排列:

● 所有OpenFlight记录的长度都被限制在能被2个字节或16个bit位(65535)表示的最大长度。对于长度固定的记录,这个最大长度是足够的。对于可变尺寸的记录,这个限制被扩展记录打破。更多信息见63页“Continuation Record”。


下面是Header Record

数据类型 偏移值 长度 描述
Int 0 2 Header opcode 1
Unsigned int 2 2 长度,记录的长度(最长65535)
Char 4 8 7字符ASCII ID;0终结符(通常设为“db”)
Int 12 4 格式修订等级
Int 16 4 编辑修订等级
Char 20 32 最后修订的日期和时间
Int 52 2 下一组结点ID号
Int 54 2 下一LOD结点ID号
Int 56 2 下一物体结点(Object node)ID号
Int 58 2 下一面(多边形)结点ID号
Int 60 2 单位增加器(Unit multiplier)(总是为1)
Int 62 1 顶点坐标单位 0=米;1=千米;4=英尺;5=英寸;8=海里
Int 63 1 如果为真则在新的面上涂白塑漆
Int 64 4 标记(bits,从左到右)0=存储顶点法向量(Save vertex normals)1=填充颜色模式2=CAD视图模式3~31=保留(Spare)
Int 68 4*6 保留
Int 92 4 投影类型0=平面地球(Flat earth);1=梯形(Trapezoidal);2=圆形地球(Round earth);3=Lambert;4=UTM;5=以地球为中心的(Geocentric);6=大地测量的(Geodetic)
Int 96 4*7 保留
数据类型 偏移值 长度 描述
Int 124 2 下一个DOF结点ID号
Int 128 4 数据库原点100=OpenFlight;200=DIG I/DIG II;300=Evans and Sutherland CT5A/CT6;400=PSP DIG;600=General Electric CIV/CV/PT2000;700=Evans and Sutherland GDF
Double 132 8 西南数据库坐标x
Double 140 8 西南数据库坐标y
Double 148 8 Delta x处放置数据库
Double 156 8 Delta y处放置数据库
Int 164 2 下一个声音结点ID号
Int 166 2 下一个路径结点ID号
Int 168 4*2 保留
Int 176 2 下一个裁减结点ID号
Int 178 2 下一个文本结点ID号
Int 180 2 下一个BSP结点ID号
Int 182 2 下一个开关结点ID号
Int 184 4 保留
Double 188 8 西南角纬度
Double 196 8 西南角经度
Double 204 8 东北角纬度
Double 212 8 东北角经度
Double 220 8 原始纬度
Double 228 8 原始经度
Double 236 8 Lambert upper latitude
Double 244 8 Lambert lower latitude
Int 252 2 下一个光源结点ID号
数据类型 偏移值 长度 描述
Int 254 2 下一个光点结点ID号
Int 256 2 下一个路结点ID号
Int 258 2 下一个CAT结点ID号
Int 260 2 保留
Int 262 2 保留
Int 264 2 保留
Int 266 2 保留
Int 268 4 椭圆地球模型0=WGS 1984;1=WGS 1972;2=Bessel;3=Clarke 1866;4=NAD 1927;5=用户定义椭圆
Int 272 2 下一个适应结点ID号(Adaptive node ID)
Int 274 2 下一个曲面结点ID号
Int 276 2 UTM地域(为UTM投影-负值表示南半球)
Char 278 6 保留
Double 284 8 Delta z处放置数据库(在Delta x和Delta y的连接处)
Double 292 8 半径(从数据库原点到最远处的距离)
Unsigned int 300 2 下一个网格结点ID号
Unsigned int 302 2 下一个光点系统ID号
Int 304 4 保留
Double 308 8 地球长轴(为椭圆体定义)单位:米
Double 316 8 地球短轴(为椭圆体定义)单位:米

这里有一个问题:我用UE32打开两个版本的flt文件时出现的格式修订版本(format reision)如下:
版本15.69 值为00 00 06 18
版本15.70 00 00 06 22
它是长度为4的int类型。按照Big Endian方式通过值如何转换得到的版本信息?

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多