Exemplo n.º 1
0
    // Format refer to
    // https://github.com/ephtracy/voxel-model/blob/master/MagicaVoxel-file-format-vox.txt
    public static IEnumerable <VoxelData> ParseFrom(string path, out Color32[] palette)
    {
        List <VoxelData> outputData = new List <VoxelData>();

        using (VoxReader reader = new VoxReader(path))
        {
            reader.Read();

            foreach (var model in reader.m_Models)
            {
                VoxelData data = CreateInstance <VoxelData>();
                data.m_Width   = model.m_SizeX;
                data.m_Height  = model.m_SizeY;
                data.m_Depth   = model.m_SizeZ;
                data.m_RawData = new Voxel[model.m_SizeX * model.m_SizeY * model.m_SizeZ];

                foreach (var voxel in model.m_Voxels)
                {
                    if (voxel.colourIndex == 0)
                    {
                        Debug.LogWarning("Colour Index 0 found!");
                    }

                    data.m_RawData[data.GetRawIndex(voxel.x, voxel.y, voxel.z)] = new Voxel(voxel.colourIndex);
                }

                outputData.Add(data);
            }

            palette = new Color32[reader.m_Palette.Length];
            for (int i = 0; i < palette.Length; ++i)
            {
                palette[i] = reader.GetColour(i);
            }
        }

        return(outputData);
    }