Exemple #1
0
        public VoxelMeshGenerator(VoxelManager parent, VoxelDataGenerator vdata) : base(parent)
        {
            resolution = vdata.resolution + Vector3.One; //add 3 (10 Faces mean 11 Vertecies)

            //prepareData();

            surfaceMesh = new Mesh();

            //generateMesh();
        }
        public VoxelMeshGenerator(VoxelManager parent, VoxelDataGenerator vdata)
            : base(parent)
        {
            resolution = vdata.resolution + Vector3.One; //add 3 (10 Faces mean 11 Vertecies)

            //prepareData();

            surfaceMesh = new Mesh();

            //generateMesh();
        }
Exemple #3
0
        public VoxelChunk(VoxelManager parent, Vector3 start, Vector3 end)
            : base(parent)
        {
            this.start = start;
            this.end   = end;

            voxelData  = new VoxelDataGenerator(this, start, end);
            meshHelper = new VoxelMeshGenerator(this, voxelData);

            Position = (end + start) / 2f;

            generateSurface();

            wasUpdated = false;
            //generateDebugSurface();
            //generateSurfaceMesh();
            //scene.generateParticleSys();

            surface.isVisible = false;
        }
Exemple #4
0
        public VoxelChunk(VoxelManager parent, Vector3 start ,Vector3 end)
            : base(parent)
        {
            this.start = start;
            this.end = end;

            voxelData = new VoxelDataGenerator(this, start, end);
            meshHelper = new VoxelMeshGenerator(this, voxelData);

            Position = (end + start) / 2f;

            generateSurface();

            wasUpdated = false;
            //generateDebugSurface();
            //generateSurfaceMesh();
            //scene.generateParticleSys();

            surface.isVisible = false;
        }
        public Mesh generateMesh(VoxelDataGenerator vdata)
        {
            gameWindow.sw.Start();

            vdata.generateVoxelData();
            prepareData();

            //int[] data = vdata.data;
            float vSize = 0.5f / vdata.resolution.X;

            Vector3 up = new Vector3(0, 1, 0);
            Vector3 right = new Vector3(1, 0, 0);
            Vector3 front = new Vector3(0, 0, 1);
            Vector3 back = new Vector3(0, 0, -1);
            Vector3 down = new Vector3(0, -1, 0);
            Vector3 left = new Vector3(-1, 0, 0);

            for (int i = 0; i < vdata.voxelAmnt; i++)
            {
                Vector3 postion = vdata.idToNumber(i);

                if (vdata.getData(i) == 1)
                {
                    bool isBorder = vdata.isBorder(i);

                    if (vdata.getRelativeData(i,up) == 0)
                    {
                        generateTopFace(i, isBorder, postion);
                    }

                    if (vdata.getRelativeData(i,right) == 0)
                    {
                        generateRightFace(i, isBorder, postion);
                    }

                    if (vdata.getRelativeData(i,front) == 0)
                    {
                        generateFrontFace(i, isBorder, postion);
                    }

                    if (vdata.getRelativeData(i,back) == 0)
                    {
                        generateBackFace(i, isBorder, postion);
                    }

                    if (vdata.getRelativeData(i,left) == 0)
                    {
                        generateLeftFace(i, isBorder, postion);
                    }

                    if (vdata.getRelativeData(i,down) == 0)
                    {
                        generateDownFace(i, isBorder, postion);
                    }
                }
            }

            vdata.deleteCage();

            performSmoothing();
            performCubicMapping();

            surfaceMesh.positionVboDataList = positions;
            surfaceMesh.textureVboDataList = textureCoords;
            surfaceMesh.normalVboDataList = normals;

            surfaceMesh.FaceList = Faces;

            gameWindow.meshLoader.parseFaceList(ref surfaceMesh, false);
            gameWindow.meshLoader.generateVBO(ref surfaceMesh);

            gameWindow.sw.Stop();
            gameWindow.log("generated Chunk:" + gameWindow.sw.Elapsed);

            return surfaceMesh;
        }
Exemple #6
0
        public Mesh generateMesh(VoxelDataGenerator vdata)
        {
            gameWindow.sw.Start();

            vdata.generateVoxelData();
            prepareData();

            //int[] data = vdata.data;
            float vSize = 0.5f / vdata.resolution.X;

            Vector3 up    = new Vector3(0, 1, 0);
            Vector3 right = new Vector3(1, 0, 0);
            Vector3 front = new Vector3(0, 0, 1);
            Vector3 back  = new Vector3(0, 0, -1);
            Vector3 down  = new Vector3(0, -1, 0);
            Vector3 left  = new Vector3(-1, 0, 0);

            for (int i = 0; i < vdata.voxelAmnt; i++)
            {
                Vector3 postion = vdata.idToNumber(i);

                if (vdata.getData(i) == 1)
                {
                    bool isBorder = vdata.isBorder(i);

                    if (vdata.getRelativeData(i, up) == 0)
                    {
                        generateTopFace(i, isBorder, postion);
                    }

                    if (vdata.getRelativeData(i, right) == 0)
                    {
                        generateRightFace(i, isBorder, postion);
                    }

                    if (vdata.getRelativeData(i, front) == 0)
                    {
                        generateFrontFace(i, isBorder, postion);
                    }

                    if (vdata.getRelativeData(i, back) == 0)
                    {
                        generateBackFace(i, isBorder, postion);
                    }

                    if (vdata.getRelativeData(i, left) == 0)
                    {
                        generateLeftFace(i, isBorder, postion);
                    }

                    if (vdata.getRelativeData(i, down) == 0)
                    {
                        generateDownFace(i, isBorder, postion);
                    }
                }
            }

            vdata.deleteCage();

            performSmoothing();
            performCubicMapping();

            surfaceMesh.positionVboDataList = positions;
            surfaceMesh.textureVboDataList  = textureCoords;
            surfaceMesh.normalVboDataList   = normals;

            surfaceMesh.FaceList = Faces;

            gameWindow.meshLoader.parseFaceList(ref surfaceMesh, false);
            gameWindow.meshLoader.generateVBO(ref surfaceMesh);

            gameWindow.sw.Stop();
            gameWindow.log("generated Chunk:" + gameWindow.sw.Elapsed);

            return(surfaceMesh);
        }