Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2011-12-16 00:38:45 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2011-12-16 00:38:45 +0400
commitb1111bafa14b0b7ca7f2e3ee839893f18db75c54 (patch)
tree58230bd5aa2452eb488cb6c593a9b31253766c53 /source/blender/blenkernel/intern/constraint.c
parent8a9d901c81b0357bca833f3ccb2d4f674873e58d (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.c24
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 {