[Bf-blender-cvs] [8e16c52] master: Fix T42585: Mask motion blur is wrong when parented to plane track

Sergey Sharybin noreply at git.blender.org
Tue Nov 18 15:29:17 CET 2014


Commit: 8e16c5294bf2b6b6c72ec9c6a2b8dcc9b79c4acd
Author: Sergey Sharybin
Date:   Tue Nov 18 15:29:03 2014 +0100
Branches: master
https://developer.blender.org/rB8e16c5294bf2b6b6c72ec9c6a2b8dcc9b79c4acd

Fix T42585: Mask motion blur is wrong when parented to plane track

it wasn't wrong, it wasn't implemented.

===================================================================

M	source/blender/blenkernel/BKE_tracking.h
M	source/blender/blenkernel/intern/mask.c
M	source/blender/blenkernel/intern/tracking.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_tracking.h b/source/blender/blenkernel/BKE_tracking.h
index 5f5cb4c..e5fb60c 100644
--- a/source/blender/blenkernel/BKE_tracking.h
+++ b/source/blender/blenkernel/BKE_tracking.h
@@ -145,6 +145,9 @@ void BKE_tracking_plane_marker_delete(struct MovieTrackingPlaneTrack *plane_trac
 struct MovieTrackingPlaneMarker *BKE_tracking_plane_marker_get(struct MovieTrackingPlaneTrack *plane_track, int framenr);
 struct MovieTrackingPlaneMarker *BKE_tracking_plane_marker_get_exact(struct MovieTrackingPlaneTrack *plane_track, int framenr);
 struct MovieTrackingPlaneMarker *BKE_tracking_plane_marker_ensure(struct MovieTrackingPlaneTrack *plane_track, int framenr);
+void BKE_tracking_plane_marker_get_subframe_corners(struct MovieTrackingPlaneTrack *plane_track,
+                                                    float framenr,
+                                                    float corners[4][2]);
 
 /* **** Object **** */
 struct MovieTrackingObject *BKE_tracking_object_add(struct MovieTracking *tracking, const char *name);
diff --git a/source/blender/blenkernel/intern/mask.c b/source/blender/blenkernel/intern/mask.c
index b05634f..37d1093 100644
--- a/source/blender/blenkernel/intern/mask.c
+++ b/source/blender/blenkernel/intern/mask.c
@@ -1187,11 +1187,12 @@ void BKE_mask_point_parent_matrix_get(MaskSplinePoint *point, float ctime, float
 					MovieTrackingPlaneTrack *plane_track = BKE_tracking_plane_track_get_named(tracking, ob, parent->sub_parent);
 
 					if (plane_track) {
-						MovieTrackingPlaneMarker *plane_marker = BKE_tracking_plane_marker_get(plane_track, clip_framenr);
+						float corners[4][2];
 						float aspx, aspy;
 						float frame_size[2], H[3][3], mask_from_clip_matrix[3][3], mask_to_clip_matrix[3][3];
 
-						BKE_tracking_homography_between_two_quads(parent->parent_corners_orig, plane_marker->corners, H);
+						BKE_tracking_plane_marker_get_subframe_corners(plane_track, ctime, corners);
+						BKE_tracking_homography_between_two_quads(parent->parent_corners_orig, corners, H);
 
 						unit_m3(mask_from_clip_matrix);
 
diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c
index 1613b0c..d580c18 100644
--- a/source/blender/blenkernel/intern/tracking.c
+++ b/source/blender/blenkernel/intern/tracking.c
@@ -1456,6 +1456,35 @@ MovieTrackingPlaneMarker *BKE_tracking_plane_marker_ensure(MovieTrackingPlaneTra
 	return plane_marker;
 }
 
+void BKE_tracking_plane_marker_get_subframe_corners(MovieTrackingPlaneTrack *plane_track,
+                                                    float framenr,
+                                                    float corners[4][2])
+{
+	MovieTrackingPlaneMarker *marker = BKE_tracking_plane_marker_get(plane_track, (int)framenr);
+	MovieTrackingPlaneMarker *marker_last = plane_track->markers + (plane_track->markersnr - 1);
+	int i;
+	if (marker != marker_last) {
+		MovieTrackingPlaneMarker *marker_next = marker + 1;
+		if (marker_next->framenr == marker->framenr + 1) {
+			float fac = (framenr - (int) framenr) / (marker_next->framenr - marker->framenr);
+			for (i = 0; i < 4; ++i) {
+				interp_v2_v2v2(corners[i], marker->corners[i],
+				               marker_next->corners[i], fac);
+			}
+		}
+		else {
+			for (i = 0; i < 4; ++i) {
+				copy_v2_v2(corners[i], marker->corners[i]);
+			}
+		}
+	}
+	else {
+		for (i = 0; i < 4; ++i) {
+			copy_v2_v2(corners[i], marker->corners[i]);
+		}
+	}
+}
+
 /*********************** Object *************************/
 
 MovieTrackingObject *BKE_tracking_object_add(MovieTracking *tracking, const char *name)




More information about the Bf-blender-cvs mailing list