Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Sharybin <sergey.vfx@gmail.com>2013-05-13 17:37:05 +0400
committerSergey Sharybin <sergey.vfx@gmail.com>2013-05-13 17:37:05 +0400
commit682da3ac98603f32deadb7a531f460f62de84e1c (patch)
tree525f5749e146d9500a4ae4295c20ee99d58e8608 /source/blender/blenkernel/intern/tracking.c
parent2914d152411cc1dda353f0806d0f579e9c471730 (diff)
Apply scale on scene reconstruction when applying scale on camera
This means when you've got reconstructed scene assigned to a 3d camera (via camera solver constraint) and applies scale on this camera from Ctrl-A menu, scale will be applied on the reconstructed scene and reset camera size to identity. This is very useful feature for scene orientation, when you'll just scale camera by S in the viewport to match bundles some points in the space, and then you'll easiy make camera have identity scale (which is needed for nice working moblur and other things mentioning by Sebastian :) without loosing scale of bundles themselves. Behavior of apply scale for cameras without clip assigned to them does not change at all.
Diffstat (limited to 'source/blender/blenkernel/intern/tracking.c')
-rw-r--r--source/blender/blenkernel/intern/tracking.c43
1 files changed, 43 insertions, 0 deletions
diff --git a/source/blender/blenkernel/intern/tracking.c b/source/blender/blenkernel/intern/tracking.c
index 7ad74085f85..74507b6d543 100644
--- a/source/blender/blenkernel/intern/tracking.c
+++ b/source/blender/blenkernel/intern/tracking.c
@@ -3353,6 +3353,49 @@ int BKE_tracking_reconstruction_finish(MovieReconstructContext *context, MovieTr
return TRUE;
}
+static void tracking_scale_reconstruction(ListBase *tracksbase, MovieTrackingReconstruction *reconstruction,
+ float scale[3])
+{
+ MovieTrackingTrack *track;
+ int i;
+ float first_camera_delta[3] = {0.0f, 0.0f, 0.0f};
+
+ if (reconstruction->camnr > 0) {
+ mul_v3_v3v3(first_camera_delta, reconstruction->cameras[0].mat[3], scale);
+ }
+
+ for (i = 0; i < reconstruction->camnr; i++) {
+ MovieReconstructedCamera *camera = &reconstruction->cameras[i];
+ mul_v3_v3(camera->mat[3], scale);
+ sub_v3_v3(camera->mat[3], first_camera_delta);
+ }
+
+ for (track = tracksbase->first; track; track = track->next) {
+ if (track->flag & TRACK_HAS_BUNDLE) {
+ mul_v3_v3(track->bundle_pos, scale);
+ sub_v3_v3(track->bundle_pos, first_camera_delta);
+ }
+ }
+}
+
+/* Apply scale on all reconstructed cameras and bundles,
+ * used by camera scale apply operator.
+ */
+void BKE_tracking_reconstruction_scale(MovieTracking *tracking, float scale[3])
+{
+ MovieTrackingObject *object;
+
+ for (object = tracking->objects.first; object; object = object->next) {
+ ListBase *tracksbase;
+ MovieTrackingReconstruction *reconstruction;
+
+ tracksbase = BKE_tracking_object_get_tracks(tracking, object);
+ reconstruction = BKE_tracking_object_get_reconstruction(tracking, object);
+
+ tracking_scale_reconstruction(tracksbase, reconstruction, scale);
+ }
+}
+
/*********************** Feature detection *************************/
/* Check whether point is inside grease pencil stroke. */