bool render() { // ********************************* // Set render target to frame buffer renderer::set_render_target(frame); // Clear frame renderer::clear(); // ********************************* // Render meshes for (auto &e : meshes) { auto m = e.second; // Bind effect renderer::bind(eff); // Create MVP matrix auto M = m.get_transform().get_transform_matrix(); auto V = cam.get_view(); auto P = cam.get_projection(); auto MVP = P * V * M; // Set MVP matrix uniform glUniformMatrix4fv(eff.get_uniform_location("MVP"), 1, GL_FALSE, value_ptr(MVP)); // Create MV matrix auto MV = V * M; // Set MV matrix uniform glUniformMatrix4fv(eff.get_uniform_location("MV"), 1, GL_FALSE, value_ptr(MV)); // Set M matrix uniform glUniformMatrix4fv(eff.get_uniform_location("M"), 1, GL_FALSE, value_ptr(M)); // Set N matrix uniform glUniformMatrix3fv(eff.get_uniform_location("N"), 1, GL_FALSE, value_ptr(m.get_transform().get_normal_matrix())); // Bind material renderer::bind(m.get_material(), "mat"); // Bind light renderer::bind(light, "light"); // Bind texture renderer::bind(tex, 0); // Set tex uniform glUniform1i(eff.get_uniform_location("tex"), 0); // Set eye position glUniform3fv(eff.get_uniform_location("eye_pos"), 1, value_ptr(cam.get_position())); // Render mesh renderer::render(m); } // ********************************* // Set render target back to the screen renderer::set_render_target(); // Bind Tex effect renderer::bind(tex_eff); // MVP is now the identity matrix auto MVP = glm::mat4(); // Set MVP matrix uniform glUniformMatrix4fv(tex_eff.get_uniform_location("MVP"), 1, GL_FALSE, value_ptr(MVP)); // Bind texture from frame buffer renderer::bind(frame.get_frame(), 0); // Set the tex uniform glUniform1i(tex_eff.get_uniform_location("tex"), 0); // Render the screen quad renderer::render(screen_quad); // ********************************* return true; }
bool render() { // Render meshes for (auto &e : meshes) { auto m = e.second; // Bind effect renderer::bind(eff); // Create MVP matrix auto M = m.get_transform().get_transform_matrix(); auto V = cam.get_view(); auto P = cam.get_projection(); auto MVP = P * V * M; // Set MVP matrix uniform glUniformMatrix4fv(eff.get_uniform_location("MVP"), 1, GL_FALSE, value_ptr(MVP)); // ********************************* // Set M matrix uniform glUniformMatrix4fv(eff.get_uniform_location("M"), 1, GL_FALSE, value_ptr(m.get_transform().get_transform_matrix())); // Set N matrix uniform - remember - 3x3 matrix glUniformMatrix3fv(eff.get_uniform_location("N"), 1, GL_FALSE, value_ptr(m.get_transform().get_normal_matrix())); // Set material colour - specular material is white glUniform4fv(eff.get_uniform_location("material_colour"), 1, value_ptr(vec4(1.0f, 1.0f, 1.0f, 1.0f))); // Set shininess - Use 50.0f glUniform1f(eff.get_uniform_location("shininess"), 50.0f); // Set light colour - (1.0, 1.0, 1.0, 1.0) glUniform4fv(eff.get_uniform_location("light_colour"), 1, value_ptr(vec4(1.0f, 1.0f, 1.0f, 1.0f))); // Set light direction- (1.0, 1.0, -1.0) glUniform3fv(eff.get_uniform_location("light_dir"), 1, value_ptr(vec3(1.0f, 1.0f, -1.0f))); // Set eye position - Get this from active camera glUniform3fv(eff.get_uniform_location("eye_pos"), 1, value_ptr(vec3(cam.get_position()))); // ********************************* // Render mesh renderer::render(m); } return true; }
bool render() { // Render meshes for (auto &e : meshes) { auto m = e.second; // Bind effect renderer::bind(eff); // Create MVP matrix auto M = m.get_transform().get_transform_matrix(); auto V = cam.get_view(); auto P = cam.get_projection(); auto MVP = P * V * M; // Set MVP matrix uniform glUniformMatrix4fv(eff.get_uniform_location("MVP"), // Location of uniform 1, // Number of values - 1 mat4 GL_FALSE, // Transpose the matrix? value_ptr(MVP)); // Pointer to matrix data // ********************************* // Set M matrix uniform glUniformMatrix4fv(eff.get_uniform_location("M"), 1, GL_FALSE, value_ptr(M)); // Set N matrix uniform - remember - 3x3 matrix glUniformMatrix3fv(eff.get_uniform_location("N"), 1, GL_FALSE, value_ptr(m.get_transform().get_normal_matrix())); // Bind material renderer::bind(m.get_material(), "mat"); // Bind light renderer::bind(light, "point"); // Bind texture renderer::bind(tex, 0); // Set tex uniform glUniform1i(eff.get_uniform_location("tex"), 0); // Set eye position- Get this from active camera glUniform3fv(eff.get_uniform_location("eye_pos"), 1, value_ptr(cam.get_position())); // Render mesh renderer::render(m); // ********************************* } return true; }