Ejemplo n.º 1
0
    private MapArray <int> GenerateLandMask(MapArray <int> bitmask)
    {
        var simplex = new Simplex2D(43);

        int gbt_radius = (int)Mathf.Max(ChunkOrder, Mathf.Ceil(2.0f * Mathf.Log(1.0f + 1.00f * Radius) / Mathf.Log(7.0f))) - ChunkOrder + 1;

        for (int i = 0; i < Utils.Pow(7, gbt_radius); i++)
        {
            for (int j = 0; j < ChunkSize; j++)
            {
                GBTHex  hex = new GBTHex(i * ChunkSize + j);
                Vector2 pos = hex.position;
                if (GetLandMaskValue(pos, simplex) > Threshold)
                {
                    bitmask[hex] |= 1;
                    foreach (GBTCorner corner in hex.GetCorners())
                    {
                        bitmask[corner] |= 1;
                    }
                }
                else
                {
                    bitmask[hex] |= 2;
                    foreach (GBTCorner corner in hex.GetCorners())
                    {
                        bitmask[corner] |= 2;
                    }
                }
            }
        }
        return(bitmask);
    }
Ejemplo n.º 2
0
    private void TriangulateHex(GBTHex hex, Color[] colors)
    {
        if (colors == null)
        {
            return;
        }
        Vector2 center  = hex.position;
        var     corners = hex.GetCorners();

        for (int i = 0; i < corners.Count; i++)
        {
            int       inext  = (i + 1) % 6;
            GBTCorner first  = corners[i];
            GBTCorner second = corners[inext];
            CreateTriangle(center, colors[0], second.position, colors[inext + 1], first.position, colors[i + 1]);
        }
    }
Ejemplo n.º 3
0
    private void DrawGrayscaleArray(MapArray <float> array, MapArray <int> bitmask, float minimum, float maximum)
    {
        int gbt_radius = (int)Mathf.Max(ChunkOrder, Mathf.Ceil(2.0f * Mathf.Log(1.0f + 1.00f * Radius) / Mathf.Log(7.0f))) - ChunkOrder + 1;

        int count  = 0;
        var chunks = new List <ChunkData>();

        for (int i = 0; i < Utils.Pow(7, gbt_radius); i++)
        {
            var chunk = new ChunkData(i, ChunkSize);
            for (int j = 0; j < ChunkSize; j++)
            {
                var hex = new GBTHex(i * ChunkSize + j);
                if ((bitmask[hex] & 1) > 0)
                {
                    var   colors  = new Color[7];
                    var   corners = hex.GetCorners();
                    float average = 0.0f;
                    for (int k = 0; k < 6; k++)
                    {
                        colors[1 + k] = GetGrayscale((array[corners[k]] - minimum) / (maximum - minimum));
                        average      += array[corners[k]] / 6.0f;
                    }
                    colors[0] = GetGrayscale((average - minimum) / (maximum - minimum));
                    chunk.AddColors(colors);
                }
                else
                {
                    chunk.AddColors(null);
                }
            }
            chunks.Add(chunk);
        }
        Debug.Log(count);
        m_DrawPolygonEvent.Invoke(chunks);
    }