diff options
author | Ton Roosendaal <ton@blender.org> | 2004-05-29 20:17:46 +0400 |
---|---|---|
committer | Ton Roosendaal <ton@blender.org> | 2004-05-29 20:17:46 +0400 |
commit | 6b51c684f1de22b8ff633649654457d531e30429 (patch) | |
tree | 3ba51aba5b05aed05fe5990b8f47b74f769cebd9 /source/blender/blenkernel/intern | |
parent | 59dad6aefc950443cbe18c39b662de912b6fb3e0 (diff) |
NEW! Blender now displays flipped (negative scaled) Objects correctly in
OpenGL draw.
(BTW: the previous commit also solves raytrace errors with negative scaled
objects...)
Further a cleanup of displaylist flags and object/base flags. The #define
ACTIVE is moved to filesel.c (only used here).
The GONNA_MOVE #define got a OB_ added in front.
Diffstat (limited to 'source/blender/blenkernel/intern')
-rw-r--r-- | source/blender/blenkernel/intern/displist.c | 20 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 7 |
2 files changed, 17 insertions, 10 deletions
diff --git a/source/blender/blenkernel/intern/displist.c b/source/blender/blenkernel/intern/displist.c index 3a7a73508f7..84167694741 100644 --- a/source/blender/blenkernel/intern/displist.c +++ b/source/blender/blenkernel/intern/displist.c @@ -790,7 +790,7 @@ void addnormalsDispList(Object *ob, ListBase *lb) for(a=0; a<dl->parts; a++) { - DL_SURFINDEX(dl->flag & 1, dl->flag & 2, dl->nr, dl->parts); + DL_SURFINDEX(dl->flag & DL_CYCL_U, dl->flag & DL_CYCL_V, dl->nr, dl->parts); v1= vdata+ 3*p1; n1= ndata+ 3*p1; @@ -850,6 +850,7 @@ void shadeDispList(Object *ob) Mat4Invert(tmat, mat); Mat3CpyMat4(imat, tmat); + if(ob->transflag & OB_NEG_SCALE) Mat3MulFloat((float *)imat, -1.0); /* we extract dl_verts, deform info */ dldeform= find_displist(&ob->disp, DL_VERTS); @@ -1543,7 +1544,7 @@ static void bevels_to_filledpoly(Curve *cu, ListBase *dispbase) dl= dispbase->first; while(dl) { if(dl->type==DL_SURF) { - if(dl->flag==2) { + if(dl->flag == DL_CYCL_V) { if(cu->flag & CU_BACK) { dlnew= MEM_callocN(sizeof(DispList), "filldisp"); BLI_addtail(&front, dlnew); @@ -1644,7 +1645,7 @@ void makeDispList(Object *ob) if(ob==0) return; if(ob->flag & OB_FROMDUPLI) return; freedisplist(&(ob->disp)); - + if(ob->type==OB_MESH) { me= ob->data; @@ -1736,14 +1737,14 @@ void makeDispList(Object *ob) if(draw==0) { dl->parts= nu->pntsv; dl->nr= nu->pntsu; - if(nu->flagu & 1) dl->flag|= 1; - if(nu->flagv & 1) dl->flag|= 2; + if(nu->flagu & 1) dl->flag|= DL_CYCL_U; + if(nu->flagv & 1) dl->flag|= DL_CYCL_V; } else { dl->parts= nu->resolu; /* in reverse, because makeNurbfaces works that way */ dl->nr= nu->resolv; - if(nu->flagv & 1) dl->flag|= 1; /* reverse too! */ - if(nu->flagu & 1) dl->flag|= 2; + if(nu->flagv & 1) dl->flag|= DL_CYCL_U; /* reverse too! */ + if(nu->flagu & 1) dl->flag|= DL_CYCL_V; } dl->col= nu->mat_nr; @@ -1837,8 +1838,8 @@ void makeDispList(Object *ob) dl->type= DL_SURF; dl->flag= 0; - if(dlb->type==DL_POLY) dl->flag++; - if(bl->poly>=0) dl->flag+=2; + if(dlb->type==DL_POLY) dl->flag |= DL_CYCL_U; + if(bl->poly>=0) dl->flag |= DL_CYCL_V; dl->parts= bl->nr; dl->nr= dlb->nr; @@ -1897,6 +1898,7 @@ void makeDispList(Object *ob) tex_space_curve(cu); } + } diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index 55e939e0d6d..9e6691f5525 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -1178,7 +1178,7 @@ void where_is_object_time(Object *ob, float ctime) { Object *par; float *fp1, *fp2, slowmat[4][4] = MAT4_UNITY; - float stime, fac1, fac2; + float stime, fac1, fac2, vec[3]; int a; int pop; @@ -1258,6 +1258,11 @@ void where_is_object_time(Object *ob, float ctime) if(ob->scriptlink.totscript && !during_script()) { BPY_do_pyscript((ID *)ob, SCRIPT_REDRAW); } + + /* set negative scale flag in object */ + Crossf(vec, ob->obmat[0], ob->obmat[1]); + if( Inpf(vec, ob->obmat[2]) < 0.0 ) ob->transflag |= OB_NEG_SCALE; + else ob->transflag &= ~OB_NEG_SCALE; } static void solve_parenting (Object *ob, Object *par, float slowmat[][4], int simul) |