17.03.2025, 02:03 PM
Hallo Guther,
also wenn ich das Ziel richtig verstehe, sollen unter der Kurve "animiert" kleinere Amplituden durchlaufen und sich praktisch am jeweiligen Punkt der X-Achse am Maximum der "großen" Amplitude orientieren
Die "update_amplitude"-Funktion weiß nach meiner Einschätzung nach nicht, wo/in welchem Frame "wir" gerade sind. Also müsste noch Frame und mu übergeben werden?! und dann die 1.001-Punkte neu abgespeichert (also nicht wirklich nur die Location)
Beachte (Wertübergabe):
frame=0
und ganz unten
point.keyframe_insert("co", frame=frame)
bei keyframe_insert "nur" die "location" zu verwenden wirft die y-Werte über den Haufen, deswegen "co" verwenden, dann werden die individuellen Punkt-Standorte berücksichtigt. Location beschreibt einfach nur wo sich das Objekt befindet. Also müsstest du oben noch irgendwie point.co.x = "k.A." reinstricken.
Ach' so, und ganz unten hatte ich noch etwas angepasst:
Gruß Hobbyblenderer
also wenn ich das Ziel richtig verstehe, sollen unter der Kurve "animiert" kleinere Amplituden durchlaufen und sich praktisch am jeweiligen Punkt der X-Achse am Maximum der "großen" Amplitude orientieren
Die "update_amplitude"-Funktion weiß nach meiner Einschätzung nach nicht, wo/in welchem Frame "wir" gerade sind. Also müsste noch Frame und mu übergeben werden?! und dann die 1.001-Punkte neu abgespeichert (also nicht wirklich nur die Location)
Code:
def update_amplitude(curve_object, A_new, x=0.0, sigma=.05, frame=0):
spline = curve_object.data.splines[0]
for point in spline.points:
x = point.co.x
y = A_new * math.exp(-(x)**2 / (2 * sigma**2))
point.co.y = y
#NEU:
point.keyframe_insert("co", frame=frame)
Beachte (Wertübergabe):
frame=0
und ganz unten
point.keyframe_insert("co", frame=frame)
bei keyframe_insert "nur" die "location" zu verwenden wirft die y-Werte über den Haufen, deswegen "co" verwenden, dann werden die individuellen Punkt-Standorte berücksichtigt. Location beschreibt einfach nur wo sich das Objekt befindet. Also müsstest du oben noch irgendwie point.co.x = "k.A." reinstricken.
Ach' so, und ganz unten hatte ich noch etwas angepasst:
Code:
for frame in range(120, 151):
for curve_object in curve_objects[0:1]:
x = 0+frame/150/2
A_new = A_main * math.exp(-(x)**2 / (2 * sigma_main**2))
print(A_new)
update_amplitude(curve_object, A_new, x, 0.05, frame)
#ALT
#curve_object.location.x = x
#curve_object.keyframe_insert(data_path="location", frame=frame)
Gruß Hobbyblenderer
