diff options
author | Sergey Sharybin <sergey.vfx@gmail.com> | 2011-12-16 00:38:45 +0400 |
---|---|---|
committer | Sergey Sharybin <sergey.vfx@gmail.com> | 2011-12-16 00:38:45 +0400 |
commit | b1111bafa14b0b7ca7f2e3ee839893f18db75c54 (patch) | |
tree | 58230bd5aa2452eb488cb6c593a9b31253766c53 /source/blender/blenkernel/intern/constraint.c | |
parent | 8a9d901c81b0357bca833f3ccb2d4f674873e58d (diff) |
Camera tracking: follow track + 3d position now respects camera orientation and object offset
Diffstat (limited to 'source/blender/blenkernel/intern/constraint.c')
-rw-r--r-- | source/blender/blenkernel/intern/constraint.c | 24 |
1 files changed, 12 insertions, 12 deletions
diff --git a/source/blender/blenkernel/intern/constraint.c b/source/blender/blenkernel/intern/constraint.c index 2e9934806b8..4f4485fadee 100644 --- a/source/blender/blenkernel/intern/constraint.c +++ b/source/blender/blenkernel/intern/constraint.c @@ -3974,27 +3974,27 @@ static void followtrack_evaluate (bConstraint *con, bConstraintOb *cob, ListBase if (data->flag & FOLLOWTRACK_USE_3D_POSITION) { if (track->flag & TRACK_HAS_BUNDLE) { MovieTracking *tracking= &clip->tracking; - float pos[3], mat[4][4]; + float obmat[4][4], mat[4][4]; + + copy_m4_m4(obmat, cob->matrix); if((tracking_object->flag&TRACKING_OBJECT_CAMERA)==0) { - float obmat[4][4], imat[4][4]; + float imat[4][4]; copy_m4_m4(mat, camob->obmat); - BKE_tracking_get_interpolated_camera(tracking, tracking_object, scene->r.cfra, obmat); + BKE_tracking_get_interpolated_camera(tracking, tracking_object, scene->r.cfra, imat); + invert_m4(imat); - invert_m4_m4(imat, obmat); - mul_m4_m4m4(mat, imat, mat); + mul_serie_m4(cob->matrix, obmat, mat, imat, NULL, NULL, NULL, NULL, NULL); + translate_m4(cob->matrix, track->bundle_pos[0], track->bundle_pos[1], track->bundle_pos[2]); } else { - BKE_get_tracking_mat(cob->scene, NULL, mat); - } + BKE_get_tracking_mat(cob->scene, camob, mat); - mul_v3_m4v3(pos, mat, track->bundle_pos); - - cob->matrix[3][0] = pos[0]; - cob->matrix[3][1] = pos[1]; - cob->matrix[3][2] = pos[2]; + mul_m4_m4m4(cob->matrix, mat, obmat); + translate_m4(cob->matrix, track->bundle_pos[0], track->bundle_pos[1], track->bundle_pos[2]); + } } } else { |