跳到主要内容

VfpPackageReader:权威数据与导出

VFP 的权威体素来源是 PAL0 + CHIX + VOX0,而不是 PRVWMSH0PMSHVBUFRND0ANM0 或缩略图。缓存缺失、过期或被删除时,权威数据仍可恢复模型。

decodePalette()

decodePalette(bytes: ArrayBuffer): Array<VfpPaletteEntry>

恢复 PAL0 顺序表。每条 VfpPaletteEntry 包含:

字段说明
indexsymbol权威调色板索引与原始符号。
redgreenbluealpha0–255 RGBA。
metallicroughness材质参数。
emissiveRed/Green/Blue自发光 RGB。
flags调色板记录扩展标志。

decodeVoxels()

decodeVoxels(bytes: ArrayBuffer): VfpVoxelVolume

解码 CHIX 与所有 VOX0,处理 RAW8/RLE8,返回 gridSizechunkSizesolidVoxelCount 和线性 ArrayBuffer voxels。线性索引由 SDK 固定,调用者不得根据渲染缓存猜测坐标;若需要按索引读取,请由应用创建 new Uint8Array(volume.voxels)

const volume = reader.decodeVoxels(vfpBytes);
console.info('grid=' + volume.gridSize + ', solids=' + volume.solidVoxelCount);
const paletteIndex = new Uint8Array(volume.voxels)[0];
console.info('first palette index: ' + paletteIndex);

对 128³ 以上密集模型,此调用会分配完整线性缓冲;不要在每一帧、列表每个单元格或 UI 构建函数内反复调用。

inspect()

inspect(bytes: ArrayBuffer): VfpInspection

在恢复应用 UI 前提供资产摘要。VfpInspection 含文档、网格/Chunk 尺寸、实体数、调色板数、Chunk 数,以及 hasMeshCachehasVoxelBufferhasPreviewMeshhasRenderBufferhasAnimationPlanhasPreviewGlbhasThumbnail 等布尔值。

这些 has* 表示区段存在,不代表缓存可安全信任。

validateAuthoritative()

validateAuthoritative(bytes: ArrayBuffer): VfpAuthoritativeValidation

执行容器校验、必要权威区段恢复、source hash 重算与比对。成功才返回 documentgridSizechunkSizesolidVoxelCountsourceHash;任一步失败均抛错。

const verified = reader.validateAuthoritative(vfpBytes);
console.info('trusted hash: ' + verified.sourceHash);

需要“文件未被篡改、权威模型可恢复”的场景必须调用它。仅 validate() 成功说明所有已存储载荷 CRC 正确,不能说明 VOXO 与 Header hash 的语义一致。

导出交换格式

exportJsonText(bytes: ArrayBuffer): string
exportVox(bytes: ArrayBuffer): ArrayBuffer

两者都以权威数据为输入:前者返回 PixForge JSON 文本,后者返回 MagicaVoxel .vox 字节。建议先 validateAuthoritative(),再导出,以便把坏文件与格式不支持问题在用户保存前报告。

function convertToVox(vfpBytes: ArrayBuffer): ArrayBuffer {
const reader = VoxelKit.createVfpReader();
reader.validateAuthoritative(vfpBytes);
return reader.exportVox(vfpBytes);
}

导出不会自动写磁盘。由宿主以用户明确选择的位置保存 ArrayBuffer,并处理文件名、覆盖确认和文件系统权限。