diff options
Diffstat (limited to 'source/blender')
-rw-r--r-- | source/blender/editors/space_view3d/drawobject.c | 33 | ||||
-rw-r--r-- | source/blender/editors/space_view3d/view3d_draw.c | 44 |
2 files changed, 48 insertions, 29 deletions
diff --git a/source/blender/editors/space_view3d/drawobject.c b/source/blender/editors/space_view3d/drawobject.c index 6e9b437dbc5..30bfa123007 100644 --- a/source/blender/editors/space_view3d/drawobject.c +++ b/source/blender/editors/space_view3d/drawobject.c @@ -1248,17 +1248,28 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob /* a standing up pyramid with (0,0,0) as top */ Camera *cam; World *wrld; - float nobmat[4][4], vec[8][4], fac, facx, facy, depth; + float nobmat[4][4], vec[8][4], fac, facx, facy, depth, aspx, aspy, caspx, caspy; int i; cam= ob->data; + aspx= (float) scene->r.xsch*scene->r.xasp; + aspy= (float) scene->r.ysch*scene->r.yasp; + + if(aspx < aspy) { + caspx= aspx / aspy; + caspy= 1.0; + } + else { + caspx= 1.0; + caspy= aspy / aspx; + } glDisable(GL_LIGHTING); glDisable(GL_CULL_FACE); if(rv3d->persp>=2 && cam->type==CAM_ORTHO && ob==v3d->camera) { - facx= 0.5*cam->ortho_scale*1.28; - facy= 0.5*cam->ortho_scale*1.024; + facx= 0.5*cam->ortho_scale*caspx; + facy= 0.5*cam->ortho_scale*caspy; depth= -cam->clipsta-0.1; } else { @@ -1266,8 +1277,8 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob if(rv3d->persp>=2 && ob==v3d->camera) fac= cam->clipsta+0.1; /* that way it's always visible */ depth= - fac*cam->lens/16.0; - facx= fac*1.28; - facy= fac*1.024; + facx= fac*caspx; + facy= fac*caspy; } vec[0][0]= 0.0; vec[0][1]= 0.0; vec[0][2]= 0.001; /* GLBUG: for picking at iris Entry (well thats old!) */ @@ -1308,16 +1319,16 @@ static void drawcamera(Scene *scene, View3D *v3d, RegionView3D *rv3d, Object *ob else if (i==1 && (ob == v3d->camera)) glBegin(GL_TRIANGLES); else break; - vec[0][0]= -0.7*cam->drawsize; - vec[0][1]= 1.1*cam->drawsize; + vec[0][0]= -0.7*cam->drawsize*caspx; + vec[0][1]= 1.1*cam->drawsize*caspy; glVertex3fv(vec[0]); vec[0][0]= 0.0; - vec[0][1]= 1.8*cam->drawsize; + vec[0][1]= 1.8*cam->drawsize*caspy; glVertex3fv(vec[0]); - vec[0][0]= 0.7*cam->drawsize; - vec[0][1]= 1.1*cam->drawsize; + vec[0][0]= 0.7*cam->drawsize*caspx; + vec[0][1]= 1.1*cam->drawsize*caspy; glVertex3fv(vec[0]); glEnd(); @@ -6138,7 +6149,7 @@ void draw_object(Scene *scene, ARegion *ar, View3D *v3d, Base *base, int flag) /* draw extra: after normal draw because of makeDispList */ if(dtx && (G.f & G_RENDER_OGL)==0) { - + if(dtx & OB_AXIS) { drawaxes(rv3d, rv3d->viewmatob, 1.0f, flag, OB_ARROWS); } diff --git a/source/blender/editors/space_view3d/view3d_draw.c b/source/blender/editors/space_view3d/view3d_draw.c index 38e763e6f88..3d78ddeec08 100644 --- a/source/blender/editors/space_view3d/view3d_draw.c +++ b/source/blender/editors/space_view3d/view3d_draw.c @@ -971,6 +971,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) extern void gl_round_box(int mode, float minx, float miny, float maxx, float maxy, float rad); // interface_panel.c float fac, a; float x1, x2, y1, y2; + float x1i, x2i, y1i, y2i; float x3, y3, x4, y4; rctf viewborder; Camera *ca= NULL; @@ -982,11 +983,18 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) ca = v3d->camera->data; calc_viewborder(scene, ar, rv3d, v3d, &viewborder); + /* the offsets */ x1= viewborder.xmin; y1= viewborder.ymin; x2= viewborder.xmax; y2= viewborder.ymax; + /* apply offsets so the real 3D camera shows through */ + x1i= (int)(x1 - 1.0f); + y1i= (int)(y1 - 1.0f); + x2i= (int)(x2 + 1.0f); + y2i= (int)(y2 + 1.0f); + /* passepartout, specified in camera edit buttons */ if (ca && (ca->flag & CAM_SHOWPASSEPARTOUT) && ca->passepartalpha > 0.000001) { if (ca->passepartalpha == 1.0) { @@ -996,29 +1004,29 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) glEnable(GL_BLEND); glColor4f(0, 0, 0, ca->passepartalpha); } - if (x1 > 0.0) - glRectf(0.0, (float)ar->winy, x1, 0.0); - if (x2 < (float)ar->winx) - glRectf(x2, (float)ar->winy, (float)ar->winx, 0.0); - if (y2 < (float)ar->winy) - glRectf(x1, (float)ar->winy, x2, y2); - if (y2 > 0.0) - glRectf(x1, y1, x2, 0.0); + if (x1i > 0.0) + glRectf(0.0, (float)ar->winy, x1i, 0.0); + if (x2i < (float)ar->winx) + glRectf(x2i, (float)ar->winy, (float)ar->winx, 0.0); + if (y2i < (float)ar->winy) + glRectf(x1i, (float)ar->winy, x2i, y2i); + if (y2i > 0.0) + glRectf(x1i, y1i, x2i, 0.0); glDisable(GL_BLEND); } - + /* edge */ - glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); - + glPolygonMode(GL_FRONT_AND_BACK, GL_LINE); + setlinestyle(0); UI_ThemeColor(TH_BACK); - glRectf(x1, y1, x2, y2); + glRectf(x1i, y1i, x2i, y2i); setlinestyle(3); UI_ThemeColor(TH_WIRE); - glRectf(x1, y1, x2, y2); - + glRectf(x1i, y1i, x2i, y2i); + /* border */ if(scene->r.mode & R_BORDER) { @@ -1031,7 +1039,7 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) cpack(0x4040FF); glRectf(x3, y3, x4, y4); } - + /* safety border */ if (ca && (ca->flag & CAM_SHOWTITLESAFE)) { fac= 0.1; @@ -1049,14 +1057,14 @@ static void drawviewborder(Scene *scene, ARegion *ar, View3D *v3d) uiSetRoundBox(15); gl_round_box(GL_LINE_LOOP, x1, y1, x2, y2, 12.0); } - + setlinestyle(0); glPolygonMode(GL_FRONT_AND_BACK, GL_FILL); - + /* camera name - draw in highlighted text color */ if (ca && (ca->flag & CAM_SHOWNAME)) { UI_ThemeColor(TH_TEXT_HI); - BLF_draw_default(x1, y1-15, 0.0f, v3d->camera->id.name+2); + BLF_draw_default(x1i, y1i-15, 0.0f, v3d->camera->id.name+2); UI_ThemeColor(TH_WIRE); } } |