跳到主要内容

附录 A:完整 Binary Layout

本附录汇总 VFP 1.3 已定义的固定结构。所有多字节数值使用 Little-endian;所有未定义的保留字段必须为零。可变长度数组的长度由同一结构中的 count、size 或 offset 字段确定。

A.1 容器结构

结构固定大小格式摘要
Header64VFPK、主/次版本、Header Size、Feature Flags、Asset UUID、保留
Footer64VFPF、版本、Footer Size、Directory Offset/Length/CRC、File Length、保留
DIR0 Header32DIR0、目录版本、Entry Count/Size、Flags、保留
Directory Entry48Tag、Codec、Chunk ID、Flags、Offset、Length、Raw Length、CRC32、保留

Header(64 bytes)

char[4] magicuint16 majorVersionuint16 minorVersionuint32 headerSizeuint32 featureFlagsuint8[16] assetUuiduint8[32] reserved

Footer(64 bytes)

char[4] magicuint16 majorVersionuint16 minorVersionuint32 footerSizeuint64 directoryOffsetuint64 directoryLengthuint32 directoryCrc32uint32 footerFlagsuint64 fileLengthuint8[20] reserved

Directory Entry(48 bytes)

char[4] taguint32 codecint32 chunkIduint32 flagsuint64 offsetuint64 lengthuint64 rawLengthuint32 crc32uint32 reserved

A.2 权威区段

TagScopePayload 结构固定部分
METAGlobalMETA v1128
PAL0GlobalHeader + 8-byte Palette Entries16
CHIXGlobalHeader + 32-byte Chunk Entries32
VOX0Per ChunkHeader + encoded voxel data32

META v1(128 bytes)

OffsetFieldType
0metaVersion / metaSizeuint16 / uint16
4metaFlagsuint32
8coordinateSystem / voxelUnit / chunkSizeX/Y/Z / reserveduint8[6]
14reserveduint16
16gridSizeX/Y/Z / reserveduint8[4]
20voxelCount / chunkCount / paletteEntryCountuint32[3]
32anchor / pivotfloat32[6]
56sourceRevision / reserveduint32[2]
64sourceHashuint8[32]
96generatorUuiduint8[16]
112reserveduint8[16]

PAL0

Header:uint16 paletteVersionuint16 headerSizeuint16 entryCountuint16 entrySizeuint32 paletteFlagsuint32 reserved

Palette Entry(8 bytes):uint8 indexuint8 r/g/b/auint8 materialFlagsuint8 emissionuint8 reserved

CHIX

Header:uint16 chixVersionuint16 headerSizeuint32 entryCountuint32 entrySizeuint32 chixFlagsuint8[16] reserved

Chunk Entry(32 bytes):int32 chunkIduint8 chunkX/Y/Z/flagsuint8 sizeX/Y/Z/reserveduint32 nonEmptyVoxelCountuint32 voxelCapacityuint32 reserveduint8[8] reserved

VOX0

Header(32 bytes):uint16 voxVersionuint16 headerSizeint32 chunkIduint8 sizeX/Y/Zuint8 voxelCodecuint32 voxelCapacityuint32 nonEmptyVoxelCountuint32 voxelDataLengthuint32 reserved0uint32 reserved1

内部 voxelCodec=0 时,数据为 uint8[voxelCapacity]voxelCodec=1 时,数据为重复的 (uint8 runLength, uint8 paletteIndex) 对。

A.3 缓存与附加区段

TagScopeHeaderRecord / 数据
SCNEGlobal128固定展示场景
MSH0Per Chunk4816-byte Face Record
VBUFPer Chunk6420-byte Vertex + uint32 Indices
PMSHPer Chunk4816-byte Polygon Record
RND0Global6424-byte Batch + int32 refs
ANM0Global3232-byte Clip + 48-byte keyframes
BORDGlobal488-byte Edge Record
PRVWGlobal64Preview data bytes
THMBGlobal0完整 RGBA PNG 文件字节;无 VFP 私有 Header

标准 Record 汇总

Record字节核心字段
MSH0 / PMSH Face16axis、paletteIndex、plane、u、v、width、height、flags、reserved
VBUF Vertex20position float32×3、packed normal、RGBA8
RND0 Batch24material class、flags、Chunk refs、index range
ANM0 Clip32clip ID、duration、keyframe count/offset、flags
ANM0 Keyframe48time、translation、rotation、scale、reserved
BORD Edge8x、y、z、axis、style、paletteIndex、reserved

A.4 目录与 Tag 分配

TagRequiredRebuildablePresentation OnlyChunk ID
META-1
PAL0-1
CHIX-1
VOX0≥0
SCNE-1
MSH0 / VBUF / PMSH≥0
RND0 / ANM0 / BORD / PRVW / THMB-1

本附录是字段尺寸汇总;冲突时以对应章节的完整字段描述为准。