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)); }
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)); }
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); }
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)); }