[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [37515] branches/soc-2011-tomato: Camera tracking integration
Sergey Sharybin
g.ulairi at gmail.com
Wed Jun 15 19:23:08 CEST 2011
Revision: 37515
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=37515
Author: nazgul
Date: 2011-06-15 17:23:08 +0000 (Wed, 15 Jun 2011)
Log Message:
-----------
Camera tracking integration
===========================
- Marker's preview panel is now avaliable with any
tool selected (except NONE).
- Fixed bug with marker's point going outside of pattern
when scaling pattern which isn't centered to marker's pos.
- Changed a bit pattern area image generation.
Now it shouldn't give artifacts with different kinds of
offsets caused because of float-?int conversions.
- Rollback code for generating flat buffer of search area
when tracking. It'll be more accurate with current position
calculation.
Will switch to BKE_tracking_acquire_search_imbuf when
backwards position calculation would be implemented.
- Added option to make markers thin. It's in Debug panel due
to this option was really useful for debugging preview image
but not sure it'll be useful for artists.
- Added "View Selected" operator (hotkey is numpad period).
Fits view to show all selection at the frame.
- Added option "Lock to Selection" which locks view
to show centered selection. Useful to visual markers
tracking during playback.
This option is on "Display" panel.
Modified Paths:
--------------
branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py
branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
branches/soc-2011-tomato/source/blender/editors/include/ED_clip.h
branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c
branches/soc-2011-tomato/source/blender/editors/space_clip/clip_editor.c
branches/soc-2011-tomato/source/blender/editors/space_clip/clip_intern.h
branches/soc-2011-tomato/source/blender/editors/space_clip/clip_ops.c
branches/soc-2011-tomato/source/blender/editors/space_clip/space_clip.c
branches/soc-2011-tomato/source/blender/makesdna/DNA_space_types.h
branches/soc-2011-tomato/source/blender/makesrna/intern/rna_space.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-06-15 17:21:34 UTC (rev 37514)
+++ branches/soc-2011-tomato/release/scripts/startup/bl_ui/space_clip.py 2011-06-15 17:23:08 UTC (rev 37515)
@@ -156,7 +156,7 @@
tool = ts.movieclip.tool
return (sc.mode == 'TRACKING' and clip and \
- tool == 'MARKER' and clip.tracking.act_track)
+ tool != 'NONE' and clip.tracking.act_track)
def draw(self, context):
layout = self.layout
@@ -234,6 +234,7 @@
layout.prop(sc, "show_marker_pattern")
layout.prop(sc, "show_marker_search")
+ layout.prop(sc, "lock_selection")
class CLIP_PT_debug(bpy.types.Panel):
@@ -247,6 +248,7 @@
sc = context.space_data
layout.prop(sc, "show_cache")
+ layout.prop(sc, "show_tiny_markers")
class CLIP_MT_view(bpy.types.Menu):
@@ -259,6 +261,22 @@
layout.operator("clip.tools", icon='MENU_PANEL')
layout.separator()
+ layout.operator("clip.view_selected")
+ layout.operator("clip.view_all")
+
+ layout.separator()
+ layout.operator("clip.view_zoom_in")
+ layout.operator("clip.view_zoom_out")
+
+ layout.separator()
+
+ ratios = [[1, 8], [1, 4], [1, 2], [1, 1], [2, 1], [4, 1], [8, 1]]
+
+ for a, b in ratios:
+ text = "Zoom %d:%d" % (a, b)
+ layout.operator("clip.view_zoom_ratio", text=text).ratio = a / b
+
+ layout.separator()
layout.operator("screen.area_dupli")
layout.operator("screen.screen_full_area")
@@ -298,7 +316,7 @@
sc = context.space_data
- layout.operator('clip.add_marker')
+ layout.operator('clip.add_marker_move')
class CLIP_MT_select(bpy.types.Menu):
Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c 2011-06-15 17:21:34 UTC (rev 37514)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/tracking.c 2011-06-15 17:23:08 UTC (rev 37515)
@@ -86,16 +86,6 @@
track->pat_max[a]= track->search_max[a];
track->pat_min[a]= track->pat_max[a]-dim[a];
}
-
- /* marker's center should be inside pattern */
- if(track->pat_min[a] > 0.0f) {
- track->pat_min[a]= 0.0f;
- track->pat_max[a]= dim[a];
- }
- if(track->pat_max[a] < 0.0f) {
- track->pat_max[a]= 0.0f;
- track->pat_min[a]= -dim[a];
- }
}
}
else if(event==CLAMP_SEARCH_DIM) {
@@ -121,6 +111,23 @@
}
}
}
+
+ /* marker's center should be inside pattern */
+ if(event==CLAMP_PAT_DIM || event==CLAMP_PAT_POS) {
+ float dim[2];
+ sub_v2_v2v2(dim, track->pat_max, track->pat_min);
+
+ for(a= 0; a<2; a++) {
+ if(track->pat_min[a] > 0.0f) {
+ track->pat_min[a]= 0.0f;
+ track->pat_max[a]= dim[a];
+ }
+ if(track->pat_max[a] < 0.0f) {
+ track->pat_max[a]= 0.0f;
+ track->pat_min[a]= -dim[a];
+ }
+ }
+ }
}
void BKE_tracking_track_flag(MovieTrackingTrack *track, int area, int flag, int clear)
@@ -306,20 +313,24 @@
static ImBuf *acquire_area_imbuf(ImBuf *ibuf, MovieTrackingTrack *track, MovieTrackingMarker *marker, float min[2], float max[2], int pos[2])
{
ImBuf *tmpibuf;
- const float eps= 0.001;
int x, y;
int x1, y1, x2, y2, w, h;
- x= floor(marker->pos[0]*ibuf->x+eps);
- y= floor(marker->pos[1]*ibuf->y+eps);
- x1= x-floor(-min[0]*ibuf->x-eps);
- y1= y-floor(-min[1]*ibuf->y-eps);
- x2= x+ceil(max[0]*ibuf->x+eps);
- y2= y+ceil(max[1]*ibuf->y+eps);
+ x= marker->pos[0]*ibuf->x;
+ y= marker->pos[1]*ibuf->y;
+ x1= x-(int)(-min[0]*ibuf->x);
+ y1= y-(int)(-min[1]*ibuf->y);
+ x2= x+(int)(max[0]*ibuf->x);
+ y2= y+(int)(max[1]*ibuf->y);
+ /* dimensions should be odd */
w= (x2-x1)|1;
h= (y2-y1)|1;
+ /* happens due to rounding issues */
+ if(x1+w<=x) x1++;
+ if(y1+h<=y) y1++;
+
tmpibuf= IMB_allocImBuf(w, h, 32, IB_rect);
IMB_rectcpy(tmpibuf, ibuf, 0, 0, x1, y1, w, h);
@@ -345,16 +356,22 @@
{
ImBuf *tmpibuf;
float *pixels, *fp;
- int x, y;
+ int x, y, width, height;
- tmpibuf= BKE_tracking_acquire_search_imbuf(ibuf, track, marker, pos);
+ width= (track->search_max[0]-track->search_min[0])*ibuf->x;
+ height= (track->search_max[1]-track->search_min[1])*ibuf->y;
- *width_r= tmpibuf->x;
- *height_r= tmpibuf->y;
+ tmpibuf= IMB_allocImBuf(width, height, 32, IB_rect);
+ IMB_rectcpy(tmpibuf, ibuf, 0, 0,
+ (track->search_min[0]+marker->pos[0])*ibuf->x,
+ (track->search_min[1]+marker->pos[1])*ibuf->y, width, height);
- fp= pixels= MEM_callocN(tmpibuf->x*tmpibuf->y*sizeof(float), "tracking floatBuf");
- for(y= 0; y<tmpibuf->y; y++) {
- for (x= 0; x<tmpibuf->x; x++) {
+ *width_r= width;
+ *height_r= height;
+
+ fp= pixels= MEM_callocN(width*height*sizeof(float), "tracking floatBuf");
+ for(y= 0; y<(int)height; y++) {
+ for (x= 0; x<(int)width; x++) {
int pixel= tmpibuf->x*y + x;
char *rrgb= (char*)tmpibuf->rect + pixel*4;
@@ -382,7 +399,7 @@
/* duplicate currently tracking tracks to list of displaying tracks */
track= context->tracks.first;
while(track) {
- int replace= 0, replace_sel= 0;
+ int replace_sel= 0;
MovieTrackingTrack *new_track, *old;
/* find original of tracking track in list of previously displayed tracks */
@@ -408,16 +425,13 @@
BKE_tracking_free_track(cur);
BLI_freelinkN(old_tracks, cur);
- replace= 1;
}
}
new_track= BKE_tracking_copy_track(track);
- if(replace) {
- BLI_ghash_remove(context->hash, track, NULL, NULL); /* XXX: are we actually need this */
- BLI_ghash_insert(context->hash, track, new_track);
- }
+ BLI_ghash_remove(context->hash, track, NULL, NULL); /* XXX: are we actually need this */
+ BLI_ghash_insert(context->hash, track, new_track);
if(replace_sel) /* update current selection in clip */
BKE_movieclip_set_selection(context->clip, MCLIP_SEL_TRACK, new_track);
Modified: branches/soc-2011-tomato/source/blender/editors/include/ED_clip.h
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/include/ED_clip.h 2011-06-15 17:21:34 UTC (rev 37514)
+++ branches/soc-2011-tomato/source/blender/editors/include/ED_clip.h 2011-06-15 17:23:08 UTC (rev 37515)
@@ -33,6 +33,7 @@
#ifndef ED_MOVIECLIP_H
#define ED_MOVIECLIP_H
+struct ARegion;
struct bContext;
struct ImBuf;
struct Main;
@@ -48,6 +49,7 @@
struct ImBuf *ED_space_clip_acquire_buffer(struct SpaceClip *sc);
void ED_clip_update_frame(const struct Main *mainp, int cfra);
+void ED_clip_view_selection(struct SpaceClip *sc, struct ARegion *ar, int fit);
/* clip_ops.c */
void ED_operatormacros_clip(void);
Modified: branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c
===================================================================
--- branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c 2011-06-15 17:21:34 UTC (rev 37514)
+++ branches/soc-2011-tomato/source/blender/editors/space_clip/clip_draw.c 2011-06-15 17:23:08 UTC (rev 37515)
@@ -125,8 +125,11 @@
static void draw_marker_outline(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker)
{
+ int tiny= sc->flag&SC_SHOW_TINY_MARKER;
+
UI_ThemeColor(TH_MARKER_OUTLINE);
- glPointSize(4.0f);
+ if(tiny) glPointSize(3.0f);
+ else glPointSize(4.0f);
glBegin(GL_POINTS);
glVertex2f(marker->pos[0], marker->pos[1]);
glEnd();
@@ -135,7 +138,9 @@
/* pattern and search outline */
glPushMatrix();
glTranslatef(marker->pos[0], marker->pos[1], 0);
- glLineWidth(3.0f);
+
+ if(!tiny) glLineWidth(3.0f);
+
if(sc->flag&SC_SHOW_MARKER_PATTERN) {
glBegin(GL_LINE_LOOP);
glVertex2f(track->pat_min[0], track->pat_min[1]);
@@ -154,25 +159,32 @@
glEnd();
}
glPopMatrix();
- glLineWidth(1.0f);
+
+ if(!tiny) glLineWidth(1.0f);
}
static void draw_marker_areas(SpaceClip *sc, MovieTrackingTrack *track, MovieTrackingMarker *marker, int act, int sel)
{
int color= act?TH_ACT_MARKER:TH_SEL_MARKER;
+ int tiny= sc->flag&SC_SHOW_TINY_MARKER;
/* marker position */
if((track->flag&SELECT)==sel) {
if(track->flag&SELECT) UI_ThemeColor(color);
else UI_ThemeColor(TH_MARKER);
- glPointSize(2.0f);
+ if(!tiny) glPointSize(2.0f);
glBegin(GL_POINTS);
glVertex2f(marker->pos[0], marker->pos[1]);
glEnd();
- glPointSize(1.0f);
+ if(!tiny) glPointSize(1.0f);
}
+ if(tiny) {
+ glLineStipple(3, 0xaaaa);
+ glEnable(GL_LINE_STIPPLE);
+ }
+
/* pattern */
glPushMatrix();
glTranslatef(marker->pos[0], marker->pos[1], 0);
@@ -208,6 +220,8 @@
glPopMatrix();
+ if(tiny)
+ glDisable(GL_LINE_STIPPLE);
}
static void draw_tracking_tracks(SpaceClip *sc, ARegion *ar, MovieClip *clip)
@@ -300,8 +314,9 @@
draw_movieclip_cache(sc, ar, clip, scene);
}
-void draw_clip_track_widget(const bContext *UNUSED(C), void *trackp, void *userp, void *clipp, rcti *rect)
+void draw_clip_track_widget(const bContext *C, void *trackp, void *userp, void *clipp, rcti *rect)
{
+ ARegion *ar= CTX_wm_region(C);
MovieClipUser *user= (MovieClipUser *)userp;
MovieClip *clip= (MovieClip *)clipp;
MovieTrackingTrack *track= (MovieTrackingTrack *)trackp;
@@ -326,23 +341,27 @@
IMB_rect_from_float(tmpibuf);
if(tmpibuf->rect) {
- int a;
+ int a, w, h;
float zoomx, zoomy;
+ GLint scissor[4];
- zoomx= ((float)rect->xmax-rect->xmin) / tmpibuf->x;
- zoomy= ((float)rect->ymax-rect->ymin) / tmpibuf->y;
+ w= rect->xmax-rect->xmin;
+ h= rect->ymax-rect->ymin;
+ zoomx= ((float)w) / tmpibuf->x;
+ zoomy= ((float)h) / tmpibuf->y;
+
glPushMatrix();
- glTranslatef(rect->xmin, rect->ymin, 0.f);
glPixelZoom(zoomx, zoomy);
+ glaDrawPixelsSafe(rect->xmin, rect->ymin, tmpibuf->x, tmpibuf->y, tmpibuf->x, GL_RGBA, GL_UNSIGNED_BYTE, tmpibuf->rect);
+ glPixelZoom(1.f, 1.f);
- glaDrawPixelsSafe(0, 0, tmpibuf->x, tmpibuf->y, tmpibuf->x, GL_RGBA, GL_UNSIGNED_BYTE, tmpibuf->rect);
+ glGetIntegerv(GL_VIEWPORT, scissor);
+ glScissor(ar->winrct.xmin + (rect->xmin-1), ar->winrct.ymin+(rect->ymin-1), (rect->xmax+1)-(rect->xmin-1), (rect->ymax+1)-(rect->ymin-1));
- glPixelZoom(1.f, 1.f);
+ glTranslatef(rect->xmin+(pos[0]+0.5f)*zoomx, rect->ymin+(pos[1]+0.5f)*zoomy, 0.f);
- glTranslatef((pos[0]+0.5f)*zoomx, (pos[1]+0.5f)*zoomy, 0.f);
-
@@ Diff output truncated at 10240 characters. @@
More information about the Bf-blender-cvs
mailing list