Ejemplo n.º 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();
        }
Ejemplo n.º 2
0
        private void ProcessTextures(VoxelFace face)
        {
            if (starts.Count <= 0)
            {
                return;
            }

            for (int i = 0; i < starts.Count; i++)
            {
                int w = 1, h = 1;

                switch (face)
                {
                case VoxelFace.Front:
                case VoxelFace.Back:
                    w = ends[i].x - starts[i].x + 1;
                    h = ends[i].y - starts[i].y + 1;
                    break;

                case VoxelFace.Left:
                case VoxelFace.Right:
                    w = ends[i].z - starts[i].z + 1;
                    h = ends[i].y - starts[i].y + 1;
                    break;

                case VoxelFace.Top:
                case VoxelFace.Bottom:
                    w = ends[i].x - starts[i].x + 1;
                    h = ends[i].z - starts[i].z + 1;
                    break;
                }

                Texture2D tex    = new Texture2D(w, h, TextureFormat.ARGB32, false);
                Color32[] tcolor = tex.GetPixels32();
                for (int c = 0; c < tcolor.Length; c++)
                {
                    tcolor[c] = Color.clear;
                }
                tex.SetPixels32(tcolor);

                int px = 0, py = 0;

                switch (face)
                {
                case VoxelFace.Front:
                case VoxelFace.Back:
                {
                    int z = starts[i].z;

                    for (int y = starts[i].y; y <= ends[i].y; y++)
                    {
                        px = 0;
                        for (int x = starts[i].x; x <= ends[i].x; x++)
                        {
                            tex.SetPixel(px, py, data.VoxelColor(x, y, z));
                            px++;
                        }
                        py++;
                    }
                }
                break;

                case VoxelFace.Left:
                case VoxelFace.Right:
                {
                    int x = starts[i].x;

                    for (int y = starts[i].y; y <= ends[i].y; y++)
                    {
                        px = 0;
                        for (int z = starts[i].z; z <= ends[i].z; z++)
                        {
                            tex.SetPixel(px, py, data.VoxelColor(x, y, z));
                            px++;
                        }
                        py++;
                    }
                }
                break;

                case VoxelFace.Top:
                case VoxelFace.Bottom:
                {
                    int y = starts[i].y;

                    for (int z = starts[i].z; z <= ends[i].z; z++)
                    {
                        px = 0;
                        for (int x = starts[i].x; x <= ends[i].x; x++)
                        {
                            tex.SetPixel(px, py, data.VoxelColor(x, y, z));
                            px++;
                        }
                        py++;
                    }
                }
                break;
                }

                tex.Apply();
                texs.Add(tex);
            }
        }
Ejemplo n.º 3
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();
        }