void assigment4_1_and_2() { Image img(800, 600); img.addRef(); //Set up the scene GeometryGroup scene; LWObject cow; cow.read("models/cow.obj", true); cow.addReferencesToScene(scene.primitives); scene.rebuildIndex(); BumpMirrorPhongShader sh4; sh4.diffuseCoef = float4(0.2f, 0.2f, 0, 0); sh4.ambientCoef = sh4.diffuseCoef; sh4.specularCoef = float4::rep(0.8f); sh4.specularExponent = 10000.f; sh4.reflCoef = 0.4f; sh4.addRef(); cow.materials[cow.materialMap["Floor"]].shader = &sh4; //Enable bi-linear filtering on the walls ((TexturedPhongShader*)cow.materials[cow.materialMap["Stones"]].shader.data())->diffTexture->filterMode = Texture::TFM_Bilinear; ((TexturedPhongShader*)cow.materials[cow.materialMap["Stones"]].shader.data())->amibientTexture->filterMode = Texture::TFM_Bilinear; //Set up the cameras PerspectiveCamera cam1(Point(-9.398149f, -6.266083f, 5.348377f), Point(-6.324413f, -2.961229f, 4.203216f), Vector(0, 0, 1), 30, std::make_pair(img.width(), img.height())); PerspectiveCamera cam2(Point(2.699700f, 6.437226f, 0.878297f), Point(4.337114f, 8.457443f,- 0.019007f), Vector(0, 0, 1), 30, std::make_pair(img.width(), img.height())); cam1.addRef(); cam2.addRef(); //Set up the integrator IntegratorImpl integrator; integrator.addRef(); integrator.scene = &scene; PointLightSource pls; pls.falloff = float4(0, 0, 1, 0); pls.intensity = float4::rep(0.9f); pls.position = Point(-2.473637f, 3.119330f, 9.571486f); integrator.lightSources.push_back(pls); integrator.ambientLight = float4::rep(0.1f); DefaultSampler samp; samp.addRef(); //Render Renderer r; r.integrator = &integrator; r.target = &img; r.sampler = &samp; r.camera = &cam1; r.render(); img.writePNG("result_cam1.png"); //For seeing the difference in texture filtering r.camera = &cam2; r.render(); img.writePNG("result_cam2.png"); }
void setup_and_render() { Image img(WIDTH, HEIGHT); img.addRef(); //Set up the scene GeometryGroup scene; // load scene LWObject objects; objects.read("models/cube.obj", true); objects.addReferencesToScene(scene.primitives); scene.rebuildIndex(); //apply custom shaders BumpTexturePhongShader as; as.addRef(); Image grass; grass.addRef(); grass.readPNG("models/mat.png"); Texture textureGrass; textureGrass.addRef(); textureGrass.image = &grass; as.diffTexture = &textureGrass; as.amibientTexture = &textureGrass; as.specularCoef = float4::rep(0); as.specularExponent = 10000.f; as.transparency = float4::rep(0.9); FractalLandscape f(Point(-4419,-8000,-569), Point(3581,0, -569),9, 0.1, &as, 5.0f); f.addReferencesToScene(scene.primitives); scene.rebuildIndex(); // my phong RRPhongShader glass; glass.n1 = 1.0f; glass.n2 = 1.5f; glass.diffuseCoef = float4(0.1, 0.1, 0.1, 0); glass.ambientCoef = glass.diffuseCoef; glass.specularCoef = float4::rep(0.9); glass.specularExponent = 10000; glass.transparency = float4::rep(0.9); glass.addRef(); Sphere sphere(Point(-78,1318,40), 25, &glass);; scene.primitives.push_back(&sphere); scene.rebuildIndex(); objects.materials[objects.materialMap["Glass"]].shader = &glass; //sample shader for noise ProceduralPhongShader skyShader; skyShader.addRef(); CloudTexture nt; nt.addRef(); skyShader.amibientNoiseTexture = &nt; skyShader.diffuseCoef = float4::rep(0.0f); skyShader.specularCoef = float4::rep(0.0f); // float w = skyShader.amibientNoiseTexture->perlin->width; objects.materials[objects.materialMap["Sky"]].shader = &skyShader; //Set up the cameras PerspectiveCamera cam1(Point(-23, 1483, 30 ), forwardForCamera((0.0)*PI/180.0), Vector(0, 0, 1), 45, std::make_pair(img.width(), img.height())); cam1.addRef(); //Set up the integrator IntegratorImpl integrator; integrator.addRef(); integrator.scene = &scene; PointLightSource pls3; pls3.falloff = float4(0, 0, 1, 0); pls3.intensity = float4::rep(0.9f); pls3.position = Point(299.5, 99, 518); integrator.lightSources.push_back(pls3); // PointLightSource pls4; // // pls4.falloff = float4(0, 0, 1, 0); // // pls4.intensity = float4::rep(0.9f); // pls4.position = Point(1289.5, 99, 518); // integrator.lightSources.push_back(pls4); areaLightSource(integrator, 0.9, 2, Point(-1180, -3860, -1718), 1000); integrator.ambientLight = float4::rep(0.1f); StratifiedSampler samp; samp.addRef(); samp.samplesX = 3; samp.samplesY = 3; //Render Renderer r; r.integrator = &integrator; r.target = &img; r.sampler = &samp; r.camera = &cam1; r.render(); img.writePNG("result.png"); }