Example #1
0
        private void SetupParticles()
        {
            particleSystem.Clear(true);
            particleSystem.gravityModifier = 0;

            Vector3 offset = voxelData.pivot;

            if (center)
            {
                offset.x = (float)voxelData.width / 2f;
                offset.y = (float)voxelData.height / 2f;
                offset.z = (float)voxelData.depth / 2f;
            }

            List <ParticleSystem.Particle> voxs = new List <ParticleSystem.Particle>();

            for (int x = 0; x < voxelData.width; x++)
            {
                for (int y = 0; y < voxelData.height; y++)
                {
                    for (int z = 0; z < voxelData.depth; z++)
                    {
                        if (voxelData.FilledVoxel(x, y, z))
                        {
                            if (removeHidden && !voxelData.IsVisible(x, y, z))
                            {
                                continue;
                            }

                            Vector3 pos = new Vector3(x, y, z);
                            pos -= offset - new Vector3(.5f, .5f, .5f);
                            pos *= scale;
                            //pos += this.transform.root.position;

                            ParticleSystem.Particle p = new ParticleSystem.Particle
                            {
                                startLifetime     = float.PositiveInfinity,
                                remainingLifetime = float.PositiveInfinity,

                                startSize  = scale,
                                startColor = voxelData.VoxelColor(x, y, z),

                                position = pos,
                                velocity = Vector3.zero
                            };

                            voxs.Add(p);
                        }
                    }
                }
            }

            voxelParticles = voxs.ToArray();
            UpdateVoxels();
        }
 private void MakeMap(int ox, int oy, int oz)
 {
     for (int x = 0; x < w; x++)
     {
         for (int y = 0; y < h; y++)
         {
             for (int z = 0; z < d; z++)
             {
                 if (!data.FilledVoxel(x + ox, y + oy, z + oz))
                 {
                     map[x, y, z] = data.IsVisible(x, y, z);
                 }
             }
         }
     }
 }
 private void RemoveHidden(VoxelData data)
 {
     for (int x = 0; x < data.width; x++)
     {
         for (int y = 0; y < data.height; y++)
         {
             for (int z = 0; z < data.depth; z++)
             {
                 if (!data.IsVisible(x, y, z))
                 {
                     data.SetVoxel(x, y, z, 0);
                 }
             }
         }
     }
 }
Example #4
0
        public PreviewVoxelMesh(VoxelData data)
        {
            List <Vector3> verts  = new List <Vector3>();
            List <int>     idxs   = new List <int>();
            List <Color32> colors = new List <Color32>();

            for (int x = 0; x < data.width; x++)
            {
                for (int y = 0; y < data.height; y++)
                {
                    for (int z = 0; z < data.depth; z++)
                    {
                        if (data.IsVisible(x, y, z))
                        {
                            int i = verts.Count;

                            Color32 col = data.VoxelColor(x, y, z);

                            float   c  = ((float)((data.GetVoxel(x, y, z) - 1))) / 256;
                            Vector2 uv = new Vector2(c, 0);

                            //Top...
                            verts.Add(new Vector3(x, y + 1, z));
                            verts.Add(new Vector3(x, y + 1, z + 1));
                            verts.Add(new Vector3(x + 1, y + 1, z + 1));
                            verts.Add(new Vector3(x + 1, y + 1, z));

                            colors.Add(col); colors.Add(col); colors.Add(col); colors.Add(col);

                            idxs.Add(i + 0);
                            idxs.Add(i + 1);
                            idxs.Add(i + 2);
                            idxs.Add(i + 0);
                            idxs.Add(i + 2);
                            idxs.Add(i + 3);
                            i += 4;

                            //Bottom...
                            verts.Add(new Vector3(x, y, z));
                            verts.Add(new Vector3(x, y, z + 1));
                            verts.Add(new Vector3(x + 1, y, z + 1));
                            verts.Add(new Vector3(x + 1, y, z));

                            colors.Add(col); colors.Add(col); colors.Add(col); colors.Add(col);

                            idxs.Add(i + 0);
                            idxs.Add(i + 2);
                            idxs.Add(i + 1);
                            idxs.Add(i + 0);
                            idxs.Add(i + 3);
                            idxs.Add(i + 2);
                            i += 4;

                            //Front...
                            verts.Add(new Vector3(x, y, z));
                            verts.Add(new Vector3(x, y + 1, z));
                            verts.Add(new Vector3(x + 1, y + 1, z));
                            verts.Add(new Vector3(x + 1, y, z));

                            colors.Add(col); colors.Add(col); colors.Add(col); colors.Add(col);

                            idxs.Add(i + 0);
                            idxs.Add(i + 1);
                            idxs.Add(i + 2);
                            idxs.Add(i + 0);
                            idxs.Add(i + 2);
                            idxs.Add(i + 3);
                            i += 4;

                            //Back...
                            verts.Add(new Vector3(x, y, z + 1));
                            verts.Add(new Vector3(x, y + 1, z + 1));
                            verts.Add(new Vector3(x + 1, y + 1, z + 1));
                            verts.Add(new Vector3(x + 1, y, z + 1));

                            colors.Add(col); colors.Add(col); colors.Add(col); colors.Add(col);

                            idxs.Add(i + 0);
                            idxs.Add(i + 2);
                            idxs.Add(i + 1);
                            idxs.Add(i + 0);
                            idxs.Add(i + 3);
                            idxs.Add(i + 2);
                            i += 4;

                            //Left...
                            verts.Add(new Vector3(x, y, z));
                            verts.Add(new Vector3(x, y + 1, z));
                            verts.Add(new Vector3(x, y + 1, z + 1));
                            verts.Add(new Vector3(x, y, z + 1));

                            colors.Add(col); colors.Add(col); colors.Add(col); colors.Add(col);

                            idxs.Add(i + 0);
                            idxs.Add(i + 3);
                            idxs.Add(i + 2);
                            idxs.Add(i + 0);
                            idxs.Add(i + 2);
                            idxs.Add(i + 1);
                            i += 4;

                            //Right...
                            verts.Add(new Vector3(x + 1, y, z));
                            verts.Add(new Vector3(x + 1, y + 1, z));
                            verts.Add(new Vector3(x + 1, y + 1, z + 1));
                            verts.Add(new Vector3(x + 1, y, z + 1));

                            colors.Add(col); colors.Add(col); colors.Add(col); colors.Add(col);

                            idxs.Add(i + 0);
                            idxs.Add(i + 1);
                            idxs.Add(i + 2);
                            idxs.Add(i + 0);
                            idxs.Add(i + 2);
                            idxs.Add(i + 3);
                            i += 4;
                        }
                    }
                }
            }

            //Debug.Log(verts.Count);
            //Debug.Log(uvs.Count);
            //Debug.Log(idxs.Count);

            mesh              = new Mesh();
            mesh.indexFormat  = UnityEngine.Rendering.IndexFormat.UInt32;
            mesh.subMeshCount = 1;

            mesh.vertices = verts.ToArray();
            mesh.SetIndices(idxs.ToArray(), MeshTopology.Triangles, 0);
            mesh.SetColors(colors);

            mesh.RecalculateNormals();
        }