Ich weiß nicht, ob es einen "richtigen" Weg gibt, aber es handelt sich wahrscheinlich nur um eine ästhetisch ansprechende lineare Transformation, die mit einer Abnahme angewendet wird, die aus der Entfernung zu einem Punkt berechnet wird.
Also für jedes Element, mit dem Sie arbeiten, würden Sie:
- Finde den Abstand zum Zentrum der Kette (d)
- berechne 1 - d / die maximale Entfernung des gewünschten Effekts (i für Intensität)
- klemme das auf [0-1]
- transformiere das Element mit lerp (identity, transform, i)
Iirc, Geometry wars wendete dies als verzerrende Verzerrung auf einige Elemente an, während andere Elemente wie Partikel nur von der "Kraft" beeinflusst wurden, ohne verzerrt zu werden. Sie können die Verzerrung in einem Vertex-Shader anwenden, vorausgesetzt, Sie haben genügend Vertices, um den Effekt reibungslos abzutasten. Alternativ können Sie alles, was Sie brauchen, zuerst in einem Offscreen-Puffer rendern und dann die Ergebnisse in einem schön tessellierten Quad rendern, auf das Sie die Verzerrung anwenden, bevor Sie alle nicht verzerrten Elemente oben hinzufügen.
In Bezug auf die Transformation erhalten Sie durch Skalieren das saugende Aussehen. Wenn ich mich richtig erinnere, gab es auch einige Drehungen, die nur eine kleine Drehung sein würden.
Sie können mit Ihren Berechnungen des Intensitätsfaktors immer ausgefeilter werden, um verrückter wirkende Effekte zu erzielen. Sie können beispielsweise den Winkel (a) berechnen, in dem sich ein Element relativ zum Mittelpunkt befindet, und diesen berücksichtigen. Nehmen Sie cos (a) und Sie können Radialwellen im Effekt erzeugen. Was Sie tun möchten, ist sich mit dem erforderlichen Gerüstcode einzurichten und dann in die Stadt zu fahren, um mit verschiedenen Kombinationen von Faktoren zu experimentieren.