goat3d

diff generators/goatprim/main.c @ 18:bdfc8dd14965

done with goatprim
author John Tsiombikas <nuclear@member.fsf.org>
date Fri, 27 Sep 2013 03:17:36 +0300
parents 1d85d7dd0038
children
line diff
     1.1 --- a/generators/goatprim/main.c	Fri Sep 27 02:29:52 2013 +0300
     1.2 +++ b/generators/goatprim/main.c	Fri Sep 27 03:17:36 2013 +0300
     1.3 @@ -4,10 +4,17 @@
     1.4  #include <math.h>
     1.5  #include "goat3d.h"
     1.6  
     1.7 -#define DEF_USUB	16
     1.8 -#define DEF_VSUB	8
     1.9 -#define DEF_SIZE	1.0
    1.10 -#define DEF_OUTER	0.25
    1.11 +#define DEF_USUB		16
    1.12 +#define DEF_VSUB		8
    1.13 +#define DEF_SIZE		1.0
    1.14 +#define DEF_OUTER		0.25
    1.15 +#define DEF_DIFFUSE_R	0.6
    1.16 +#define DEF_DIFFUSE_G	0.6
    1.17 +#define DEF_DIFFUSE_B	0.6
    1.18 +#define DEF_SPECULAR_R	0.8
    1.19 +#define DEF_SPECULAR_G	0.8
    1.20 +#define DEF_SPECULAR_B	0.8
    1.21 +#define DEF_SHININESS	60.0
    1.22  
    1.23  enum { BOX, SPHERE, TORUS };
    1.24  
    1.25 @@ -26,6 +33,9 @@
    1.26  	int vsub = DEF_VSUB;
    1.27  	float size = DEF_SIZE;
    1.28  	float outer = DEF_OUTER;
    1.29 +	float diffuse[] = {DEF_DIFFUSE_R, DEF_DIFFUSE_G, DEF_DIFFUSE_B, 1.0};
    1.30 +	float specular[] = {DEF_SPECULAR_R, DEF_SPECULAR_G, DEF_SPECULAR_B, 1.0};
    1.31 +	float shininess = DEF_SHININESS;
    1.32  	struct goat3d *goat;
    1.33  	struct goat3d_material *mtl;
    1.34  	struct goat3d_mesh *mesh;
    1.35 @@ -66,6 +76,31 @@
    1.36  				return 1;
    1.37  			}
    1.38  
    1.39 +		} else if(strcmp(argv[i], "-diffuse") == 0) {
    1.40 +			if(!argv[i + 1] || !argv[i + 2] || !argv[i + 3]) {
    1.41 +				fprintf(stderr, "-diffuse must be followed by 3 numbers (r, g, b)\n");
    1.42 +				return 1;
    1.43 +			}
    1.44 +			diffuse[0] = atof(argv[++i]);
    1.45 +			diffuse[1] = atof(argv[++i]);
    1.46 +			diffuse[2] = atof(argv[++i]);
    1.47 +
    1.48 +		} else if(strcmp(argv[i], "-specular") == 0) {
    1.49 +			if(!argv[i + 1] || !argv[i + 2] || !argv[i + 3]) {
    1.50 +				fprintf(stderr, "-specular must be followed by 3 numbers (r, g, b)\n");
    1.51 +				return 1;
    1.52 +			}
    1.53 +			specular[0] = atof(argv[++i]);
    1.54 +			specular[1] = atof(argv[++i]);
    1.55 +			specular[2] = atof(argv[++i]);
    1.56 +
    1.57 +		} else if(strcmp(argv[i], "-shininess") == 0) {
    1.58 +			if(!argv[i + 1]) {
    1.59 +				fprintf(stderr, "-shininess must be followed by a number\n");
    1.60 +				return 1;
    1.61 +			}
    1.62 +			shininess = atof(argv[++i]);
    1.63 +
    1.64  		} else if(strcmp(argv[i], "-h") == 0 || strcmp(argv[i], "-help") == 0) {
    1.65  			printf("Usage: %s [filename] [options]\n", argv[0]);
    1.66  			printf("Options:\n");
    1.67 @@ -76,6 +111,9 @@
    1.68  			printf(" -outer <n>    torus outer radius (default: %g)\n", DEF_OUTER);
    1.69  			printf(" -usub <n>     subdivisions along the horizontal direction (default: %d)\n", DEF_USUB);
    1.70  			printf(" -vsub <n>     subdivisions along the vertical direction (default: %d)\n", DEF_VSUB);
    1.71 +			printf(" -diffuse <r> <g> <b>    material diffuse color (default: %g %g %g)\n", DEF_DIFFUSE_R, DEF_DIFFUSE_G, DEF_DIFFUSE_B);
    1.72 +			printf(" -specular <r> <g> <b>   material specular color (default: %g %g %g)\n", DEF_SPECULAR_R, DEF_SPECULAR_G, DEF_SPECULAR_B);
    1.73 +			printf(" -shininess <n>          material shininess (default: %g)\n", DEF_SHININESS);
    1.74  			printf(" -h, -help     print usage information and exit\n");
    1.75  			return 0;
    1.76  
    1.77 @@ -97,7 +135,9 @@
    1.78  
    1.79  	mtl = goat3d_create_mtl();
    1.80  	goat3d_set_mtl_name(mtl, "mat");
    1.81 -	goat3d_set_mtl_attrib4f(mtl, GOAT3D_MAT_ATTR_DIFFUSE, 1, 0, 0, 1);
    1.82 +	goat3d_set_mtl_attrib(mtl, GOAT3D_MAT_ATTR_DIFFUSE, diffuse);
    1.83 +	goat3d_set_mtl_attrib(mtl, GOAT3D_MAT_ATTR_SPECULAR, specular);
    1.84 +	goat3d_set_mtl_attrib1f(mtl, GOAT3D_MAT_ATTR_SHININESS, shininess);
    1.85  	goat3d_add_mtl(goat, mtl);
    1.86  
    1.87  	mesh = goat3d_create_mesh();