示例#1
0
    public IEnumerator ApplyPositionalModifierAsync(Vector3 worldPosition, VPaintObjectPositionalModifier modifier, float time)
    {
        Mesh m = GetMeshInstance();

        Vector3[] vertices = myVertices;
        Color[]   colors   = myColors;
        if (colors == null)
        {
            colors = m.colors;
        }

        var len = vertices.Length;

        Color[] target = new Color[len];
        for (int i = 0; i < len; i++)
        {
            Vector3 v        = transform.TransformPoint(vertices[i]);
            float   distance = Vector3.Distance(v, worldPosition);
            target[i] = modifier(colors[i], distance);
        }

        var routine = VPaintUtility.LerpColors(this, colors, target, time);

        while (routine.MoveNext())
        {
            yield return(null);
        }
    }
示例#2
0
    public void ApplyPositionalModifier(Vector3 worldPosition, VPaintObjectPositionalModifier modifier)
    {
        Mesh m = GetMeshInstance();

        Vector3[] vertices = myVertices;
        Color[]   colors   = myColors;
        if (colors == null)
        {
            colors = m.colors;
        }

        var len = vertices.Length;

        for (int i = 0; i < len; i++)
        {
            Vector3 v        = transform.TransformPoint(vertices[i]);
            float   distance = Vector3.Distance(v, worldPosition);
            colors[i] = modifier(colors[i], distance);
        }

        m.colors = colors;
        myColors = colors;
    }