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.
This commit is contained in:
@@ -1285,8 +1285,10 @@ static int retrieve_libmv_reconstruct_tracks(MovieTracking *tracking, struct lib
|
||||
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) {
|
||||
@@ -1354,12 +1356,13 @@ static int retrieve_libmv_reconstruct_tracks(MovieTracking *tracking, struct lib
|
||||
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 @@ static int retrieve_libmv_reconstruct_tracks(MovieTracking *tracking, struct lib
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user