bool CRayTracer::loadSnowflake (const char *filename) { FILE *f = fopen (filename, "r"); if (!f) return false; // Add the camera looking at the origin camera.setView (VECTOR(2.1, 1.7, 1.3), VECTOR (0,0,0)); camera.setRenderParameters (1024,1024,45); // Define background color background_color = COLOR( 0.078, 0.361, 0.753 ); // Add a two material materials["txt001"]=new CSolidMaterial (COLOR(0.8, 0.6, 0.264),1,0); materials["txt002"]=new CSolidMaterial (COLOR (0.5, 0.45, 0.35), 0.5,0.5); // // Add the ground CPlane *plane = new CPlane (VECTOR(0,1,0), 0.0); plane->setMaterial (materials["txt001"]); //objects.push_back (plane); // This is a very simply parser!! while (!feof(f)) { char buf[512]; fgets (buf, 511, f); if (strncmp (buf, "sphere", 6) == 0) { char material[64]; double x,y,z, rad; sscanf (buf, "sphere %s %lf %lf %lf %lf\n", material, &rad, &x,&y,&z); CSphere *sph = new CSphere(rad); sph->setLocation (VECTOR(x,z,y)); sph->setMaterial (materials["txt002"]); objects.push_back (sph); } } // Add 3 white lights // lights.push_back (new CLight(VECTOR ( 4, 2, 3), COLOR (1,1,1))); lights.push_back (new CLight(VECTOR ( 1, 4,-4), COLOR (1,1,1))); lights.push_back (new CLight(VECTOR (-3, 5, 1), COLOR (1,1,1))); fclose (f); return true; }
/*-<==>----------------------------------------------------------------- / Defines the scene /----------------------------------------------------------------------*/ void CRayTracer::load () { // Add the camera looking at the origin camera.setView (VECTOR(0, 50, 400), VECTOR (0,0,0)); camera.setRenderParameters (640,480,60); // Define some materials materials["orange"] = new CSolidMaterial (COLOR (1, 0.301, 0.074), 0.1); materials["blue"] = new CSolidMaterial (COLOR (0.0, 0.2, 0.8), 0.0); // materials["red"] = new CSolidMaterial (COLOR (0.8, 0.2, 0.0), 0.5); materials["green"] = new CSolidMaterial (COLOR (0.1, 0.8, 0.0), 0.7); materials["grey"] = new CSolidMaterial (COLOR (0.5, 0.5, 0.5), 0.5); materials["escacs"] = new CCheckerMaterial(materials["red"], materials["green"],100); materials["glass"] = new CTransparentMaterial(COLOR(0.1,0.1,0.2),1.0); // Add a sphere CSphere *sph = new CSphere(50); sph->setLocation (VECTOR(0,-100,0)); sph->setMaterial (materials["grey"]); objects.push_back (sph); // Add a sphere sph = new CSphere(50); sph->setLocation (VECTOR(0,100,0)); sph->setMaterial (materials["blue"]); objects.push_back (sph); // Add a sphere sph = new CSphere(50); sph->setLocation (VECTOR(0,210,0)); sph->setMaterial (materials["red"]); objects.push_back (sph); // Add a sphere sph = new CSphere(50); sph->setLocation (VECTOR(200,50,100)); sph->setMaterial (materials["glass"]); //sph->setMaterial (materials["green"]); objects.push_back (sph); // Add a sphere sph = new CSphere(50); sph->setLocation (VECTOR(200,50,0)); sph->setMaterial (materials["orange"]); objects.push_back (sph); // And now for something completely different // CCylinder* cyl = new CCylinder(100,50); // cyl->setLocation (VECTOR(85,0,120)); // cyl->setMaterial (materials["grey"]); // objects.push_back(cyl); /*CCylinder* cyl = new CCylinder(100,50); cyl->setLocation (VECTOR(150,0,100)); cyl->setMaterial (materials["green"]); objects.push_back(cyl);*/ // Add the ground CPlane *plane = new CPlane (VECTOR(0,1,0), 0); plane->setMaterial (materials["escacs"]); objects.push_back (plane); // Add a single white light CLight *light = new CLight(VECTOR (400,200,50), COLOR (1,1,1)); lights.push_back (light); }