int main( int argc, char *argv[]){ //set up the images Image *src; Image *myImage; //set up the modules!! Module *basket; Module *connector; Module *connector1; Line l; Point pts[2]; Module *circle; Module *hotAirBalloon; Module *teamOfBalloons; Module *scene; //pick the colors Color colors[6]; Color brown; Color blue; Color green; Color grey; //set up view stuff, and image file stuff Matrix vtm, gtm; int rows; int cols; View3D view; DrawState *ds; char filename[256]; int i, j, k, m, n; //Set the colors up color_set(&brown, 0.2, 0.1, 0.0); color_set(&blue, 0.6, 0.8, 1.0); color_set(&green, 0.1, 0.4, 0.0); color_set(&grey, 0.3, 0.3, 0.3); color_set(&colors[0], 1.0, 0.0, 0.0);//Red color_set(&colors[1],1.0, 0.5, 0.0);//orange color_set(&colors[2],1.0, 1.0, 0.1);//yellow color_set(&colors[3], 0.0, 1.0, 0.0);//green color_set(&colors[4], 0.0, 0.0, 1.0);//blue color_set(&colors[5], 0.4, 0.0, 0.8);//purple //if you want to supply a background image you can, otherwise I set a default sky blue background! if(argc>1){ printf("you supplied an image\n"); myImage = image_read(argv[1]); rows = myImage->rows; cols = myImage->cols; printf("%d %d\n", rows, cols); }else{ printf("We are giving your image a default size!\n"); rows = 500; cols = 500; myImage = image_create(rows, cols); for(m = 0; m< rows; m++){ for(n = 0; n<cols; n++){ image_setColor(myImage, m, n, blue); } } } //Loop over the scene 300 times moving the scene around!! for(k = 0; k<300; k++){ //Set up the view point_set( &(view.vrp), 150, 100, 200, 1.0); vector_set( &(view.vpn), -view.vrp.val[0], -view.vrp.val[1], -view.vrp.val[2]); vector_set( &(view.vup), 0, 1.0, 0); view.d = 20; view.du = 10; view.dv = view.du* (float)rows/cols; view.f = 0; view.b = 5; view.screenx = rows; view.screeny = cols; matrix_setView3D( &vtm, &view); matrix_identity( >m ); // basket: cube (will need 1 in hot air balloon module) basket = module_create(); module_color(basket, &brown); module_cube(basket, 1); //connectors: lines need 4 connector = module_create(); point_set3D(&pts[0],1,1,1 ); point_set3D(&pts[1],2,4.2,1); line_set(&l, pts[0], pts[1]); module_line(connector, &l); connector1 = module_create(); point_set3D(&pts[0], 1,1 , 1); point_set3D(&pts[1], 0,4.2 ,1 ); line_set(&l, pts[0], pts[1]); module_line(connector1, &l); // balloon: circles nested on top of eachother circle = module_create(); module_color(circle, &colors[0]); module_rotateX(circle, 0, 1); module_translate2D(circle, 0, 3); module_circle(circle, 1); module_color(circle, &colors[1]); module_rotateX(circle, 1, 0); module_translate2D(circle, 0, 1); module_circle(circle, 2.5); module_color(circle, &colors[2]); module_rotateX(circle, 1, 0); module_translate2D(circle, 0, 1); module_circle(circle, 3); module_color(circle, &colors[3]); module_rotateX(circle, 1, 0); module_translate2D(circle, 0, 1); module_circle(circle, 4); module_color(circle, &colors[4]); module_rotateX(circle, 1, 0); module_translate2D(circle, 0, 1); module_circle(circle, 5); module_color(circle, &colors[5]); module_rotateX(circle, 1, 0); module_translate2D(circle, 0, 1); module_circle(circle, 6); module_color(circle, &colors[0]); module_rotateX(circle, 1,0); module_translate2D(circle, 0, 1); module_circle(circle, 7); module_color(circle, &colors[1]); module_rotateX(circle, 1, 0); module_translate2D(circle, 0, 1); module_circle(circle, 7); module_color(circle, &colors[2]); module_rotateX(circle, 1, 0); module_translate2D(circle, 0,1); module_circle(circle, 7); module_color(circle, &colors[3]); module_rotateX(circle, 1, 0); module_translate2D(circle, 0, 1); module_circle(circle, 7); module_color(circle, &colors[4]); module_rotateX(circle, 1, 0); module_translate2D(circle, 0, 1); module_circle(circle, 6); module_color(circle, &colors[5]); module_rotateX(circle, 1, 0); module_translate2D(circle, 0, 1); module_circle(circle, 5); module_color(circle, &colors[0]); module_rotateX(circle, 1, 0); module_translate2D(circle, 0, 1); module_circle(circle, 4); module_color(circle, &colors[1]); module_rotateX(circle, 1, 0); module_translate2D(circle, 0, 0.5); module_circle(circle, 3); module_color(circle, &colors[2]); module_rotateX(circle, 1, 0); module_translate2D(circle, 0, 0.5); module_circle(circle, 2); //hotAirBalloon: put the above parts together hotAirBalloon = module_create(); module_module(hotAirBalloon, basket); module_module(hotAirBalloon, connector); module_translate(hotAirBalloon, -2,0 ,0 ); module_module(hotAirBalloon, connector1); module_translate(hotAirBalloon, 0, 0, -2); module_module(hotAirBalloon, connector1); module_translate(hotAirBalloon, 2, 0, 0); module_module(hotAirBalloon, connector); module_module(hotAirBalloon, circle); //make a team of balloons teamOfBalloons = module_create(); module_translate(teamOfBalloons, 0,-30,-15); module_module(teamOfBalloons, hotAirBalloon); module_translate(teamOfBalloons, 0, 0+(k*0.1),15); module_module(teamOfBalloons, hotAirBalloon); module_translate(teamOfBalloons, 0, 0+(k*0.1),15); module_module(teamOfBalloons, hotAirBalloon); //make a scene of balloons scene = module_create(); module_translate(scene, -40, 10+(k*0.1), 10); module_module(scene, teamOfBalloons); module_translate(scene, 140, 10, 55); module_module(scene, teamOfBalloons); module_translate(scene, -50, 10+(k*0.1), -40); module_module(scene, teamOfBalloons); module_translate(scene, 30, 10+(k*0.2) , -55); module_module(scene, teamOfBalloons); //set up the image src = image_create(rows, cols); //Either draw the background image you supplied or use my default background for (i = 0; i<rows; i++){ for (j = 0; j<cols; j++){ blue = image_getColor(myImage, i, j); image_setColor(src,i, j, blue); } } //set up the draw state if you want filled polygons need to use ShadeConstant instead of ShadeFrame ds = drawstate_create(); ds->shade = ShadeFrame; //draw the modules! module_draw( scene, &vtm, >m, ds, NULL, src); //put the files in the right place with the right name!! sprintf(filename, "/export/home/vedwards/Desktop/Graphics/images/hotAirBalloons3/frame-%04d.ppm", k ); printf("Writing image\n"); image_write( src, filename ); } //Clean up, delete all of the modules, images, and drawState module_delete(basket); module_delete(connector); module_delete(connector1); module_delete(circle); module_delete(hotAirBalloon); module_delete(teamOfBalloons); free(ds); image_free( src ); image_free( myImage ); return(0); }
/* * Draw the module into the image using the given view transformation matrix [VTM], * Lighting and DrawState by traversing the list of Elements. * (For now, Lighting can be an empty structure.) */ void module_draw(Module *md, Matrix *VTM, Matrix *GTM, DrawState *ds, Lighting *lighting, Image *src){ /* for antialiasing Module *thickLineMod = module_create(); Element *thickLineE; float dx, dy, dz, lineLength; Vector u, v, w;*/ // all locally needed variables Matrix LTM, tempGTM; Line tempLine; DrawState *tempds = drawstate_create(); Point tempPointLTM, tempPointGTM, tempPointVTM; Polyline *tempPolyline = polyline_create(); Polygon *tempPolygon = polygon_create(); Element *e = md->head; matrix_identity(<M); // loop until the end of the linked list is reached while(e){ //printf("Handling type %d\n", e->type); // draw based on type switch(e->type){ case ObjNone: break; case ObjPoint: //printf("drawing point "); // copy, xform, normalize, draw matrix_xformPoint(<M, &(e->obj.point), &tempPointLTM); matrix_xformPoint(GTM, &tempPointLTM, &tempPointGTM); matrix_xformPoint(VTM, &tempPointGTM, &tempPointVTM); point_normalize(&(tempPointVTM)); //point_print(&tempPointVTM, stdout); point_draw(&tempPointVTM, src, ds->color); break; case ObjLine: line_copy(&tempLine, &(e->obj.line)); //printf("drawing line "); // copy, xform, normalize, draw matrix_xformLine(<M, &tempLine); matrix_xformLine(GTM, &tempLine); matrix_xformLine(VTM, &tempLine); line_normalize(&tempLine); line_draw(&tempLine, src, ds->color); //line_print(&tempLine, stdout); /*if(antialias){ dx = tempLine.b.val[0]-tempLine.a.val[0]; dy = tempLine.b.val[1]-tempLine.a.val[1]; dz = tempLine.b.val[2]-tempLine.a.val[2]; lineLength = sqrt(dx*dx+dy*dy+dz*dz); module_scale( thickLineMod, 1, lineLength, 1 ); vector_set(&v, dx, dy, dz); vector_normalize(&v); vector_set(&u, -dz, dx, dy); vector_cross(&u, &v, &w); vector_cross(&v, &w, &u); vector_normalize(&u); vector_normalize(&w); module_rotateXYZ( thickLineMod, &u, &v, &w ); module_translate( thickLineMod, tempLine.a.val[0], tempLine.a.val[1], tempLine.a.val[2] ); module_cylinder( thickLineMod, 4, 1, 1, 0, 0, 0 ); thickLineE = element_init(ObjModule, thickLineMod); thickLineE->next = e->next; e->next = thickLineE; }*/ break; case ObjPolyline: //printf("drawing polyline "); // copy, xform, normalize, draw polyline_copy(tempPolyline, &(e->obj.polyline)); matrix_xformPolyline(<M, tempPolyline); matrix_xformPolyline(GTM, tempPolyline); matrix_xformPolyline(VTM, tempPolyline); polyline_normalize(tempPolyline); //polyline_print(tempPolyline, stdout); polyline_draw(tempPolyline, src, ds->color); break; case ObjPolygon: //printf("drawing polygon "); // copy, xform, normalize, draw polygon_copy(tempPolygon, &(e->obj.polygon)); matrix_xformPolygon(<M, tempPolygon); matrix_xformPolygon(GTM, tempPolygon); matrix_xformPolygon(VTM, tempPolygon); polygon_normalize(tempPolygon); //polygon_print(tempPolygon, stdout); polygon_draw(tempPolygon, src, ds); break; case ObjColor: drawstate_setColor(ds, e->obj.color); break; case ObjBodyColor: break; case ObjSurfaceColor: break; case ObjSurfaceCoeff: break; case ObjLight: break; case ObjIdentity: matrix_identity(<M); break; case ObjMatrix: matrix_multiply(&(e->obj.matrix), <M, <M); break; case ObjModule: matrix_multiply(GTM, <M, &tempGTM); drawstate_copy(tempds, ds); module_draw(e->obj.module, VTM, &tempGTM, tempds, lighting, src); break; default: printf("ObjectType %d is not handled in module_draw\n",e->type); } // advance traversal e = e->next; } // clean up polygon_free(tempPolygon); polyline_free(tempPolyline); free(tempds); }
int main(int argc, char* argv[]){ Image* src; Module *scene; Module* GRAPHICS; View3D view; Matrix vtm, gtm; DrawState *ds; Lighting *light; Point center;//center of animation Polygon poly;//polygon that holds the animation path points int frameNum;//holds the frame number for animation char filename[100];//holds the frame name Color Red; Color Blue; Color Green; Color Grey; Color Lemon; Color Black; Color White; Color Yellow; Color DarkAmbiant; Color randColor[10]; //setting colors Color_set(&Red, 1.0, 0.2, 0.1 ); Color_set(&Blue, 0.1, 0.1, 1.0); Color_set(&Green, 0.1, 1, 0.1 ); Color_set(&White, 1, 1, 1 ); Color_set(&Grey, 0.7, 0.7, 0.7 ); Color_set(&Lemon, 1.0, 1.0, 0.8); Color_set(&Black, 0.05, 0.05, 0.05); Color_set(&Yellow, 1, 0.894118, 0.709804); Color_set(&DarkAmbiant, 0.3, 0.3, 0.3); Color_set(&randColor[0], 0, 1, 1); Color_set(&randColor[1], 0.498039, 1, 0); Color_set(&randColor[2], 1, 0.54902, 0); Color_set(&randColor[3], 1, 0.0784314, 0.576471); Color_set(&randColor[4], 1, 0.843137, 0); Color_set(&randColor[5], 0.960784, 1, 0.980392); Color_set(&randColor[6], 1, 0.647059, 0); Color_set(&randColor[7], 1, 0.270588, 0); Color_set(&randColor[8], 0, 1, 0.498039); Color_set(&randColor[9], 1, 1, 0); // setting the view point_set3D( &(view.vrp), 35, 60, 30 ); vector_set( &(view.vpn), -view.vrp.val[0]+35, -view.vrp.val[1], -view.vrp.val[2]); vector_set( &(view.vup), 0, 1, 0 ); view.d = 1; view.du = 1.6; view.dv = 0.9; view.f = 1; view.b = 200; view.screenx = 1280; view.screeny = 720; matrix_setView3D( &vtm, &view ); matrix_identity( >m ); //creating GRAPHICS module GRAPHICS = module_create(); module_alphabet_G(GRAPHICS); module_identity(GRAPHICS); module_translate(GRAPHICS, 10, 0, 0); module_alphabet_R(GRAPHICS); module_identity(GRAPHICS); module_translate(GRAPHICS, 20, 0, 0); module_alphabet_A(GRAPHICS); module_identity(GRAPHICS); module_translate(GRAPHICS, 30, 0, 0); module_alphabet_P(GRAPHICS); module_identity(GRAPHICS); module_translate(GRAPHICS, 40, 0, 0); module_alphabet_H(GRAPHICS); module_identity(GRAPHICS); module_translate(GRAPHICS, 50, 0, 0); module_alphabet_I(GRAPHICS); module_identity(GRAPHICS); module_translate(GRAPHICS, 56, 0, 0); module_alphabet_C(GRAPHICS); module_identity(GRAPHICS); module_translate(GRAPHICS, 68, 0, 0); module_alphabet_S(GRAPHICS); // setting the light light = lighting_create(); lighting_add( light, LightAmbient, &Lemon, NULL, NULL, 0, 0); lighting_add(light, LightPoint, &White , NULL, &view.vrp, 0, 0); lighting_add(light, LightSpot, &White, &view.vpn, &view.vrp, cos(10*M_PI/180), 40); //setting drawstate ds = drawstate_create(); point_copy(&(ds->viewer), &(view.vrp) ); ds->shade = ShadePhong; // ds->shade = ShadeDepth; drawstate_setBody(ds, Black); drawstate_setSurface(ds, Red); drawstate_setSurfaceCoeff(ds, 10); //Animation frameNum =0; //path #1 point_set3D(¢er, 40, 0, -10); view_rotate_circle(&poly, ¢er, 100, 50, 0, 0, 0); polygon_print(&poly, stdout); for(int k=0; k<100; k++){ frameNum++; point_set3D( &(view.vrp), poly.vertex[k].val[0], poly.vertex[k].val[1], poly.vertex[k].val[2]); vector_set( &(view.vpn), -view.vrp.val[0], -view.vrp.val[1], -view.vrp.val[2] ); matrix_setView3D( &vtm, &view ); //creating scene module scene = module_create(); module_module(scene, GRAPHICS); // image src = image_create( view.screeny, view.screenx ); image_fillrgb(src, 1.0, 1.0, 0.8); //Drawing module_draw( scene, &vtm, >m, ds, light, src ); sprintf(filename, "../images/frame_%.4d.ppm",frameNum); image_write( src, filename); } //path #2 point_set3D(¢er, 40, 0, -10); view_rotate_circle(&poly, ¢er, 100, 90, 0, 0 , 0); // polygon_print(&poly, stdout); for(int k=0; k<100; k++){ if(frameNum == 119){ point_print(&view.vrp, stdout); break; } view_rotate_circle(&poly, ¢er, 50, 50+k, 0-2*k, 0 , 0); frameNum++; point_set3D( &(view.vrp), poly.vertex[k].val[0], poly.vertex[k].val[1], poly.vertex[k].val[2]); vector_set( &(view.vpn), -view.vrp.val[0], -view.vrp.val[1], -view.vrp.val[2] ); matrix_setView3D( &vtm, &view ); //creating scene module scene = module_create(); module_module(scene, GRAPHICS); // image src = image_create( view.screeny, view.screenx ); image_fillrgb(src, 1.0, 1.0, 0.8); //Drawing module_draw( scene, &vtm, >m, ds, light, src ); sprintf(filename, "../images/frame_%.4d.ppm",frameNum); image_write( src, filename); } //path #3 for(int k=0; k<120; k++){ frameNum++; if(frameNum <= 160){ point_set3D( &(view.vrp), -3.345+(k), 36.298+(k), 28.391-(k/2.0)); vector_set( &(view.vpn), -view.vrp.val[0]+k, -view.vrp.val[1], -view.vrp.val[2]); matrix_setView3D( &vtm, &view ); } //creating scene module scene = module_create(); module_module(scene, GRAPHICS); if(frameNum == 160){ light = lighting_create(); lighting_add( light, LightAmbient, &Grey, NULL, NULL, 0, 0); } // setting the light if(frameNum == 165){ Point plight1; point_set3D(&plight1, -5, 10, -10); lighting_add(light, LightSpot, &White, &view.vpn, &plight1, cos(10*M_PI/180), 40); } if(frameNum == 175){ Point plight2; point_set3D(&plight2, 85, 10, -10); lighting_add(light, LightSpot, &White, &view.vpn, &plight2, cos(10*M_PI/180), 40); } if(frameNum == 180){ lighting_add(light, LightSpot, &White, &view.vpn, &view.vrp, cos(10*M_PI/180), 40); } if(frameNum >= 183){ light = lighting_create(); lighting_add( light, LightAmbient, &Grey, NULL, NULL, 0, 0); int output1 = 0 + (rand() % (int)(10 - 0 + 1)); int output2 = 0 + (rand() % (int)(10 - 0 + 1)); int output3 = 0 + (rand() % (int)(10 - 0 + 1)); Point plight1; point_set3D(&plight1, -5, 10, -10); lighting_add(light, LightSpot, &randColor[output1], &view.vpn, &plight1, cos(10*M_PI/180), 40); Point plight2; point_set3D(&plight2, 85, 10, -10); lighting_add(light, LightSpot, &randColor[output2], &view.vpn, &plight2, cos(10*M_PI/180), 40); lighting_add(light, LightSpot, &randColor[output3], &view.vpn, &view.vrp, cos(10*M_PI/180), 40); } // image src = image_create( view.screeny, view.screenx ); image_fillrgb(src, 1.0, 1.0, 0.8); //setting drawstate ds = drawstate_create(); point_copy(&(ds->viewer), &(view.vrp) ); ds->shade = ShadePhong; // ds->shade = ShadeDepth; drawstate_setBody(ds, Black); drawstate_setSurface(ds, Red); drawstate_setSurfaceCoeff(ds, 10); //Drawing module_draw( scene, &vtm, >m, ds, light, src ); sprintf(filename, "../images/frame_%.4d.ppm",frameNum); image_write( src, filename); } //***Uncomment for making the .gif animation*** printf("Making the demo.gif file....\n"); system("convert -delay 10 ../images/frame_*.ppm ../images/demo.gif"); printf("Cleaning up...\n"); system("rm -f ../images/frame_*.ppm"); printf("Finished Successfully :)\n"); return(0); }
// makes 3 X-wing fighters in a loose formation int main(int argc, char *argv[]) { int i, j; //loop variables Image *src; Module* wall; Module* ray; Module* ray2; Module *scene1; Module* scene2; Polygon p; Line l; Point point[4]; Point point2[2]; View3D view; Matrix vtm, gtm; DrawState *ds; char filename[100]; Color Flame = { { 1.0, 0.7, 0.2 } }; Color Red = { { 1.0, 0.2, 0.1 } }; Color Grey = { { 0.745, 0.745, 0.745} }; Color Blue = {{0.117647, 0.564706, 1}}; // Color Grey = {{1, 1, 1}}; // set up the view point_set3D( &(view.vrp), 4, 4, 4 ); vector_set( &(view.vpn), -view.vrp.val[0], -view.vrp.val[1], -view.vrp.val[2] ); vector_set( &(view.vup), 0, 1, 0 ); view.d = 1; view.du = 1.6; view.dv = 0.9; view.f = 1; view.b = 50; view.screenx = 640; view.screeny = 360; matrix_setView3D( &vtm, &view ); matrix_identity( >m ); // //wall wall = module_create(); module_color(wall, &Red); polygon_init(&p); point_set3D(&point[0], 1,1,2); point_set3D(&point[1], 1,0,2); point_set3D(&point[2], 0,0,2); point_set3D(&point[3], 0,1,2); polygon_set(&p, 4, &point[0]); module_polygon(wall, &p); //ray ray = module_create(); module_color(ray, &Blue); for(i=0; i< 5; i++){ point_set3D(&point2[0], -1+0.01*i, -1, 1); point_set3D(&point2[1], 1+0.01*i, 1, 1); line_set(&l, point2[0], point2[1]); module_line(ray, &l); } //ray2 ray2 = module_create(); module_color(ray2, &Red); for(i=0; i< 5; i++){ point_set3D(&point2[0], -1+0.01*i, 1, -1); point_set3D(&point2[1], 1+0.01*i, -1, -1); line_set(&l, point2[0], point2[1]); // line_zBuffer(&l, 0); module_line(ray2, &l); } //scene // scene = module_create(); // module_module(scene, wall); // module_module(scene, ray); // module_module(scene, ray2); // module_module(scene, wall); for(i=0; i< 36; i++){ //scene scene1 = module_create(); scene2 = module_create(); module_rotateZ(scene1, cos(i*10 * M_PI/180), sin(i*10 * M_PI/180)); module_scale( scene1, 3, 1, 2 ); module_color( scene1, &Blue ); module_cube( scene1, 1); module_scale(scene2, 0.5, 0.5, 0.5); module_cylinder(scene2, 30); // create the image and drawstate src = image_create( 360, 640 ); ds = drawstate_create(); drawstate_setAlpha(ds, 1); ds->shade = ShadeDepth; // draw into the scene // module_draw( scene1, &vtm, >m, ds, src ); drawstate_setAlpha(ds, 1 ); module_draw( scene1, &vtm, >m, ds, src ); // write out the scene sprintf(filename, "frame_%.2d.ppm", i); image_write( src, filename ); module_delete( scene1); } //free the polygon data // polygon_clear( &p ); // free the modules // module_delete( scene); // module_delete( wall ); // free the drawstate free(ds); // free the image image_free( src ); return(0); }
/*we are going to draw a cube using our new module hiearchy*/ int main( int argc, char *argv[]){ Image *src; Module *cube1; Module *cube2; Module *cube3; Module *cube4; Module *cube5; Module *cube6; Module *cube7; Module *cube8; Module *manyCubes; Color Blue; View3D view; Matrix vtm, gtm; int rows = 320; int cols = 320; DrawState *ds; int count; char filename[256]; //Set the colors up color_set(&Blue, 0.0, 0, 1.0); // set up the view point_set( &(view.vrp), 1, 2, 0,0 ); vector_set( &(view.vpn), -view.vrp.val[0], -view.vrp.val[1], -view.vrp.val[2] ); vector_set( &(view.vup),0, 1.0, 0); view.d = 5; view.du = 5; view.dv = view.du * (float)rows/cols; view.f = 0; view.b = 5; view.screenx = rows; view.screeny = cols; matrix_setView3D( &vtm, &view ); matrix_identity( >m ); for (count = 0; count< 205; count++){ //Start first cube cube1 = module_create(); module_color( cube1, &Blue); module_translate(cube1, 0, 0, 0-count*0.01); module_cube(cube1, 0); //Set the colors up color_set(&Blue, 0.1, 0.1, 1.0); //Start second cube cube2 = module_create(); module_color(cube2, &Blue); module_translate(cube2, 0, 0, 0+count*0.01); module_cube(cube2, 0); //Set the colors up color_set(&Blue, 0.2, 0.2, 1.0); //start third cube cube3 = module_create(); module_color(cube3, &Blue); module_translate(cube3, 0+count*0.01,0, 0); module_cube(cube3, 0); //Set the colors up color_set(&Blue, 0.3, 0.3, 1.0); //start fourth cube cube4 = module_create(); module_color(cube4, &Blue); module_translate(cube4, 0-count*0.01,0, 0); module_cube(cube4, 0); //Set the colors up color_set(&Blue, 0.4, 0.4, 1.0); //start fifth cube cube5 = module_create(); module_color(cube5, &Blue); module_translate(cube5, 0-count*0.01, 0, 0-count*0.01); module_cube(cube5, 0); //Set the colors up color_set(&Blue, 0.5, 0.5, 1.0); cube6 = module_create(); module_color(cube6, &Blue); module_translate(cube6, 0+count*0.01, 0, 0+count*0.01); module_cube(cube6, 0); //Set the colors up color_set(&Blue, 0.6, 0.6, 1.0); cube7 = module_create(); module_color(cube7, &Blue); module_translate(cube7, 0-count*0.01, 0, 0+count*0.01); module_cube(cube7, 0); //Set the colors up color_set(&Blue, 0.7, 0.7, 1.0); cube8 = module_create(); module_color(cube8, &Blue); module_translate(cube8, 0+count*0.01, 0, 0-count*0.01); module_cube(cube8, 0); //put the cubes into a scene! manyCubes = module_create(); module_module(manyCubes, cube5); module_module(manyCubes, cube6); module_module(manyCubes, cube7); module_module(manyCubes, cube8); module_module(manyCubes, cube1); module_module(manyCubes, cube2); module_module(manyCubes, cube3); module_module(manyCubes, cube4); //Create the image draw state src = image_create(rows, cols); ds = drawstate_create(); ds->shade = ShadeConstant; //Draw the scene module_draw( manyCubes, &vtm, >m, ds, NULL, src ); //write out the scene sprintf(filename, "/export/home/vedwards/Desktop/Graphics/images/blueCube/frame-%04d.ppm", count ); printf("Writing image\n"); image_write( src, filename ); //image_write(src, "blueCubeNew.ppm"); } //free the modules module_delete( manyCubes ); module_delete( cube1 ); module_delete( cube2 ); module_delete( cube3 ); module_delete( cube4 ); module_delete( cube5 ); module_delete( cube6 ); module_delete( cube7 ); module_delete( cube8 ); //free the drawState free(ds); //free the image image_free( src ); return(0); }