[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