public override Vector3 Map(int i, Vector3 p)
    {
        p = tm.MultiplyPoint3x4(p);
        float a;

        if (amp != amp2)
        {
            float len = p.magnitude;
            if (len == 0.0f)
            {
                a = amp;
            }
            else
            {
                float u = (Mathf.Acos(p.x / len)) / Mathf.PI;
                u  = (u > 0.5f) ? (1.0f - u) : u;
                u *= 2.0f;
                u  = Mathf.SmoothStep(0.0f, 1.0f, u);
                a  = amp * (1.0f - u) + amp2 * u;
            }
        }
        else
        {
            a = amp;
        }

        float oldZ = p.y;

        p.y = 0.0f;
        float r = p.magnitude;

        p.y = oldZ + flex * MegaUtils.WaveFunc(r, time, a, wave, phase, dy);
        return(invtm.MultiplyPoint3x4(p));
    }
예제 #2
0
    public override Vector3 Map(int i, Vector3 p)
    {
        p = tm.MultiplyPoint3x4(p);

        float u = Mathf.Abs(2.0f * p.x / dist);

        u    = u * u;
        p.z += flex * MegaUtils.WaveFunc(p.y, time, amp * (1.0f - u) + amp2 * u, wave, phase, dy);
        return(invtm.MultiplyPoint3x4(p));
    }
예제 #3
0
    void BuildMesh(float t)
    {
        Vector3 pos  = Vector3.zero;
        Vector3 last = Vector3.zero;

        float Dy     = wave / (float)divs;
        float Dx     = Dy * 4;
        int   den    = (int)(Dx * numSides * 0.5f);
        float starty = -(float)numSegs / 2.0f * Dy;
        float startx = -(float)numSides / 2.0f * Dx;

        Gizmos.color = gCol1;

        for (int i = 0; i <= numSides; i++)
        {
            pos.x = startx + Dx * (float)i;
            float u = Mathf.Abs(pos.x / ((den != 0) ? den : 0.00001f));
            u = u * u;

            for (int j = 0; j <= numSegs; j++)
            {
                pos.y = starty + (float)j * Dy;
                pos.z = MegaUtils.WaveFunc(pos.y, t, amp * (1.0f - u) + amp2 * u, wave, phase, Decay / 1000.0f);

                if (j > 0)
                {
                    Gizmos.DrawLine(last, pos);
                }

                last = pos;
            }
        }

        Gizmos.color = gCol2;

        for (int j = 0; j <= numSegs; j++)
        {
            pos.y = starty + (float)j * Dy;

            for (int i = 0; i <= numSides; i++)
            {
                pos.x = startx + Dx * (float)i;
                float u = Mathf.Abs(pos.x / ((den != 0) ? den : 0.00001f));
                u     = u * u;
                pos.z = MegaUtils.WaveFunc(pos.y, t, amp * (1.0f - u) + amp2 * u, wave, phase, Decay / 1000.0f);

                if (i > 0)
                {
                    Gizmos.DrawLine(last, pos);
                }

                last = pos;
            }
        }
    }
    Vector3 GetPos(float u, float radius)
    {
        Vector3 pos = Vector3.zero;

        pos.x = radius * Mathf.Cos(u * Mathf.PI * 2.0f);
        pos.z = radius * Mathf.Sin(u * Mathf.PI * 2.0f);

        float u2 = (u > 0.5f) ? (u - 0.5f) : u;

        u2    = (u2 > 0.25f) ? (0.5f - u2) : u2;
        u2    = u2 * 4.0f;
        u2    = u2 * u2;
        pos.y = MegaUtils.WaveFunc(radius, t, amp * (1.0f - u2) + amp2 * u2, wave, phase, dy);

        return(pos);
    }
예제 #5
0
    public override Vector3 Map(int i, Vector3 p)
    {
        p = tm.MultiplyPoint3x4(p);

        Vector3 ip   = p;
        float   dist = p.magnitude;
        float   dcy  = Mathf.Exp(-totaldecay * Mathf.Abs(dist));

        float u = Mathf.Abs(2.0f * p.x / dist);

        u    = u * u;
        p.z += flex * MegaUtils.WaveFunc(p.y, time, amp * (1.0f - u) + amp2 * u, wave, phase, dy);

        p = Vector3.Lerp(ip, p, dcy);

        return(invtm.MultiplyPoint3x4(p));
    }