[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41966] trunk/blender/source/blender/ blenkernel/intern/tracking.c: Camera tracking: multiply all camera matrices by inverted first reconstructed camera matrix

Sergey Sharybin sergey.vfx at gmail.com
Fri Nov 18 15:42:18 CET 2011


Revision: 41966
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41966
Author:   nazgul
Date:     2011-11-18 14:42:18 +0000 (Fri, 18 Nov 2011)
Log Message:
-----------
Camera tracking: multiply all camera matrices by inverted first reconstructed camera matrix

This makes blender camera:
- Be located on exactly the same position at first frame after applying
  Camera Solver constraint
- Be looking in exactly the same direction it used to look before
  applying Camera Solver constraint

Before this patch in most of cases camera used to change direction
after applying solved data on it which can be confusing in some cases.

Currently solved files wouldn't be broken, but after solve scene should
be re-oriented. Not big deal because re-solving isn't so safe for scene
orientation anyway.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/tracking.c

Modified: trunk/blender/source/blender/blenkernel/intern/tracking.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/tracking.c	2011-11-18 14:28:45 UTC (rev 41965)
+++ trunk/blender/source/blender/blenkernel/intern/tracking.c	2011-11-18 14:42:18 UTC (rev 41966)
@@ -1285,9 +1285,11 @@
 	MovieTrackingTrack *track;
 	MovieTrackingReconstruction *reconstruction= &tracking->reconstruction;
 	MovieReconstructedCamera *reconstructed;
-	float origin[3]= {0.0f, 0.0f, 0.0f};
 	int ok= 1;
+	float imat[4][4];
 
+	unit_m4(imat);
+
 	track= tracking->tracks.first;
 	while(track) {
 		double pos[3];
@@ -1354,12 +1356,13 @@
 					mat[i][j]= matd[i][j];
 
 			if(!origin_set) {
-				copy_v3_v3(origin, mat[3]);
+				copy_m4_m4(imat, mat);
+				invert_m4(imat);
 				origin_set= 1;
 			}
 
 			if(origin_set)
-				sub_v3_v3(mat[3], origin);
+				mul_m4_m4m4(mat, mat, imat);
 
 			copy_m4_m4(reconstructed[reconstruction->camnr].mat, mat);
 			reconstructed[reconstruction->camnr].framenr= a;
@@ -1380,7 +1383,7 @@
 		track= tracking->tracks.first;
 		while(track) {
 			if(track->flag&TRACK_HAS_BUNDLE)
-				sub_v3_v3(track->bundle_pos, origin);
+				mul_v3_m4v3(track->bundle_pos, imat, track->bundle_pos);
 
 			track= track->next;
 		}




More information about the Bf-blender-cvs mailing list