538 |
|
void |
539 |
|
build_mesh(void) |
540 |
|
{ |
541 |
+ |
int nrbfs = 0, nmigs = 0; |
542 |
|
double best2 = M_PI*M_PI; |
543 |
|
RBFNODE *shrt_edj[2]; |
544 |
|
RBFNODE *rbf0, *rbf1; |
545 |
+ |
const MIGRATION *ej; |
546 |
|
/* average specular peak */ |
547 |
|
comp_bsdf_spec(); |
548 |
|
/* add normal if needed */ |
556 |
|
return; |
557 |
|
} |
558 |
|
shrt_edj[0] = shrt_edj[1] = NULL; /* start w/ shortest edge */ |
559 |
< |
for (rbf0 = dsf_list; rbf0 != NULL; rbf0 = rbf0->next) |
559 |
> |
for (rbf0 = dsf_list; rbf0 != NULL; rbf0 = rbf0->next) { |
560 |
|
for (rbf1 = rbf0->next; rbf1 != NULL; rbf1 = rbf1->next) { |
561 |
|
double dist2 = 2. - 2.*DOT(rbf0->invec,rbf1->invec); |
562 |
|
if (dist2 < best2) { |
564 |
|
shrt_edj[1] = rbf1; |
565 |
|
best2 = dist2; |
566 |
|
} |
567 |
+ |
} |
568 |
+ |
++nrbfs; |
569 |
|
} |
570 |
|
if (shrt_edj[0] == NULL) { |
571 |
|
fprintf(stderr, "%s: Cannot find shortest edge\n", progname); |
576 |
|
mesh_from_edge(create_migration(shrt_edj[0], shrt_edj[1])); |
577 |
|
else |
578 |
|
mesh_from_edge(create_migration(shrt_edj[1], shrt_edj[0])); |
579 |
+ |
/* count up edges */ |
580 |
+ |
for (ej = mig_list; ej != NULL; ej = ej->next) |
581 |
+ |
++nmigs; |
582 |
+ |
if (nmigs < nrbfs-1) /* did meshing fail? */ |
583 |
+ |
fprintf(stderr, |
584 |
+ |
"%s: warning - %d incident directions but only %d interpolant(s)\n", |
585 |
+ |
progname, nrbfs, nmigs); |
586 |
|
/* complete migrations */ |
587 |
|
await_children(nchild); |
588 |
|
} |