Example #1
0
        private static MapDisplay.DisplayBuffers GenerateMapBuffers(List <IntVector3.IndexedIntVector3> points)
        {
            List <uint> voxels   = new List <uint>(points.Count);
            List <uint> hindices = new List <uint>(points.Count / 2);
            IntVector3  prevFour = points[0];
            IntVector3  prevTwo  = points[0];

            hindices.Add(0);
            int hFourCount = 1;

            for (int i = 0; i < points.Count; ++i)
            {
                var iv = points[i];
                voxels.Add(iv.v.ToVoxel());
                if (TestHilbertIndices.isDifferentHilbertCube(iv.v, prevFour, 4))
                {
                    prevFour = iv.v;
                    hindices.Add((uint)i);
                    hFourCount++;
                }
            }
            for (int i = 0; i < points.Count; ++i)
            {
                var iv = points[i];
                if (!TestHilbertIndices.isDifferentHilbertCube(iv.v, prevFour, 4))
                {
                    if (TestHilbertIndices.isDifferentHilbertCube(iv.v, prevTwo, 2))
                    {
                        prevTwo = iv.v;
                        hindices.Add((uint)i);
                    }
                }
                else
                {
                    prevFour = iv.v;
                }
            }

            uint[] hilbertRanges = new uint[] { (uint)points.Count, (uint)hindices.Count, (uint)hFourCount }; // (uint)hindices.Count };

            MapDisplay.DisplayBuffers dbuffers = new MapDisplay.DisplayBuffers();
            dbuffers.display = new ComputeBuffer(voxels.Count, sizeof(uint));
            dbuffers.display.SetData(voxels.ToArray());

            dbuffers.hilbertIndices = new ComputeBuffer(hindices.Count, sizeof(uint));
            dbuffers.hilbertIndices.SetData(hindices.ToArray());

            dbuffers.hilbertLODRanges = new ComputeBuffer(hilbertRanges.Length, sizeof(uint));
            dbuffers.hilbertLODRanges.SetData(hilbertRanges);

            return(dbuffers);
        }
Example #2
0
        public static bool TestDisplayBufferFromPerlinGen(uint[] uis, out MapDisplay.DisplayBuffers displayBuffers, VGenConfig vGenConfig)
        {
            List <IntVector3.IndexedIntVector3> points;

            if (!PackedVoxelsToIndexedIntVector3s(uis, out points, vGenConfig))
            {
                displayBuffers = new MapDisplay.DisplayBuffers();
                return(false);
            }

            displayBuffers = GenTestBuffers(vGenConfig.ChunkDimension, points);
            return(true);
        }
Example #3
0
        public bool TestDisplayBufferFromSolidVoxels(uint[] uis, out MapDisplay.DisplayBuffers displayBuffers)
        {
            if (uis.Length == 0)
            {
                displayBuffers = new MapDisplay.DisplayBuffers();
                return(false);
            }
            var points = new List <IntVector3.IndexedIntVector3>(uis.Length);

            for (int i = 0; i < uis.Length; ++i)
            {
                points.Add(new IntVector3.IndexedIntVector3()
                {
                    index = i,
                    v     = IntVector3.FromVoxelInt((int)uis[i])
                });
            }

            displayBuffers = GenTestBuffers(_chunkSize, points);
            return(true);
        }