Ejemplo n.º 1
0
    public void Run(SignedDistanceFieldGenerator _generator, SignedDistanceField _target)
    {
        generator    = _generator;
        target       = _target;
        tex          = new Texture2D(generator.m_x_dims, generator.m_y_dims, TextureFormat.RGBAFloat, false);
        outside_grid = new float[generator.m_pixels.Length];
        inside_grid  = new float[generator.m_pixels.Length];
        col_buff     = new Color[generator.m_pixels.Length];

        target.m_texture = tex;
        target.StartCoroutine(SweepRoutine());
    }
Ejemplo n.º 2
0
 private void Update()
 {
     //little bit of code to run an animated sweep from blog
     if (Input.GetKeyDown(KeyCode.Space))
     {
         SignedDistanceFieldGenerator generator = new SignedDistanceFieldGenerator();
         generator.LoadFromTextureAntiAliased(Resources.Load <Texture2D>("cat"));
         AnimatedGridSweep anim = new AnimatedGridSweep();
         anim.Run(generator, this);
     }
     if (Application.isPlaying)
     {
         m_noise_anim = Time.time;
     }
 }
Ejemplo n.º 3
0
    public override void OnInspectorGUI()
    {
        serializedObject.Update();

        DrawDefaultInspector();

        SignedDistanceField field = (SignedDistanceField)target;

        if (GUILayout.Button("BF line"))
        {
            SignedDistanceFieldGenerator generator = new SignedDistanceFieldGenerator(16, 16);
            generator.BFLine(new Vector2(3.5f, 8.5f), new Vector2(12.5f, 8.5f));
            field.m_texture = generator.End();
        }
        if (GUILayout.Button("1 BF circle"))
        {
            SignedDistanceFieldGenerator generator = new SignedDistanceFieldGenerator(16, 16);
            generator.BFCircle(new Vector2(8, 8), 4);
            field.m_texture = generator.End();
        }
        if (GUILayout.Button("1 BF rectangle"))
        {
            SignedDistanceFieldGenerator generator = new SignedDistanceFieldGenerator(16, 16);
            generator.BFRect(new Vector2(3, 5), new Vector2(12, 10));
            field.m_texture = generator.End();
        }
        if (GUILayout.Button("2 BF circles"))
        {
            SignedDistanceFieldGenerator generator = new SignedDistanceFieldGenerator(16, 16);
            generator.BFCircle(new Vector2(5, 7), 3);
            generator.BFCircle(new Vector2(10, 8), 3.5f);
            field.m_texture = generator.End();
        }
        if (GUILayout.Button("2 close BF rectangles"))
        {
            SignedDistanceFieldGenerator generator = new SignedDistanceFieldGenerator(64, 64);
            generator.BFRect(new Vector2(4, 4), new Vector2(60, 35));
            generator.BFRect(new Vector2(4, 34), new Vector2(60, 60));
            field.m_texture = generator.End();
        }

        if (GUILayout.Button("1 padded line"))
        {
            SignedDistanceFieldGenerator generator = new SignedDistanceFieldGenerator(32, 32);
            generator.PLine(new Vector2(8, 15), new Vector2(23, 20), 5);
            field.m_texture = generator.End();
        }
        if (GUILayout.Button("1 padded circle"))
        {
            SignedDistanceFieldGenerator generator = new SignedDistanceFieldGenerator(32, 32);
            generator.PCircle(new Vector2(16, 16), 7, 5);
            field.m_texture = generator.End();
        }
        if (GUILayout.Button("1 padded rectangle"))
        {
            SignedDistanceFieldGenerator generator = new SignedDistanceFieldGenerator(32, 32);
            generator.PRect(new Vector2(10, 12), new Vector2(20, 18), 5);
            field.m_texture = generator.End();
        }

        if (GUILayout.Button("Clear none edge pixels"))
        {
            SignedDistanceFieldGenerator generator = new SignedDistanceFieldGenerator(64, 64);
            //generator.BFRect(new Vector2(4, 4), new Vector2(60, 35));
            //generator.BFRect(new Vector2(4, 34), new Vector2(60, 60));
            generator.PCircle(new Vector2(20, 28), 12, 5);
            generator.PCircle(new Vector2(40, 32), 14, 5);
            generator.ClearAndMarkNoneEdgePixels();
            field.m_texture = generator.End();
        }

        if (GUILayout.Button("Sweep close rectangle pixels"))
        {
            SignedDistanceFieldGenerator generator = new SignedDistanceFieldGenerator(64, 64);
            generator.BFRect(new Vector2(4, 4), new Vector2(60, 35));
            generator.BFRect(new Vector2(4, 34), new Vector2(60, 60));
            generator.Sweep();
            field.m_texture = generator.End();
        }
        if (GUILayout.Button("Sweep close circles"))
        {
            SignedDistanceFieldGenerator generator = new SignedDistanceFieldGenerator(512, 512);
            generator.PCircle(new Vector2(160, 224), 92, 5);
            generator.PCircle(new Vector2(340, 256), 103, 5);
            generator.EikonalSweep();
            field.m_texture = generator.End();
        }

        if (GUILayout.Button("Load texture"))
        {
            SignedDistanceFieldGenerator generator = new SignedDistanceFieldGenerator();
            generator.LoadFromTextureAntiAliased(Resources.Load <Texture2D>("cathires"));
            generator.EikonalSweep();
            generator.Downsample();
            generator.Soften(3);
            field.m_texture = generator.End();
        }

        if (GUILayout.Button("Make noise texture"))
        {
            field.m_noise_texture = new Texture2D(256, 256, TextureFormat.RGBAFloat, false);
            Color[] cols = GenerateNoiseGrid(256, 256, 4, 8f, 2f, 0.5f);
            field.m_noise_texture.SetPixels(cols);
            field.m_noise_texture.Apply();
        }

        serializedObject.ApplyModifiedProperties();
    }