Apparently the curve render code doesnt use the displist... so there's

duplicate code for tapering needed.
Now tapered curves render too.
This commit is contained in:
Ton Roosendaal
2004-08-29 13:58:48 +00:00
parent 4edfc3a919
commit 969fb8f765
2 changed files with 14 additions and 10 deletions

View File

@@ -114,6 +114,7 @@ extern void addnormalsDispList(struct Object *ob, struct ListBase *lb);
extern void count_displist(struct ListBase *lb, int *totvert, int *totface);
extern void curve_to_filledpoly(struct Curve *cu, struct ListBase *dispbase);
extern void freedisplist(struct ListBase *lb);
extern float calc_taper(Object *taperobj, int cur, int tot);
extern void makeDispList(struct Object *ob);
extern void set_displist_onlyzero(int val);
extern void shadeDispList(struct Object *ob);

View File

@@ -2192,7 +2192,7 @@ static void init_render_curve(Object *ob)
/* bevelcurve in displist */
dlbev.first= dlbev.last= 0;
if(cu->ext1!=0.0 || cu->ext2!=0.0 || cu->bevobj!=0) {
if(cu->ext1!=0.0 || cu->ext2!=0.0 || cu->bevobj!=NULL) {
makebevelcurve(ob, &dlbev);
}
@@ -2277,8 +2277,11 @@ static void init_render_curve(Object *ob)
while(b--) {
bevp= (BevPoint *)(bl+1);
a= bl->nr;
while(a--) {
for(a=0; a<bl->nr; a++) {
float fac;
/* returns 1.0 if no taper, of course */
fac= calc_taper(cu->taperobj, a, bl->nr);
if(cu->flag & CU_3D) {
vec[0]= fp1[1]+widfac;
@@ -2287,15 +2290,15 @@ static void init_render_curve(Object *ob)
MTC_Mat3MulVecfl(bevp->mat, vec);
fp[0]= bevp->x+ vec[0];
fp[1]= bevp->y+ vec[1];
fp[2]= bevp->z+ vec[2];
fp[0]= bevp->x+ fac*vec[0];
fp[1]= bevp->y+ fac*vec[1];
fp[2]= bevp->z+ fac*vec[2];
}
else {
fp[0]= bevp->x+ (widfac+fp1[1])*bevp->sina;
fp[1]= bevp->y+ (widfac+fp1[1])*bevp->cosa;
fp[2]= bevp->z+ fp1[2];
fp[0]= bevp->x+ fac*(widfac+fp1[1])*bevp->sina;
fp[1]= bevp->y+ fac*(widfac+fp1[1])*bevp->cosa;
fp[2]= bevp->z+ fac*fp1[2];
/* do not MatMul here: polyfill should work uniform, independent which frame */
}
fp+= 3;
@@ -2368,7 +2371,7 @@ static void init_render_curve(Object *ob)
}
/* make double points: SPLIT POLY */
if(dlb->nr==4 && cu->bevobj==0) {
if(dlb->nr==4 && cu->bevobj==NULL) {
split_u_renderfaces(startvlak, startvert, bl->nr, 1, bl->poly>0);
split_u_renderfaces(startvlak, startvert, bl->nr, 2, bl->poly>0);
}