Ich versuche, einen Spline mit mehreren Dauern zu machen. Grundsätzlich möchte ich einen Spline erstellen, der durch benutzerdefinierte Keyframes generiert wird. Es kann mehrere Schlüsselbilder mit unterschiedlicher Dauer geben. Also frage ich, wie würde ich eine solche mit unterschiedlichen Geschwindigkeiten durch verschiedene Schlüsselrahmen reisen. Nehmen wir an, ich möchte, dass zwischen Keyframe A und B 1 Sekunde liegt, aber zwischen B und C 5 Sekunden. Ähnlich wie Animations-Editoren wie Source Filmmaker oder Autodesk Maya. Jedes Mal wenn ich gesehen habe, dass jemand einen Spline macht, hat er immer eine konstante Geschwindigkeit. Immer X Sekunden zwischen Schlüsselbildern, aber das ist nicht, wie Animationseditoren arbeiten, da sie unterschiedliche Geschwindigkeiten haben, das ist was ich will.Spline mit mehreren Dauern
Nur um zu bemerken, ich habe es versucht. Ich habe die Dauer geändert, sobald es zu einem anderen Keyframe kommt, aber das verlangsamt es sofort, wie bei einem Slow Motion Movie-Effekt, was ich nicht suche. Übertrage ich die Geschwindigkeit graduell auf die des nächsten Keyframes? Gibt es nur eine Gleichung?
function smooth(points, steps) --points is an array, steps is how many frames inbetween spline points
if #points < 3 then
return points
end
local steps = steps or 5
local spline = {}
local count = #points - 1
local p0, p1, p2, p3, x, y, z
for i = 1, count do
if i == 1 then
p0, p1, p2, p3 = points[i], points[i], points[i + 1], points[i + 2]
elseif i == count then
p0, p1, p2, p3 = points[#points - 2], points[#points - 1], points[#points], points[#points]
else
p0, p1, p2, p3 = points[i - 1], points[i], points[i + 1], points[i + 2]
end
for t = 0, 1, 1/steps do
-- Main spline equation
x = 1 * ((2 * p1.x) + (p2.x - p0.x) * t + (2 * p0.x - 5 * p1.x + 4 * p2.x - p3.x) * t * t + (3 * p1.x - p0.x - 3 * p2.x + p3.x) * t * t * t)
y = 1 * ((2 * p1.y) + (p2.y - p0.y) * t + (2 * p0.y - 5 * p1.y + 4 * p2.y - p3.y) * t * t + (3 * p1.y - p0.y - 3 * p2.y + p3.y) * t * t * t)
z = 1 * ((2 * p1.z) + (p2.z - p0.z) * t + (2 * p0.z - 5 * p1.z + 4 * p2.z - p3.z) * t * t + (3 * p1.z - p0.z - 3 * p2.z + p3.z) * t * t * t)
if not(#spline > 0 and spline[#spline].x == x and spline[#spline].y == y and spline[#spline].z == z) then
table.insert(spline , { x = x , y = y, z = z })
end
end
end
return spline
end
Können Sie das näher erläutern? – TheRoomDiedWithIt
(Sorry für die Verzögerungen, keine wirklich günstige Zeit) Ich benutze Lua, aber diese Frage ist nicht so sprachspezifisch. Ich möchte nur wissen, wie es geht. Wie übertrage ich die Geschwindigkeit? Gibt es eine Gleichung, die die Geschwindigkeit löst? – TheRoomDiedWithIt
(Späte Antwort, Bewegung ist beunruhigend) Nun, ich habe Probleme zu verstehen, was du meinst, kannst du vielleicht deine Antwort als Antwort anstatt als Kommentar posten und ausführlicher machen? – TheRoomDiedWithIt