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:
authorTon Roosendaal <ton@blender.org>2004-05-29 20:17:46 +0400
committerTon Roosendaal <ton@blender.org>2004-05-29 20:17:46 +0400
commit6b51c684f1de22b8ff633649654457d531e30429 (patch)
tree3ba51aba5b05aed05fe5990b8f47b74f769cebd9 /source/blender/blenkernel/intern
parent59dad6aefc950443cbe18c39b662de912b6fb3e0 (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.c20
-rw-r--r--source/blender/blenkernel/intern/object.c7
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)