Revision: 38518
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=38518
Author:   nazgul
Date:     2011-07-19 20:22:03 +0000 (Tue, 19 Jul 2011)
Log Message:
-----------
Camera tracking integration
===========================

- Selected bundles are now highlighted with outline.
  It looks more Blender-way of highlighting selected items.
- Added option to show bundles names in 3D viewport.
- Bundles now coudl be selected from 3D viewport.

Modified Paths:
--------------
    branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_view3d.py
    branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h
    branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
    branches/soc-2011-tomato/source/blender/editors/space_view3d/drawobject.c
    branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_draw.c
    branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_intern.h
    branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_select.c
    branches/soc-2011-tomato/source/blender/makesdna/DNA_view3d_types.h
    branches/soc-2011-tomato/source/blender/makesrna/intern/rna_space.c

Modified: branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_view3d.py
===================================================================
--- branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_view3d.py      
2011-07-19 20:19:45 UTC (rev 38517)
+++ branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_view3d.py      
2011-07-19 20:22:03 UTC (rev 38518)
@@ -2184,6 +2184,7 @@
         sub = layout.column()
         sub.active = view.show_reconstruction
         sub.prop(view, "bundle_size")
+        sub.prop(view, "show_bundle_name")
         sub.prop(view, "show_camera_path")
 
         layout.separator()

Modified: branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h   
2011-07-19 20:19:45 UTC (rev 38517)
+++ branches/soc-2011-tomato/source/blender/blenkernel/BKE_tracking.h   
2011-07-19 20:22:03 UTC (rev 38518)
@@ -82,6 +82,8 @@
 
 void BKE_tracking_detect(struct MovieTracking *tracking, struct ImBuf *imbuf, 
int framenr);
 
+struct MovieTrackingTrack *BKE_tracking_indexed_bundle(struct MovieTracking 
*tracking, int bundlenr);
+
 #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))
 #define TRACK_VIEW_SELECTED(track)                     
((track->flag&TRACK_HIDDEN)==0 && TRACK_SELECTED(track))

Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c        
2011-07-19 20:19:45 UTC (rev 38517)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c        
2011-07-19 20:22:03 UTC (rev 38518)
@@ -1030,3 +1030,22 @@
        libmv_destroyCorners(corners);
 #endif
 }
+
+MovieTrackingTrack *BKE_tracking_indexed_bundle(MovieTracking *tracking, int 
bundlenr)
+{
+       MovieTrackingTrack *track= tracking->tracks.first;
+       int cur= 1;
+
+       while(track) {
+               if(track->flag&TRACK_HAS_BUNDLE) {
+                       if(cur==bundlenr)
+                               return track;
+
+                       cur++;
+               }
+
+               track= track->next;
+       }
+
+       return NULL;
+}

Modified: 
branches/soc-2011-tomato/source/blender/editors/space_view3d/drawobject.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_view3d/drawobject.c   
2011-07-19 20:19:45 UTC (rev 38517)
+++ branches/soc-2011-tomato/source/blender/editors/space_view3d/drawobject.c   
2011-07-19 20:22:03 UTC (rev 38518)
@@ -74,6 +74,8 @@
 #include "BKE_particle.h"
 #include "BKE_pointcache.h"
 #include "BKE_unit.h"
+#include "BKE_movieclip.h"
+#include "BKE_tracking.h"
 
 #include "smoke_API.h"
 
@@ -200,6 +202,40 @@
        }
 }
 
+/* same as view3d_project_short_clip but use persmat instead of persmatob for 
projection */
+static void view3d_project_short_clip_persmat(ARegion *ar, float *vec, short 
*adr, int local)
+{
+       RegionView3D *rv3d= ar->regiondata;
+       float fx, fy, vec4[4];
+
+       adr[0]= IS_CLIPPED;
+
+       /* clipplanes in eye space */
+       if(rv3d->rflag & RV3D_CLIPPING) {
+               if(ED_view3d_test_clipping(rv3d, vec, local))
+                       return;
+       }
+
+       copy_v3_v3(vec4, vec);
+       vec4[3]= 1.0;
+
+       mul_m4_v4(rv3d->persmat, vec4);
+
+       /* clipplanes in window space */
+       if( vec4[3] > (float)BL_NEAR_CLIP ) {   /* is the NEAR clipping cutoff 
for picking */
+               fx= (ar->winx/2)*(1 + vec4[0]/vec4[3]);
+
+               if( fx>0 && fx<ar->winx) {
+
+                       fy= (ar->winy/2)*(1 + vec4[1]/vec4[3]);
+
+                       if(fy > 0.0f && fy < (float)ar->winy) {
+                               adr[0]= (short)floorf(fx);
+                               adr[1]= (short)floorf(fy);
+                       }
+               }
+       }
+}
 /* ************************ */
 
 /* check for glsl drawing */
@@ -708,7 +744,12 @@
        for(vos= strings->first; vos; vos= vos->next) {
                if(mat && !(vos->flag & V3D_CACHE_TEXT_WORLDSPACE))
                        mul_m4_v3(mat, vos->vec);
-               view3d_project_short_clip(ar, vos->vec, vos->sco, 0);
+
+               if(vos->flag&V3D_CACHE_TEXT_GLOBALSPACE)
+                       view3d_project_short_clip_persmat(ar, vos->vec, 
vos->sco, 0);
+               else
+                       view3d_project_short_clip(ar, vos->vec, vos->sco, 0);
+
                if(vos->sco[0]!=IS_CLIPPED)
                        tot++;
        }
@@ -1335,11 +1376,193 @@
        glEnd();
 }
 
+/* ****************** draw clip data *************** */
+
+static void draw_bundle_sphere(void)
+{
+       static GLuint displist= 0;
+
+       if (displist == 0) {
+               GLUquadricObj *qobj;
+
+               displist= glGenLists(1);
+               glNewList(displist, GL_COMPILE);
+
+               qobj= gluNewQuadric();
+               gluQuadricDrawStyle(qobj, GLU_FILL);
+               glShadeModel(GL_SMOOTH);
+               gluSphere(qobj, 0.05, 16, 16);
+               glShadeModel(GL_FLAT);
+               gluDeleteQuadric(qobj);
+
+               glEndList();
+       }
+
+       glCallList(displist);
+}
+
+static void draw_bundle_outline(void)
+{
+       static GLuint displist=0;
+
+       if (displist == 0) {
+               GLUquadricObj   *qobj;
+
+               displist= glGenLists(1);
+               glNewList(displist, GL_COMPILE);
+
+               glPushMatrix();
+
+               qobj= gluNewQuadric();
+               gluQuadricDrawStyle(qobj, GLU_SILHOUETTE);
+               gluDisk(qobj, 0.0,  0.05, 16, 1);
+
+               glRotatef(90, 0, 1, 0);
+               gluDisk(qobj, 0.0,  0.05, 16, 1);
+
+               glRotatef(90, 1, 0, 0);
+               gluDisk(qobj, 0.0,  0.05, 16, 1);
+
+               gluDeleteQuadric(qobj);
+
+               glPopMatrix();
+               glEndList();
+       }
+
+       glCallList(displist);
+}
+
+static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D 
*v3d, MovieClip *clip, int flag)
+{
+       MovieTracking *tracking= &clip->tracking;
+       MovieTrackingTrack *track;
+       float mat[4][4], imat[4][4], curcol[4];
+       unsigned char col[4], scol[4];
+       int bundlenr= 1;
+
+       if((v3d->flag2&V3D_SHOW_RECONSTRUCTION)==0)
+               return;
+
+       if(v3d->flag2&V3D_RENDER_OVERRIDE)
+               return;
+
+       glGetFloatv(GL_CURRENT_COLOR, curcol);
+
+       UI_GetThemeColor4ubv(TH_TEXT, col);
+       UI_GetThemeColor4ubv(TH_SELECT, scol);
+
+       BKE_get_tracking_mat(scene, mat);
+
+       glEnable(GL_LIGHTING);
+       glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
+       glEnable(GL_COLOR_MATERIAL);
+       glShadeModel(GL_SMOOTH);
+
+       /* current ogl matrix is translated in camera space, bundles should
+          be rendered in world space, so camera matrix should be "removed"
+          from current ogl matrix */
+       invert_m4_m4(imat, base->object->obmat);
+
+       glPushMatrix();
+       glMultMatrixf(imat);
+       glMultMatrixf(mat);
+
+       for ( track= tracking->tracks.first; track; track= track->next) {
+               if((track->flag&TRACK_HAS_BUNDLE)==0)
+                       continue;
+
+               if(flag&DRAW_PICKING)
+                       glLoadName(base->selcol + (bundlenr<<16));
+
+               glPushMatrix();
+                       glTranslatef(track->bundle_pos[0], 
track->bundle_pos[1], track->bundle_pos[2]);
+                       glScalef(v3d->bundle_size/0.05, v3d->bundle_size/0.05, 
v3d->bundle_size/0.05);
+
+                       if(v3d->drawtype==OB_WIRE) {
+                               glDisable(GL_LIGHTING);
+                               glDepthMask(0);
+
+                               if(TRACK_SELECTED(track)) 
UI_ThemeColor(TH_SELECT);
+                               else UI_ThemeColor(TH_WIRE);
+                               draw_bundle_outline();
+
+                               glDepthMask(1);
+                               glEnable(GL_LIGHTING);
+                       } else if(v3d->drawtype>OB_WIRE) {
+                               /* selection outline */
+                               if(TRACK_SELECTED(track)) {
+                                       UI_ThemeColor(TH_SELECT);
+
+                                       glDepthMask(0);
+                                       glLineWidth(2.f);
+                                       glDisable(GL_LIGHTING);
+                                       glPolygonMode(GL_FRONT_AND_BACK, 
GL_LINE);
+
+                                       draw_bundle_sphere();
+
+                                       glPolygonMode(GL_FRONT_AND_BACK, 
GL_FILL);
+                                       glEnable(GL_LIGHTING);
+                                       glLineWidth(1.f);
+                                       glDepthMask(1);
+                               }
+
+                               UI_ThemeColor(TH_BUNDLE_SOLID);
+                               draw_bundle_sphere();
+                       }
+
+               glPopMatrix();
+
+               if((flag & DRAW_PICKING)==0 && 
(v3d->flag2&V3D_SHOW_BUNDLENAME)) {
+                       float pos[3];
+                       unsigned char tcol[4];
+
+                       if(TRACK_SELECTED(track)) memcpy(tcol, scol, 
sizeof(tcol));
+                       else memcpy(tcol, col, sizeof(tcol));
+
+                       mul_v3_m4v3(pos, mat, track->bundle_pos);
+                       view3d_cached_text_draw_add(pos, track->name, 10, 
V3D_CACHE_TEXT_GLOBALSPACE, tcol);
+               }
+
+               bundlenr++;
+       }
+
+       if((flag & DRAW_PICKING)==0) {
+               if(v3d->flag2&V3D_SHOW_CAMERAPATH && 
clip->tracking.camera.reconnr) {
+                       int a= 0;
+                       MovieTrackingCamera *camera= &clip->tracking.camera;
+                       MovieReconstructedCamera *cur= camera->reconstructed;
+
+                       glDisable(GL_LIGHTING);
+                       UI_ThemeColor(TH_CAMERA_PATH);
+                       glLineWidth(2.0f);
+
+                       glBegin(GL_LINE_STRIP);
+                               for(a= 0; a<camera->reconnr; a++, cur++) {
+                                       glVertex3f(cur->mat[3][0], 
cur->mat[3][1], cur->mat[3][2]);
+                               }
+                       glEnd();
+
+                       glLineWidth(1.0f);
+                       glEnable(GL_LIGHTING);
+               }
+       }
+
+       glPopMatrix();
+
+       /* restore */
+       glShadeModel(GL_FLAT);
+       glDisable(GL_COLOR_MATERIAL);
+       glDisable(GL_LIGHTING);
+
+       glColor4fv(curcol);
+}
+
 /* flag similar to draw_object() */
-static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object 
*ob, int flag)
+static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Base 
*base, int flag)
 {
        /* a standing up pyramid with (0,0,0) as top */
        Camera *cam;
+       Object *ob= base->object;
        float vec[8][4], facx, facy, depth, aspx, aspy, caspx, caspy, shx, shy;
        int i;
        float drawsize;
@@ -1410,6 +1633,10 @@
                glVertex3fv(vec[4]);
        glEnd();
 
+       /* draw data for movie clip set as active for scene */
+       if(scene->clip)
+               draw_viewport_reconstruction(scene, base, v3d, scene->clip, 
flag);
+
        if(is_view)
                return;
 
@@ -5991,7 +6218,7 @@
                        break;
                case OB_CAMERA:
                        if((v3d->flag2 & V3D_RENDER_OVERRIDE)==0 || 
(rv3d->persp==RV3D_CAMOB && v3d->camera==ob)) /* special exception for active 
camera */
-                               drawcamera(scene, v3d, rv3d, ob, flag);
+                               drawcamera(scene, v3d, rv3d, base, flag);
                        break;
                case OB_LATTICE:
                        if((v3d->flag2 & V3D_RENDER_OVERRIDE)==0) {

Modified: 
branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_draw.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_draw.c  
2011-07-19 20:19:45 UTC (rev 38517)
+++ branches/soc-2011-tomato/source/blender/editors/space_view3d/view3d_draw.c  
2011-07-19 20:22:03 UTC (rev 38518)
@@ -64,7 +64,6 @@
 #include "BKE_screen.h"
 #include "BKE_unit.h"
 #include "BKE_movieclip.h"
-#include "BKE_tracking.h"
 
 #include "RE_pipeline.h"       // make_stars
 
@@ -1535,144 +1534,6 @@
        }
 }
 
-/* ****************** draw clip data *************** */
-
-static void draw_bundle_sphere(void)
-{
-       static GLuint displist= 0;
-
-       if (displist == 0) {
-               GLUquadricObj *qobj;
-
-               displist= glGenLists(1);
-               glNewList(displist, GL_COMPILE);
-
-               qobj= gluNewQuadric();
-               gluQuadricDrawStyle(qobj, GLU_FILL);
-               glShadeModel(GL_SMOOTH);
-               gluSphere(qobj, 0.05, 8, 8);
-               glShadeModel(GL_FLAT);
-               gluDeleteQuadric(qobj);
-

@@ 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