Revision: 38238
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38238
Author:   nazgul
Date:     2011-07-08 17:42:13 +0000 (Fri, 08 Jul 2011)
Log Message:
-----------
Camera tracking integration
===========================

- Made settings for tracking non-animatable.
- Fixed crash when enabling/disabling markers from
  "Specials" menu.
- Translate all coords to make first reconstructed camera
  be at position (0,0,0).
- Blender's camera now affects on reconstructed data.
  Bundles are "parented" to active scene camera. So now
  bundles' could could be scaled and rotated when camera
  is rotating/scaling.

Modified Paths:
--------------
    branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py
    branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h
    branches/soc-2011-tomato/source/blender/blenkernel/intern/constraint.c
    branches/soc-2011-tomato/source/blender/blenkernel/intern/depsgraph.c
    branches/soc-2011-tomato/source/blender/blenkernel/intern/movieclip.c
    branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
    branches/soc-2011-tomato/source/blender/editors/space_clip/clip_intern.h
    branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c
    branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_draw.c
    branches/soc-2011-tomato/source/blender/makesrna/intern/rna_tracking.c

Modified: branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py
===================================================================
--- branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py        
2011-07-08 17:40:29 UTC (rev 38237)
+++ branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py        
2011-07-08 17:42:13 UTC (rev 38238)
@@ -124,6 +124,9 @@
             col.label(text="Reconstruction:")
             col.operator("clip.solve_camera")
             col.operator("clip.clear_reconstruction")
+
+            col = layout.column(align=True)
+            col.label(text="Scene Orientation:")
             col.operator("clip.set_origin")
         else:
             layout.operator('clip.open')

Modified: branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h   
2011-07-08 17:40:29 UTC (rev 38237)
+++ branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h   
2011-07-08 17:42:13 UTC (rev 38238)
@@ -40,6 +40,7 @@
 struct MovieTracking;
 struct MovieTrackingContext;
 struct MovieClipUser;
+struct Scene;
 
 void BKE_tracking_clamp_track(struct MovieTrackingTrack *track, int event);
 void BKE_tracking_track_flag(struct MovieTrackingTrack *track, int area, int 
flag, int clear);
@@ -73,6 +74,8 @@
 
 struct MovieReconstructedCamera *BKE_tracking_get_reconstructed_camera(struct 
MovieTracking *tracking, int framenr);
 
+void BKE_get_tracking_mat(struct Scene *scene, float mat[4][4]);
+
 #define TRACK_SELECTED(track) ((track)->flag&SELECT || 
(track)->pat_flag&SELECT || (track)->search_flag&SELECT)
 #define TRACK_AREA_SELECTED(track, area) 
((area)==TRACK_AREA_POINT?(track)->flag&SELECT : 
((area)==TRACK_AREA_PAT?(track)->pat_flag&SELECT:(track)->search_flag&SELECT))
 

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/constraint.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/constraint.c      
2011-07-08 17:40:29 UTC (rev 38237)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/constraint.c      
2011-07-08 17:42:13 UTC (rev 38238)
@@ -3969,8 +3969,18 @@
                return;
 
        if(data->flag&FOLLOWTRACK_BUNDLE) {
-               if(track->flag&TRACK_HAS_BUNDLE)
-                       translate_m4(cob->matrix, track->bundle_pos[0], 
track->bundle_pos[1], track->bundle_pos[2]);
+               if(track->flag&TRACK_HAS_BUNDLE) {
+                       float pos[3], mat[4][4], obmat[4][4];
+
+                       copy_m4_m4(obmat, cob->matrix);
+
+                       BKE_get_tracking_mat(cob->scene, mat);
+                       mul_v3_m4v3(pos, mat, track->bundle_pos);
+
+                       cob->matrix[3][0]+= pos[0];
+                       cob->matrix[3][1]+= pos[1];
+                       cob->matrix[3][2]+= pos[2];
+               }
        } else {
                user.framenr= scene->r.cfra;
                BKE_movieclip_acquire_size(clip, &user, &width, &height);
@@ -4027,9 +4037,10 @@
                camera= BKE_tracking_get_reconstructed_camera(&clip->tracking, 
scene->r.cfra);
 
                if(camera) {
-                       float m[4][4];
-                       copy_m4_m4(m, cob->matrix);
-                       mul_m4_m4m4(cob->matrix, m, camera->mat);
+                       float obmat[4][4];
+
+                       copy_m4_m4(obmat, cob->matrix);
+                       mul_m4_m4m4(cob->matrix, camera->mat, obmat);
                }
        }
 }

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/depsgraph.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/depsgraph.c       
2011-07-08 17:40:29 UTC (rev 38237)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/depsgraph.c       
2011-07-08 17:42:13 UTC (rev 38238)
@@ -2019,6 +2019,18 @@
                                        flush_pointcache_reset(sce, itA->node, 
lasttime, 0);
                        }
                }
+
+               /* also all objects which are parented to tracking data should 
be re-calculated */
+               for(ob=bmain->object.first; ob; ob= ob->id.next){
+                       bConstraint *con;
+                       for (con = ob->constraints.first; con; con=con->next) {
+                               bConstraintTypeInfo *cti= 
constraint_get_typeinfo(con);
+                               if(ELEM(cti->type, CONSTRAINT_TYPE_FOLLOWTRACK, 
CONSTRAINT_TYPE_CAMERASOLVER)) {
+                                       ob->recalc |= OB_RECALC_OB;
+                                       break;
+                               }
+                       }
+               }
        }
        
        dag_tag_renderlayers(sce, lay);
@@ -2471,6 +2483,13 @@
                        }
                }
 
+               /* camera's matrix is used to orient reconstructed stuff,
+                  so it should happen tracking-related constraints 
recalculation
+                  when camera is changing */
+               if(sce->camera && &sce->camera->id == id && sce->clip) {
+                       dag_id_flush_update(sce, &sce->clip->id);
+               }
+
                /* update editors */
                dag_editors_update(bmain, id);
        }

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/movieclip.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/movieclip.c       
2011-07-08 17:40:29 UTC (rev 38237)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/movieclip.c       
2011-07-08 17:42:13 UTC (rev 38238)
@@ -59,6 +59,7 @@
 #include "BLI_utildefines.h"
 #include "BLI_ghash.h"
 #include "BLI_mempool.h"
+#include "BLI_math.h"
 
 #include "BKE_library.h"
 #include "BKE_global.h"

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c        
2011-07-08 17:40:29 UTC (rev 38237)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c        
2011-07-08 17:42:13 UTC (rev 38238)
@@ -37,15 +37,18 @@
 
 #include "DNA_movieclip_types.h"
 #include "DNA_object_types.h"  /* SELECT */
+#include "DNA_scene_types.h"
 
 #include "BLI_utildefines.h"
 #include "BLI_math.h"
 #include "BLI_listbase.h"
 #include "BLI_ghash.h"
 
+#include "BKE_global.h"
 #include "BKE_tracking.h"
 #include "BKE_movieclip.h"
-#include "BKE_global.h"
+#include "BKE_object.h"
+#include "BKE_scene.h"
 
 #include "IMB_imbuf_types.h"
 #include "IMB_imbuf.h"
@@ -712,11 +715,12 @@
 static void retrive_libmv_reconstruct(MovieClip *clip, struct 
libmv_Reconstruction *reconstruction)
 {
        int tracknr= 0;
-       int sfra= INT_MAX, efra= INT_MIN, a;
+       int sfra= INT_MAX, efra= INT_MIN, a, origin_set= 0;
        MovieTracking *tracking= &clip->tracking;
        MovieTrackingTrack *track;
        MovieTrackingCamera *camera;
        MovieReconstructedCamera *reconstructed;
+       float origin[3]= {0.0f, 0.f, 0.0f};
 
        track= tracking->tracks.first;
        while(track) {
@@ -757,6 +761,14 @@
                float mat[4][4];
 
                if(libmv_reporojectionCameraForImage(reconstruction, a, mat)) {
+                       if(!origin_set) {
+                               copy_v3_v3(origin, mat[3]);
+                               origin_set= 1;
+                       }
+
+                       if(origin_set)
+                               sub_v3_v3(mat[3], origin);
+
                        copy_m4_m4(reconstructed[camera->reconnr].mat, mat);
                        reconstructed[camera->reconnr].framenr= a;
                        camera->reconnr++;
@@ -770,6 +782,16 @@
                memcpy(camera->reconstructed, reconstructed, 
camera->reconnr*sizeof(MovieReconstructedCamera));
        }
 
+       if(origin_set) {
+               track= tracking->tracks.first;
+               while(track) {
+                       if(track->flag&TRACK_HAS_BUNDLE)
+                               sub_v3_v3(track->bundle_pos, origin);
+
+                       track= track->next;
+               }
+       }
+
        MEM_freeN(reconstructed);
 }
 
@@ -825,3 +847,18 @@
 
        return NULL;
 }
+
+void BKE_get_tracking_mat(Scene *scene, float mat[4][4])
+{
+       float obmat[4][4];
+
+       unit_m4(obmat);
+
+       if(!scene->camera)
+               scene->camera= scene_find_camera(scene);
+
+       if(scene->camera)
+               object_to_mat4(scene->camera, obmat);
+
+       copy_m4_m4(mat, obmat);
+}

Modified: 
branches/soc-2011-tomato/source/blender/editors/space_clip/clip_intern.h
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_clip/clip_intern.h    
2011-07-08 17:40:29 UTC (rev 38237)
+++ branches/soc-2011-tomato/source/blender/editors/space_clip/clip_intern.h    
2011-07-08 17:42:13 UTC (rev 38238)
@@ -74,6 +74,7 @@
 void CLIP_OT_clear_track_path(struct wmOperatorType *ot);
 
 void CLIP_OT_disable_markers(struct wmOperatorType *ot);
+
 void CLIP_OT_set_origin(struct wmOperatorType *ot);
 
 void CLIP_OT_track_to_fcurves(struct wmOperatorType *ot);

Modified: 
branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c   
2011-07-08 17:40:29 UTC (rev 38237)
+++ branches/soc-2011-tomato/source/blender/editors/space_clip/tracking_ops.c   
2011-07-08 17:42:13 UTC (rev 38238)
@@ -47,6 +47,7 @@
 #include "BKE_global.h"
 #include "BKE_animsys.h"
 #include "BKE_depsgraph.h"
+#include "BKE_scene.h"
 
 #include "WM_api.h"
 #include "WM_types.h"
@@ -483,7 +484,7 @@
        /* api callbacks */
        ot->exec= select_exec;
        ot->invoke= select_invoke;
-       ot->poll= space_clip_frame_poll;
+       ot->poll= space_clip_tracking_poll;
 
        /* flags */
        ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -554,7 +555,7 @@
        ot->invoke= WM_border_select_invoke;
        ot->exec= border_select_exec;
        ot->modal= WM_border_select_modal;
-       ot->poll= space_clip_frame_poll;
+       ot->poll= space_clip_tracking_poll;
 
        /* flags */
        ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -637,7 +638,7 @@
        ot->invoke= WM_gesture_circle_invoke;
        ot->modal= WM_gesture_circle_modal;
        ot->exec= circle_select_exec;
-       ot->poll= space_clip_frame_poll;
+       ot->poll= space_clip_tracking_poll;
 
        /* flags */
        ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -719,7 +720,7 @@
 
        /* api callbacks */
        ot->exec= select_all_exec;
-       ot->poll= space_clip_frame_poll;
+       ot->poll= space_clip_tracking_poll;
 
        /* flags */
        ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -1018,7 +1019,7 @@
 
        /* api callbacks */
        ot->exec= solve_camera_exec;
-       ot->poll= space_clip_frame_poll;
+       ot->poll= space_clip_tracking_poll;
 
        /* flags */
        ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -1062,7 +1063,7 @@
 
        /* api callbacks */
        ot->exec= clear_reconstruction_exec;
-       ot->poll= space_clip_frame_poll;
+       ot->poll= space_clip_tracking_poll;
 
        /* flags */
        ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -1145,7 +1146,7 @@
 
        while(track) {
                if(TRACK_SELECTED(track)) {
-                       MovieTrackingMarker *marker= 
BKE_tracking_exact_marker(track, sc->user.framenr);
+                       MovieTrackingMarker *marker= 
BKE_tracking_ensure_marker(track, sc->user.framenr);
 
                        if(action==0) marker->flag|= MARKER_DISABLED;
                        else if(action==1) marker->flag&= ~MARKER_DISABLED;
@@ -1178,7 +1179,7 @@
 
        /* api callbacks */
        ot->exec= disable_markers_exec;
-       ot->poll= space_clip_frame_poll;
+       ot->poll= space_clip_tracking_poll;
 
        /* flags */
        ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
@@ -1193,31 +1194,24 @@
 {
        SpaceClip *sc= CTX_wm_space_clip(C);

@@ Diff output truncated at 10240 characters. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to