bool load_content() { // ********************************* // Create frame buffer - use screen width and height // Create screen quad // ********************************* // Create plane mesh meshes["plane"] = mesh(geometry_builder::create_plane()); // Create scene meshes["box"] = mesh(geometry_builder::create_box()); meshes["tetra"] = mesh(geometry_builder::create_tetrahedron()); meshes["pyramid"] = mesh(geometry_builder::create_pyramid()); meshes["disk"] = mesh(geometry_builder::create_disk(20)); meshes["cylinder"] = mesh(geometry_builder::create_cylinder(20, 20)); meshes["sphere"] = mesh(geometry_builder::create_sphere(20, 20)); meshes["torus"] = mesh(geometry_builder::create_torus(20, 20, 1.0f, 5.0f)); // Transform objects meshes["box"].get_transform().scale = vec3(5.0f, 5.0f, 5.0f); meshes["box"].get_transform().translate(vec3(-10.0f, 2.5f, -30.0f)); meshes["tetra"].get_transform().scale = vec3(4.0f, 4.0f, 4.0f); meshes["tetra"].get_transform().translate(vec3(-30.0f, 10.0f, -10.0f)); meshes["pyramid"].get_transform().scale = vec3(5.0f, 5.0f, 5.0f); meshes["pyramid"].get_transform().translate(vec3(-10.0f, 7.5f, -30.0f)); meshes["disk"].get_transform().scale = vec3(3.0f, 1.0f, 3.0f); meshes["disk"].get_transform().translate(vec3(-10.0f, 11.5f, -30.0f)); meshes["disk"].get_transform().rotate(vec3(half_pi<float>(), 0.0f, 0.0f)); meshes["cylinder"].get_transform().scale = vec3(5.0f, 5.0f, 5.0f); meshes["cylinder"].get_transform().translate(vec3(-25.0f, 2.5f, -25.0f)); meshes["sphere"].get_transform().scale = vec3(2.5f, 2.5f, 2.5f); meshes["sphere"].get_transform().translate(vec3(-25.0f, 10.0f, -25.0f)); meshes["torus"].get_transform().translate(vec3(-25.0f, 10.0f, -25.0f)); meshes["torus"].get_transform().rotate(vec3(half_pi<float>(), 0.0f, 0.0f)); // Set materials // Red box meshes["box"].get_material().set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); meshes["box"].get_material().set_diffuse(vec4(1.0f, 0.0f, 0.0f, 1.0f)); meshes["box"].get_material().set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); meshes["box"].get_material().set_shininess(25.0f); // Green tetra meshes["tetra"].get_material().set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); meshes["tetra"].get_material().set_diffuse(vec4(0.0f, 1.0f, 0.0f, 1.0f)); meshes["tetra"].get_material().set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); meshes["tetra"].get_material().set_shininess(25.0f); // Blue pyramid meshes["pyramid"].get_material().set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); meshes["pyramid"].get_material().set_diffuse(vec4(0.0f, 0.0f, 1.0f, 1.0f)); meshes["pyramid"].get_material().set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); meshes["pyramid"].get_material().set_shininess(25.0f); // Yellow disk meshes["disk"].get_material().set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); meshes["disk"].get_material().set_diffuse(vec4(1.0f, 1.0f, 0.0f, 1.0f)); meshes["disk"].get_material().set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); meshes["disk"].get_material().set_shininess(25.0f); // Magenta cylinder meshes["cylinder"].get_material().set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); meshes["cylinder"].get_material().set_diffuse(vec4(1.0f, 0.0f, 1.0f, 1.0f)); meshes["cylinder"].get_material().set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); meshes["cylinder"].get_material().set_shininess(25.0f); // Cyan sphere meshes["sphere"].get_material().set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); meshes["sphere"].get_material().set_diffuse(vec4(0.0f, 1.0f, 1.0f, 1.0f)); meshes["sphere"].get_material().set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); meshes["sphere"].get_material().set_shininess(25.0f); // White torus meshes["torus"].get_material().set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); meshes["torus"].get_material().set_diffuse(vec4(1.0f, 1.0f, 1.0f, 1.0f)); meshes["torus"].get_material().set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); meshes["torus"].get_material().set_shininess(25.0f); // Load texture tex = texture("textures/checked.gif"); // Set lighting values light.set_ambient_intensity(vec4(0.3f, 0.3f, 0.3f, 1.0f)); light.set_light_colour(vec4(1.0f, 1.0f, 1.0f, 1.0f)); light.set_direction(vec3(1.0f, 1.0f, -1.0f)); // Load in shaders eff.add_shader("48_Phong_Shading/phong.vert", GL_VERTEX_SHADER); eff.add_shader("48_Phong_Shading/phong.frag", GL_FRAGMENT_SHADER); tex_eff.add_shader("27_Texturing_Shader/simple_texture.vert", GL_VERTEX_SHADER); tex_eff.add_shader("72_Blur/blur.frag", GL_FRAGMENT_SHADER); // Build effects eff.build(); tex_eff.build(); // Set camera properties cam.set_position(vec3(50.0f, 10.0f, 50.0f)); cam.set_target(vec3(0.0f, 0.0f, 0.0f)); auto aspect = static_cast<float>(renderer::get_screen_width()) / static_cast<float>(renderer::get_screen_height()); cam.set_projection(quarter_pi<float>(), aspect, 2.414f, 1000.0f); return true; }
bool load_content() { // Create plane mesh meshes["plane"] = mesh(geometry_builder::create_plane()); // Create scene meshes["box"] = mesh(geometry_builder::create_box()); meshes["tetra"] = mesh(geometry_builder::create_tetrahedron()); meshes["pyramid"] = mesh(geometry_builder::create_pyramid()); meshes["disk"] = mesh(geometry_builder::create_disk(20)); meshes["cylinder"] = mesh(geometry_builder::create_cylinder(20, 20)); meshes["sphere"] = mesh(geometry_builder::create_sphere(20, 20)); meshes["torus"] = mesh(geometry_builder::create_torus(20, 20, 1.0f, 5.0f)); // Transform objects meshes["box"].get_transform().scale = vec3(5.0f, 5.0f, 5.0f); meshes["box"].get_transform().translate(vec3(-10.0f, 2.5f, -30.0f)); meshes["tetra"].get_transform().scale = vec3(4.0f, 4.0f, 4.0f); meshes["tetra"].get_transform().translate(vec3(-30.0f, 10.0f, -10.0f)); meshes["pyramid"].get_transform().scale = vec3(5.0f, 5.0f, 5.0f); meshes["pyramid"].get_transform().translate(vec3(-10.0f, 7.5f, -30.0f)); meshes["disk"].get_transform().scale = vec3(3.0f, 1.0f, 3.0f); meshes["disk"].get_transform().translate(vec3(-10.0f, 11.5f, -30.0f)); meshes["disk"].get_transform().rotate(vec3(half_pi<float>(), 0.0f, 0.0f)); meshes["cylinder"].get_transform().scale = vec3(5.0f, 5.0f, 5.0f); meshes["cylinder"].get_transform().translate(vec3(-25.0f, 2.5f, -25.0f)); meshes["sphere"].get_transform().scale = vec3(2.5f, 2.5f, 2.5f); meshes["sphere"].get_transform().translate(vec3(-25.0f, 10.0f, -25.0f)); meshes["torus"].get_transform().translate(vec3(-25.0f, 10.0f, -25.0f)); meshes["torus"].get_transform().rotate(vec3(half_pi<float>(), 0.0f, 0.0f)); // ********************************* // Set materials // - all emissive is black // - all specular is white // - all shininess is 25 // Red box materials["box"].set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); materials["box"].set_diffuse(vec4(1.0f, 0.0f, 0.0f, 1.0f)); materials["box"].set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); materials["box"].set_shininess(25.0f); // Green tetra materials["tetra"].set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); materials["tetra"].set_diffuse(vec4(0.0f, 1.0f, 0.0f, 1.0f)); materials["tetra"].set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); materials["tetra"].set_shininess(25.0f); // Blue pyramid materials["pyramid"].set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); materials["pyramid"].set_diffuse(vec4(0.0f, 0.0f, 1.0f, 1.0f)); materials["pyramid"].set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); materials["pyramid"].set_shininess(25.0f); // Yellow disk materials["disk"].set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); materials["disk"].set_diffuse(vec4(0.0f, 1.0f, 1.0f, 1.0f)); materials["disk"].set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); materials["disk"].set_shininess(25.0f); // Magenta cylinder materials["cylinder"].set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); materials["cylinder"].set_diffuse(vec4(1.0f, 0.0f, 1.0f, 1.0f)); materials["cylinder"].set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); materials["cylinder"].set_shininess(25.0f); // Cyan sphere materials["sphere"].set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); materials["sphere"].set_diffuse(vec4(0.75f, 1.0f, 1.0f, 1.0f)); materials["sphere"].set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); materials["sphere"].set_shininess(25.0f); // White torus materials["torus"].set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); materials["torus"].set_diffuse(vec4(1.0f, 1.0f, 1.0f, 1.0f)); materials["torus"].set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); materials["torus"].set_shininess(25.0f); // ********************************* // Load texture tex = texture("textures/checker2.png"); // Set lighting values // ********************************* // Point 0, Position (-25, 5, -15) // Red, 20 range points[0].set_position(vec3(-25, 5, -15)); points[0].set_light_colour(vec4(1, 0, 0, 1)); points[0].set_range(20); // Point 1, Position (-25, 5, -35) // Red,20 range points[1].set_position(vec3(-25, 5, -35)); points[1].set_light_colour(vec4(1, 0, 0, 1)); points[1].set_range(20); // Point 2,Position (-10, 5, -15) // Red,20 range points[2].set_position(vec3(-10, 5, -15)); points[2].set_light_colour(vec4(1, 0, 0, 1)); points[2].set_range(20); // Point 3,Position (-10, 5, -35) // Red,20 range points[3].set_position(vec3(-10, 5, -35)); points[3].set_light_colour(vec4(1, 0, 0, 1)); points[3].set_range(20); // Spot 0, Position (-25, 10, -15) // Green, Direction (1, -1, -1) normalized // 20 range,0.5 power spots[0].set_position(vec3(-25, 10, -15)); spots[0].set_light_colour(vec4(0, 1, 0, 1)); spots[0].set_range(20); spots[0].set_power(0.5f); spots[0].set_direction(normalize(vec3(1, -1, -1))); // Spot 1,Position (-25, 10, -35) // Green,Direction (1, -1, 1) normalized // 20 range,0.5 power spots[1].set_position(vec3(-25, 10, -15)); spots[1].set_light_colour(vec4(0, 1, 0, 1)); spots[1].set_range(20); spots[1].set_power(0.5f); spots[1].set_direction(normalize(vec3(1, -1, 1))); // Spot 2,Position (-10, 10, -15) // Green,Direction (-1, -1, -1) normalized // 20 range,0.5 power spots[2].set_position(vec3(-25, 10, -15)); spots[2].set_light_colour(vec4(0, 1, 0, 1)); spots[2].set_range(20); spots[2].set_power(0.5f); spots[2].set_direction(normalize(vec3(-1, -1, -1))); // Spot 3,Position (-10, 10, -35) // Green,Direction (-1, -1, 1) normalized // 20 range,0.5 power spots[3].set_position(vec3(-25, 10, -15)); spots[3].set_light_colour(vec4(0, 1, 0, 1)); spots[3].set_range(20); spots[3].set_power(0.5f); spots[3].set_direction(normalize(vec3(-1, -1, -1))); // Spot 4,Position (-17.5, 15, -25) // Blue,Direction (0, -1, 0) // 30 range,1.0 power spots[4].set_position(vec3(-25, 10, -15)); spots[4].set_light_colour(vec4(0, 0, 1, 1)); spots[4].set_range(20); spots[4].set_power(1.0f); spots[4].set_direction(normalize(vec3(0, -1, 0))); // Set lighting values light.set_ambient_intensity(vec4(0.3f, 0.3f, 0.3f, 1.0f)); light.set_direction(vec3(1.0f, 1.0f, -1.0f)); light.set_light_colour(vec4(1.0f, 1.0f, 1.0f, 1.0f)); // Load in shaders eff.add_shader("52_Multifile_Shaders/shader.vert", GL_VERTEX_SHADER); // Name of fragment shaders required vector<string> frag_shaders{ "52_Multifile_Shaders/shader.frag", "shaders/part_direction.frag", "shaders/part_point.frag", "shaders/part_spot.frag" }; eff.add_shader(frag_shaders, GL_FRAGMENT_SHADER); // Build effect eff.build(); // Set camera properties cam.set_position(vec3(50.0f, 10.0f, 50.0f)); cam.set_target(vec3(0.0f, 0.0f, 0.0f)); cam.set_projection(quarter_pi<float>(), renderer::get_screen_aspect(), 0.1f, 1000.0f); return true; }
bool load_content() { // Create plane mesh meshes["plane"] = mesh(geometry_builder::create_plane()); // Create scene meshes["box"] = mesh(geometry_builder::create_box()); meshes["tetra"] = mesh(geometry_builder::create_tetrahedron()); meshes["pyramid"] = mesh(geometry_builder::create_pyramid()); meshes["disk"] = mesh(geometry_builder::create_disk(20)); meshes["cylinder"] = mesh(geometry_builder::create_cylinder(20, 20)); meshes["sphere"] = mesh(geometry_builder::create_sphere(20, 20)); meshes["torus"] = mesh(geometry_builder::create_torus(20, 20, 1.0f, 5.0f)); // Transform objects meshes["box"].get_transform().scale = vec3(5.0f, 5.0f, 5.0f); meshes["box"].get_transform().translate(vec3(-10.0f, 2.5f, -30.0f)); meshes["tetra"].get_transform().scale = vec3(4.0f, 4.0f, 4.0f); meshes["tetra"].get_transform().translate(vec3(-30.0f, 10.0f, -10.0f)); meshes["pyramid"].get_transform().scale = vec3(5.0f, 5.0f, 5.0f); meshes["pyramid"].get_transform().translate(vec3(-10.0f, 7.5f, -30.0f)); meshes["disk"].get_transform().scale = vec3(3.0f, 1.0f, 3.0f); meshes["disk"].get_transform().translate(vec3(-10.0f, 11.5f, -30.0f)); meshes["disk"].get_transform().rotate(vec3(half_pi<float>(), 0.0f, 0.0f)); meshes["cylinder"].get_transform().scale = vec3(5.0f, 5.0f, 5.0f); meshes["cylinder"].get_transform().translate(vec3(-25.0f, 2.5f, -25.0f)); meshes["sphere"].get_transform().scale = vec3(2.5f, 2.5f, 2.5f); meshes["sphere"].get_transform().translate(vec3(-25.0f, 10.0f, -25.0f)); meshes["torus"].get_transform().translate(vec3(-25.0f, 10.0f, -25.0f)); meshes["torus"].get_transform().rotate(vec3(half_pi<float>(), 0.0f, 0.0f)); // *********************** // Set materials // - all emissive is black // - all specular is white // - all shininess is 25 // *********************** //map<string, material>::iterator it = materials.begin(); it!; for (auto &m : materials) { m.second.set_shininess(50); m.second.set_specular(vec4(1.0, 1.0, 1.0, 1.0)); m.second.set_emissive(vec4(0.0, 0.0, 0.0, 1.0)); } // Red box materials["box"].set_diffuse(vec4(1.0, 0.0, 0.0, 1.0)); meshes["box"].set_material(materials["box"]); // Green tetra materials["tetra"].set_diffuse(vec4(0.0, 1.0, 0.0, 1.0)); meshes["tetra"].set_material( materials["tetra"]); // Blue pyramid materials["pyramid"].set_diffuse(vec4(0.0, 0.0, 1.0, 1.0)); meshes["pyramid"].set_material(materials["pyramid"]); // Yellow disk materials["disk"].set_diffuse(vec4(1.0, 1.0, 0.0, 1.0)); meshes["disk"].set_material(materials["disk"]); // Magenta cylinder materials["cylinder"].set_diffuse(vec4(0.0, 1.0, 1.0, 1.0)); meshes["cylinder"].set_material(materials["cylinder"]); // Cyan sphere materials["sphere"].set_diffuse(vec4(1.0, 0.0, 1.0, 1.0)); meshes["sphere"].set_material(materials["sphere"]); // White torus materials["torus"].set_diffuse(vec4(1.0, 1.0, 1.0, 1.0)); meshes["torus"].set_material(materials["torus"]); // create light source meshes["light"] = mesh(geometry_builder::create_sphere(20, 20)); meshes["light"].get_transform().position = vec3(1.0f, 1.0f, -1.0f); // ************************** // Load texture - checked.gif // ************************** tex = texture("..\\resources\\textures\\checked.gif"); // ******************* // Set lighting values // ******************* // ambient intensity (0.3, 0.3, 0.3) light.set_ambient_intensity(vec4(0.3, 0.3, 0.3, 1.0)); // Light colour white light.set_light_colour(vec4(1.0f, 1.0f, 1.0f, 1.0f)); // Light direction (1.0, 1.0, -1.0) light.set_direction(vec3(1.0f, 1.0f, -1.0f)); // Load in shaders eff.add_shader("..\\resources\\shaders\\gouraud.vert", GL_VERTEX_SHADER); eff.add_shader("..\\resources\\shaders\\gouraud.frag", GL_FRAGMENT_SHADER); // Build effect eff.build(); if (CHECK_GL_ERROR) { __debugbreak(); } // Set camera properties cam.set_position(vec3(50.0f, 10.0f, 50.0f)); cam.set_target(vec3(0.0f, 0.0f, 0.0f)); auto aspect = static_cast<float>(renderer::get_screen_width()) / static_cast<float>(renderer::get_screen_height()); cam.set_projection(quarter_pi<float>(), aspect, 2.414f, 1000.0f); if (CHECK_GL_ERROR) { __debugbreak(); } return true; }
bool load_content() { // ********************************* // Create 2 frame buffers - use screen width and height frames[0] = frame_buffer(renderer::get_screen_width(), renderer::get_screen_height()); frames[1] = frame_buffer(renderer::get_screen_width(), renderer::get_screen_height()); // Create a temp framebuffer temp_frame = frame_buffer(renderer::get_screen_width(), renderer::get_screen_height()); // Create screen quad vector<vec3> positions{ vec3(-1.0f, -1.0f, 0.0f), vec3(1.0f, -1.0f, 0.0f), vec3(-1.0f, 1.0f, 0.0f), vec3(1.0f, 1.0f, 0.0f) }; vector<vec2> tex_coords{ vec2(0.0, 0.0), vec2(1.0f, 0.0f), vec2(0.0f, 1.0f), vec2(1.0f, 1.0f) }; screen_quad.add_buffer(positions, BUFFER_INDEXES::POSITION_BUFFER); screen_quad.add_buffer(tex_coords, BUFFER_INDEXES::TEXTURE_COORDS_0); screen_quad.set_type(GL_TRIANGLE_STRIP); // ********************************* // Create plane mesh meshes["plane"] = mesh(geometry_builder::create_plane()); // Create scene meshes["box"] = mesh(geometry_builder::create_box()); meshes["tetra"] = mesh(geometry_builder::create_tetrahedron()); meshes["pyramid"] = mesh(geometry_builder::create_pyramid()); meshes["disk"] = mesh(geometry_builder::create_disk(20)); meshes["cylinder"] = mesh(geometry_builder::create_cylinder(20, 20)); meshes["sphere"] = mesh(geometry_builder::create_sphere(20, 20)); meshes["torus"] = mesh(geometry_builder::create_torus(20, 20, 1.0f, 5.0f)); // Transform objects meshes["box"].get_transform().scale = vec3(5.0f, 5.0f, 5.0f); meshes["box"].get_transform().translate(vec3(-10.0f, 2.5f, -30.0f)); meshes["tetra"].get_transform().scale = vec3(4.0f, 4.0f, 4.0f); meshes["tetra"].get_transform().translate(vec3(-30.0f, 10.0f, -10.0f)); meshes["pyramid"].get_transform().scale = vec3(5.0f, 5.0f, 5.0f); meshes["pyramid"].get_transform().translate(vec3(-10.0f, 7.5f, -30.0f)); meshes["disk"].get_transform().scale = vec3(3.0f, 1.0f, 3.0f); meshes["disk"].get_transform().translate(vec3(-10.0f, 11.5f, -30.0f)); meshes["disk"].get_transform().rotate(vec3(half_pi<float>(), 0.0f, 0.0f)); meshes["cylinder"].get_transform().scale = vec3(5.0f, 5.0f, 5.0f); meshes["cylinder"].get_transform().translate(vec3(-25.0f, 2.5f, -25.0f)); meshes["sphere"].get_transform().scale = vec3(2.5f, 2.5f, 2.5f); meshes["sphere"].get_transform().translate(vec3(-25.0f, 10.0f, -25.0f)); meshes["torus"].get_transform().translate(vec3(-25.0f, 10.0f, -25.0f)); meshes["torus"].get_transform().rotate(vec3(half_pi<float>(), 0.0f, 0.0f)); // Create mesh to chase meshes["chaser"] = mesh(geometry_builder::create_box()); meshes["chaser"].get_transform().position = vec3(0.0f, 0.5f, 0.0f); // Set materials // Red box meshes["box"].get_material().set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); meshes["box"].get_material().set_diffuse(vec4(1.0f, 0.0f, 0.0f, 1.0f)); meshes["box"].get_material().set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); meshes["box"].get_material().set_shininess(25.0f); // Green tetra meshes["tetra"].get_material().set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); meshes["tetra"].get_material().set_diffuse(vec4(0.0f, 1.0f, 0.0f, 1.0f)); meshes["tetra"].get_material().set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); meshes["tetra"].get_material().set_shininess(25.0f); // Blue pyramid meshes["pyramid"].get_material().set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); meshes["pyramid"].get_material().set_diffuse(vec4(0.0f, 0.0f, 1.0f, 1.0f)); meshes["pyramid"].get_material().set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); meshes["pyramid"].get_material().set_shininess(25.0f); // Yellow disk meshes["disk"].get_material().set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); meshes["disk"].get_material().set_diffuse(vec4(1.0f, 1.0f, 0.0f, 1.0f)); meshes["disk"].get_material().set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); meshes["disk"].get_material().set_shininess(25.0f); // Magenta cylinder meshes["cylinder"].get_material().set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); meshes["cylinder"].get_material().set_diffuse(vec4(1.0f, 0.0f, 1.0f, 1.0f)); meshes["cylinder"].get_material().set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); meshes["cylinder"].get_material().set_shininess(25.0f); // Cyan sphere meshes["sphere"].get_material().set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); meshes["sphere"].get_material().set_diffuse(vec4(0.0f, 1.0f, 1.0f, 1.0f)); meshes["sphere"].get_material().set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); meshes["sphere"].get_material().set_shininess(25.0f); // White torus meshes["torus"].get_material().set_emissive(vec4(0.0f, 0.0f, 0.0f, 1.0f)); meshes["torus"].get_material().set_diffuse(vec4(1.0f, 1.0f, 1.0f, 1.0f)); meshes["torus"].get_material().set_specular(vec4(1.0f, 1.0f, 1.0f, 1.0f)); meshes["torus"].get_material().set_shininess(25.0f); // Load texture tex = texture("textures/checked.gif"); // Set lighting values light.set_ambient_intensity(vec4(0.3f, 0.3f, 0.3f, 1.0f)); light.set_light_colour(vec4(1.0f, 1.0f, 1.0f, 1.0f)); light.set_direction(vec3(1.0f, 1.0f, -1.0f)); // Load in shaders eff.add_shader("48_Phong_Shading/phong.vert", GL_VERTEX_SHADER); eff.add_shader("48_Phong_Shading/phong.frag", GL_FRAGMENT_SHADER); motion_blur.add_shader("27_Texturing_Shader/simple_texture.vert", GL_VERTEX_SHADER); motion_blur.add_shader("73_Motion_Blur/motion_blur.frag", GL_FRAGMENT_SHADER); tex_eff.add_shader("27_Texturing_Shader/simple_texture.vert", GL_VERTEX_SHADER); tex_eff.add_shader("27_Texturing_Shader/simple_texture.frag", GL_FRAGMENT_SHADER); // Build effects eff.build(); motion_blur.build(); tex_eff.build(); // Set camera properties cam.set_pos_offset(vec3(0.0f, 2.0f, 10.0f)); cam.set_springiness(0.5f); cam.move(meshes["chaser"].get_transform().position, eulerAngles(meshes["chaser"].get_transform().orientation)); auto aspect = static_cast<float>(renderer::get_screen_width()) / static_cast<float>(renderer::get_screen_height()); cam.set_projection(quarter_pi<float>(), aspect, 2.414f, 1000.0f); return true; }