diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-07-13 19:17:07 +0300 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2015-07-13 19:17:46 +0300 |
commit | 6f7926c61c94ea9bd2969ebfcc7e09994ffe901d (patch) | |
tree | 742e90213eb15a0cb5297775db0b173c632b56cb /source/blender | |
parent | dd44754c5ff3b2f200f5bb256ac9868eb43a65f6 (diff) |
Fix T45394: Motion tracking constraints did not work with Cycles motion blur
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/blenkernel/BKE_tracking.h | 2 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/constraint.c | 18 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/tracking.c | 8 |
3 files changed, 13 insertions, 15 deletions
diff --git a/source/blender/blenkernel/BKE_tracking.h b/source/blender/blenkernel/BKE_tracking.h index b03a234e1e7..264bf2bd8fa 100644 --- a/source/blender/blenkernel/BKE_tracking.h +++ b/source/blender/blenkernel/BKE_tracking.h @@ -189,7 +189,7 @@ struct MovieReconstructedCamera *BKE_tracking_camera_get_reconstructed(struct Mo int framenr); void BKE_tracking_camera_get_reconstructed_interpolate(struct MovieTracking *tracking, struct MovieTrackingObject *object, - int framenr, float mat[4][4]); + float framenr, float mat[4][4]); /* **** Distortion/Undistortion **** */ struct MovieDistortion *BKE_tracking_distortion_new(struct MovieTracking *tracking, diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index fa8ab14de06..4f086437c50 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -76,6 +76,7 @@ #include "BKE_idprop.h" #include "BKE_shrinkwrap.h" #include "BKE_editmesh.h" +#include "BKE_scene.h" #include "BKE_tracking.h" #include "BKE_movieclip.h" @@ -3923,7 +3924,8 @@ static void followtrack_evaluate(bConstraint *con, bConstraintOb *cob, ListBase MovieTrackingTrack *track; MovieTrackingObject *tracking_object; Object *camob = data->camera ? data->camera : scene->camera; - int framenr; + float ctime = BKE_scene_frame_get(scene); + float framenr; if (data->flag & FOLLOWTRACK_ACTIVECLIP) clip = scene->clip; @@ -3946,7 +3948,7 @@ static void followtrack_evaluate(bConstraint *con, bConstraintOb *cob, ListBase if (!track) return; - framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, scene->r.cfra); + framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, ctime); if (data->flag & FOLLOWTRACK_USE_3D_POSITION) { if (track->flag & TRACK_HAS_BUNDLE) { @@ -3974,7 +3976,6 @@ static void followtrack_evaluate(bConstraint *con, bConstraintOb *cob, ListBase } } else { - MovieTrackingMarker *marker; float vec[3], disp[3], axis[3], mat[4][4]; float aspect = (scene->r.xsch * scene->r.xasp) / (scene->r.ysch * scene->r.yasp); float len, d; @@ -4000,10 +4001,7 @@ static void followtrack_evaluate(bConstraint *con, bConstraintOb *cob, ListBase float pos[2], rmat[4][4]; BKE_movieclip_get_size(clip, NULL, &width, &height); - - marker = BKE_tracking_marker_get(track, framenr); - - add_v2_v2v2(pos, marker->pos, track->offset); + BKE_tracking_marker_get_subframe_position(track, framenr, pos); if (data->flag & FOLLOWTRACK_USE_UNDISTORTION) { /* Undistortion need to happen in pixel space. */ @@ -4173,7 +4171,8 @@ static void camerasolver_evaluate(bConstraint *con, bConstraintOb *cob, ListBase float mat[4][4], obmat[4][4]; MovieTracking *tracking = &clip->tracking; MovieTrackingObject *object = BKE_tracking_object_get_camera(tracking); - int framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, scene->r.cfra); + float ctime = BKE_scene_frame_get(scene); + float framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, ctime); BKE_tracking_camera_get_reconstructed_interpolate(tracking, object, framenr, mat); @@ -4238,7 +4237,8 @@ static void objectsolver_evaluate(bConstraint *con, bConstraintOb *cob, ListBase if (object) { float mat[4][4], obmat[4][4], imat[4][4], cammat[4][4], camimat[4][4], parmat[4][4]; - int framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, scene->r.cfra); + float ctime = BKE_scene_frame_get(scene); + float framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, ctime); BKE_object_where_is_calc_mat4(scene, camob, cammat); diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c index f9ae987db70..c5ccaa63992 100644 --- a/source/blender/blenkernel/intern/tracking.c +++ b/source/blender/blenkernel/intern/tracking.c @@ -1822,7 +1822,7 @@ MovieReconstructedCamera *BKE_tracking_camera_get_reconstructed(MovieTracking *t } void BKE_tracking_camera_get_reconstructed_interpolate(MovieTracking *tracking, MovieTrackingObject *object, - int framenr, float mat[4][4]) + float framenr, float mat[4][4]) { MovieTrackingReconstruction *reconstruction; MovieReconstructedCamera *cameras; @@ -1830,17 +1830,15 @@ void BKE_tracking_camera_get_reconstructed_interpolate(MovieTracking *tracking, reconstruction = BKE_tracking_object_get_reconstruction(tracking, object); cameras = reconstruction->cameras; - a = reconstructed_camera_index_get(reconstruction, framenr, true); + a = reconstructed_camera_index_get(reconstruction, (int)framenr, true); if (a == -1) { unit_m4(mat); - return; } - if (cameras[a].framenr != framenr && a > 0 && a < reconstruction->camnr - 1) { + if (cameras[a].framenr != framenr && a < reconstruction->camnr - 1) { float t = ((float)framenr - cameras[a].framenr) / (cameras[a + 1].framenr - cameras[a].framenr); - blend_m4_m4m4(mat, cameras[a].mat, cameras[a + 1].mat, t); } else { |