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:
Diffstat (limited to 'source/blender/editors/space_view3d/drawobject.c')
-rw-r--r--source/blender/editors/space_view3d/drawobject.c106
1 files changed, 69 insertions, 37 deletions
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c
index 547d89cd1a2..a36f49a35d8 100644
--- a/source/blender/editors/space_view3d/drawobject.c
+++ b/source/blender/editors/space_view3d/drawobject.c
@@ -1458,43 +1458,44 @@ static void draw_bundle_sphere(void)
glCallList(displist);
}
-static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d, MovieClip *clip, int flag)
+static void draw_viewport_object_reconstruction(Scene *scene, Base *base, View3D *v3d,
+ MovieClip *clip, MovieTrackingObject *tracking_object, int flag)
{
MovieTracking *tracking= &clip->tracking;
MovieTrackingTrack *track;
- float mat[4][4], imat[4][4], curcol[4];
+ float mat[4][4], imat[4][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);
+ ListBase *tracksbase= BKE_tracking_object_tracks(tracking, tracking_object);
UI_GetThemeColor4ubv(TH_TEXT, col);
UI_GetThemeColor4ubv(TH_SELECT, scol);
BKE_get_tracking_mat(scene, base->object, mat);
- glEnable(GL_LIGHTING);
- glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
- glEnable(GL_COLOR_MATERIAL);
- glShadeModel(GL_SMOOTH);
+ glPushMatrix();
- /* 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);
+ if(tracking_object->flag & TRACKING_OBJECT_CAMERA) {
+ /* 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);
+ glMultMatrixf(imat);
+ glMultMatrixf(mat);
+ }
+ else {
+ float obmat[4][4];
+
+ BKE_tracking_get_interpolated_camera(tracking, tracking_object, scene->r.cfra, obmat);
+
+ invert_m4_m4(imat, obmat);
+ glMultMatrixf(imat);
+ }
+
+ for (track= tracksbase->first; track; track= track->next) {
+ int selected= TRACK_SELECTED(track);
- for ( track= tracking->tracks.first; track; track= track->next) {
- int selected= track->flag&SELECT || track->pat_flag&SELECT || track->search_flag&SELECT;
if((track->flag&TRACK_HAS_BUNDLE)==0)
continue;
@@ -1581,27 +1582,58 @@ static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d,
}
if((flag & DRAW_PICKING)==0) {
- if(v3d->flag2&V3D_SHOW_CAMERAPATH && clip->tracking.reconstruction.camnr) {
- int a= 0;
- MovieTrackingReconstruction *reconstruction= &tracking->reconstruction;
- MovieReconstructedCamera *camera= tracking->reconstruction.cameras;
+ if((v3d->flag2&V3D_SHOW_CAMERAPATH) && (tracking_object->flag&TRACKING_OBJECT_CAMERA)) {
+ MovieTrackingReconstruction *reconstruction;
+ reconstruction= BKE_tracking_object_reconstruction(tracking, tracking_object);
- glDisable(GL_LIGHTING);
- UI_ThemeColor(TH_CAMERA_PATH);
- glLineWidth(2.0f);
+ if(reconstruction->camnr) {
+ MovieReconstructedCamera *camera= reconstruction->cameras;
+ int a= 0;
- glBegin(GL_LINE_STRIP);
- for(a= 0; a<reconstruction->camnr; a++, camera++) {
- glVertex3fv(camera->mat[3]);
- }
- glEnd();
+ glDisable(GL_LIGHTING);
+ UI_ThemeColor(TH_CAMERA_PATH);
+ glLineWidth(2.0f);
- glLineWidth(1.0f);
- glEnable(GL_LIGHTING);
+ glBegin(GL_LINE_STRIP);
+ for(a= 0; a<reconstruction->camnr; a++, camera++) {
+ glVertex3fv(camera->mat[3]);
+ }
+ glEnd();
+
+ glLineWidth(1.0f);
+ glEnable(GL_LIGHTING);
+ }
}
}
glPopMatrix();
+}
+
+static void draw_viewport_reconstruction(Scene *scene, Base *base, View3D *v3d, MovieClip *clip, int flag)
+{
+ MovieTracking *tracking= &clip->tracking;
+ MovieTrackingObject *tracking_object;
+ float curcol[4];
+
+ if((v3d->flag2&V3D_SHOW_RECONSTRUCTION)==0)
+ return;
+
+ if(v3d->flag2&V3D_RENDER_OVERRIDE)
+ return;
+
+ glGetFloatv(GL_CURRENT_COLOR, curcol);
+
+ glEnable(GL_LIGHTING);
+ glColorMaterial(GL_FRONT_AND_BACK, GL_DIFFUSE);
+ glEnable(GL_COLOR_MATERIAL);
+ glShadeModel(GL_SMOOTH);
+
+ tracking_object= tracking->objects.first;
+ while(tracking_object) {
+ draw_viewport_object_reconstruction(scene, base, v3d, clip, tracking_object, flag);
+
+ tracking_object= tracking_object->next;
+ }
/* restore */
glShadeModel(GL_FLAT);