Mercurial > repos > public > sbplib
changeset 133:43f8df3595cf
Prepared for dynamic workload in animation.
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Fri, 05 Feb 2016 11:29:19 +0100 |
parents | 6ec2248b83c4 |
children | 08d7bb7c8ac4 |
files | +anim/animate.m |
diffstat | 1 files changed, 21 insertions(+), 12 deletions(-) [+] |
line wrap: on
line diff
--- a/+anim/animate.m Fri Feb 05 10:49:16 2016 +0100 +++ b/+anim/animate.m Fri Feb 05 11:29:19 2016 +0100 @@ -19,38 +19,47 @@ dTau_target = 1/target_frame_rate; % Real time between frames rs = util.ReplaceableString(); - rs.appendFormat(' tau: %d\n'); - rs.appendFormat(' target tau: %d\n'); - rs.appendFormat(' Target fps: %.2f\n'); - rs.appendFormat(' Actual fps: %.2f\n'); - - frameId = 0; - NframeAvg = 20; - frameTimes = ones(1,NframeAvg); + rs.appendFormat(' tau: %d\n'); + rs.appendFormat(' target tau: %d\n'); + rs.appendFormat(' Target fps: %.2f\n'); + rs.appendFormat(' Actual fps: %.2f\n'); + rs.appendFormat('Target time_modifier: %d\n'); + rs.appendFormat('actual time_modifier: %d\n'); animation_start = tic(); prevTau = 0; targetTau = 0; + tauFrameStart = -dTau_target; t = F(tstart); while t < tend % Sleep until the frame should start pause(targetTau-toc(animation_start)); - tauFrameStart = targetTau; + tau = toc(animation_start); + dTau = tau - tauFrameStart; + + % Calculate error in tau + e_Tau = tau - targetTau; + + % Regulate time_modifier based on e_Tau + % time_modifier = min(time_modifier_bound, max(0.5, abs(1-e_Tau/dTau)) * time_modifier); + + % Mark the start of the frame + tauFrameStart = tau; dt_target = dTau_target*time_modifier; % Targeted simulation time between frames t_prev = t; t = F(t + dt_target); % Run simulation - % Calculate when this frame should end and the next start. (this depends on what simulation time we ended up on) dt = t-t_prev; - targetTau = targetTau + dt/time_modifier; + % targetTau = targetTau + dt/time_modifier; + targetTau = targetTau + dTau_target; % Update information about this frame tau = toc(animation_start); - rs.updateParam(tau, targetTau, 1/dTau_target, 1/(targetTau-tauFrameStart)); + rs.updateParam(tau, targetTau, 1/dTau_target, 1/dTau, time_modifier_bound, time_modifier); end