#include #include #include #include #include #include #include "funcs.h" #define SHIFTER 1 #define ONE_DIM (256>>SHIFTER) #define T_TABLEAU (ONE_DIM*ONE_DIM*ONE_DIM) long tableau[ONE_DIM][ONE_DIM][ONE_DIM]; /* ----------------------------------------------------------------- */ int mk_colorcube(Image_Desc *img, char *outname) { long t_tableau, lval, maxtable; int x, y, r, g, b; FILE *fp; int nbre; double echelle; char chaine[100]; fprintf(stderr, "shifter %d\n", SHIFTER); fprintf(stderr, "one_dim %d\n", ONE_DIM); t_tableau = T_TABLEAU * sizeof(long); fprintf(stderr, "t_tableau %d long -> %ld bytes\n", T_TABLEAU, t_tableau); if (NULL==(fp=fopen(outname, "w"))) { perror(outname); exit(1); } fprintf(fp, "/****** generated file ******/\n"); fprintf(fp, "#declare ccube = object\n{\n"); fprintf(fp, "union {\n"); maxtable = 0L; memset((void *)tableau, 0, T_TABLEAU*sizeof(long)); for (y=0; y>= SHIFTER; g >>= SHIFTER; b >>= SHIFTER; tableau[r][g][b]++; if (tableau[r][g][b] > maxtable) maxtable = tableau[r][g][b]; } } fprintf(stderr, "maxtable = %ld\n", maxtable); #define OBJECT " sphere <0, 0, 0>, DS " nbre = 0; echelle = 0.0; for (r=0; r 2L) { sprintf(chaine, "pigment { rgb <%f, %f, %f> }", (double)r/63.001, (double)g/63.001, (double)b/63.001); fprintf(fp, "object { S %s translate <%d, %d, %d> }\n", chaine, r<