MagicaVoxel .vox文件格式中对象世界坐标存储位置及提取方法
提取.vox文件多模型世界坐标的方案
你参考的基础.vox格式规范仅覆盖了单模型的体素数据结构,多模型场景的位置信息存储在后续版本新增的场景节点块中,具体提取逻辑如下:
具体操作步骤
- 第一步:完整解析
MAIN主块下的所有子块,除了你已经读取的SIZE(模型尺寸)、XYZI(体素局部坐标)块外,重点提取三类场景节点块:nTRN(变换节点)、nGRP(组节点)、nSHP(形状节点),所有节点块都自带唯一ID,先按ID建立全局索引字典方便关联查询。 - 第二步:读取
nTRN节点的属性字段,其中_t属性存储的就是对应节点的世界空间偏移坐标,值为三个空格分隔的整数,分别对应x/y/z三个轴向的偏移量。如果需要同时解析旋转属性,可以读取_r字段的编码值,仅提取位置可忽略该字段。 - 第三步:关联变换节点和对应体素模型:
nTRN的子节点指向nGRP或nSHP,nSHP的子节点直接关联对应SIZE/XYZI块的模型ID,将模型ID和对应的nTRN的_t偏移量绑定,即可获得单个模型的世界空间原点坐标。 - 第四步:单模型下所有体素的局部坐标加上该模型的世界原点偏移量,即可计算得到每个体素的世界空间坐标。
注意事项
- 若计算得到的坐标和MagicaVoxel编辑器内显示的位置不匹配,注意检查轴向差异:MagicaVoxel默认y轴为向上轴向,部分3D引擎默认z轴向上,需自行做轴向映射转换。
- 若场景存在嵌套组,需要逐层累加父级
nTRN节点的偏移量,才能得到子模型的最终世界坐标。
内容的提问来源于stack exchange,提问作者capslpop
相关产品推荐
相关产品推荐

