[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [42655] branches/soc-2011-tomato/source/ blender/blenkernel/intern/constraint.c: Camera tracking: follow track + 3d position now respects camera orientation and object offset

Sergey Sharybin sergey.vfx at gmail.com
Thu Dec 15 21:38:47 CET 2011


Revision: 42655
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=42655
Author:   nazgul
Date:     2011-12-15 20:38:45 +0000 (Thu, 15 Dec 2011)
Log Message:
-----------
Camera tracking: follow track + 3d position now respects camera orientation and object offset

Modified Paths:
--------------
    branches/soc-2011-tomato/source/blender/blenkernel/intern/constraint.c

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/constraint.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/constraint.c	2011-12-15 20:38:23 UTC (rev 42654)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/constraint.c	2011-12-15 20:38:45 UTC (rev 42655)
@@ -3974,27 +3974,27 @@
 	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_m4_m4m4(cob->matrix, mat, obmat);
+				translate_m4(cob->matrix, track->bundle_pos[0], track->bundle_pos[1], track->bundle_pos[2]);
 			}
-
-			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];
 		}
 	} 
 	else {




More information about the Bf-blender-cvs mailing list