bool render() { // Bind effect renderer::bind(eff); // Create MVP matrix mat4 M(1.0f); 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 // Render geometry renderer::render(geom); return true; }
bool render() { // ********************************* // Set render target to shadow map renderer::set_render_target(shadow); // Clear depth buffer bit glClear(GL_DEPTH_BUFFER_BIT); // Set render mode to cull face glCullFace(GL_FRONT); // ********************************* // Bind shader renderer::bind(shadow_eff); // Render meshes for (auto &e : meshes) { auto m = e.second; // Create MVP matrix auto M = m.get_transform().get_transform_matrix(); // ********************************* // View matrix taken from shadow map auto V = shadow.get_view(); // ********************************* auto P = cam.get_projection(); auto MVP = P * V * M; // Set MVP matrix uniform glUniformMatrix4fv(shadow_eff.get_uniform_location("MVP"), 1, GL_FALSE, value_ptr(MVP)); // Render mesh renderer::render(m); } // ********************************* // Set render target back to the screen renderer::set_render_target(); // Set cull face to back glCullFace(GL_BACK); // ********************************* return true; }
bool render() { // Bind effect renderer::bind(eff); mat4 S, R, M; // ********************************* // Create rotation matrix and scale matrix // Set M to be the combination of scale and rotation - make sure you have the correct order R = rotate(mat4(1.0f), theta, vec3(0.0f, 0.0f, 1.0f)); S = scale(mat4(1.0f), vec3(s, s, s)); M = R * S; // ********************************* // Create MVP 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)); // Render geometry renderer::render(geom); return true; }
bool render() { // 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)); // ********************************* // Bind texture to renderer // Set the texture value for the shader here // ********************************* // Render the mesh renderer::render(m); return true; }
bool render() { // Bind effect renderer::bind(eff); mat4 T, R, S, M; // ********************************* // Create transformation matrices // ****************************** // Combine matrices to set M - remember multiplication order // ********************************* // Create MVP 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)); // Render geometry renderer::render(geom); return true; }
bool render() { mat4 M = eulerAngleXZ(theta, rho); auto V = cam.get_view(); auto P = cam.get_projection(); auto MVP = P * V * M; renderer::bind(eff); renderer::bind(tex, 0); // 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 glUniform1i(eff.get_uniform_location("tex"), 0); renderer::render(m); #if 1 renderer::bind(eff); renderer::bind(tex2, 1); 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 glUniform1i(eff.get_uniform_location("tex"), 1); renderer::render(m2); #endif // Bind effect // Create MVP matrix //auto M = m.get_transform().get_transform_matrix(); //m.get_transform().rotate(angleAxis(theta, vec3(1, 0, 0))); //m.get_transform().rotate(angleAxis(rho, vec3(0, 1, 0))); // ************************ // Bind texture to renderer // ************************ //renderer::bind(tex, 0); //renderer::bind(tex2, 1); // ***************************************** // Set the texture value for the shader here // ***************************************** //glUniform1i(eff.get_uniform_location("tex"), 0); // Render the mesh return true; }
bool render() { // ********************************* // Set render target to frame buffer // Clear frame // ********************************* // 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 // Bind Tex effect // MVP is now the identity matrix // Set MVP matrix uniform // Bind texture from frame buffer // Set the tex uniform // Set inverse width Uniform // Set inverse height Uniform // Render the screen quad // ********************************* return true; }
bool render() { // Render meshes for (auto &e : meshes) { auto m = e.second; if (CHECK_GL_ERROR) { __debugbreak(); } // Bind effect renderer::bind(eff); if (CHECK_GL_ERROR) { __debugbreak(); } // 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 // *********************** mat3 N = mat3(M); N = transpose(N); glUniformMatrix3fv(eff.get_uniform_location("N"), 1, GL_FALSE, value_ptr(N)); // ************* // Bind material // ************* material mm = m.get_material(); renderer::bind(mm, "mat"); // ********** // Bind light // ********** //glUniform4fv(eff.get_uniform_location("light.ambient_intensity"), 1, value_ptr(light.get_ambient_intensity)); renderer::bind(light, "light"); // ************ // Bind texture // ************ renderer::bind(tex, 0); // *************** // Set tex uniform // *************** glUniform1i(eff.get_uniform_location("tex"), 0); // ***************************** // Set eye position // - Get this from active camera // ***************************** vec3 eyeP = cam.get_position(); glUniform3f(eff.get_uniform_location("eye_pos"), eyeP.x, eyeP.y, eyeP.z); // 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 auto normal = m.get_transform().get_normal_matrix(); glUniformMatrix3fv(eff.get_uniform_location("N"), 1, GL_FALSE, value_ptr(normal)); // Bind material renderer::bind(materials[e.first], "mat"); renderer::bind(light, "light"); // Bind point lights renderer::bind(spots, "spots"); // Bind spot lights renderer::bind(points, "points"); // 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); // ********************************* // Render mesh renderer::render(m); } return true; }
bool render() { // !!!!!!!!!!!!!!! FIRST PASS !!!!!!!!!!!!!!!! // ********************************* // Set render target to temp frame renderer::set_render_target(temp_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); } // !!!!!!!!!!!!!!! SECOND PASS !!!!!!!!!!!!!!!! // ********************************* // Set render target to current frame renderer::set_render_target(frames[(current_frame)]); // Clear frame renderer::clear(); // Bind motion blur effect renderer::bind(motion_blur); // MVP is now the identity matrix auto MVP = glm::mat4(); // Set MVP matrix uniform glUniformMatrix4fv(motion_blur.get_uniform_location("MVP"), 1, GL_FALSE, value_ptr(MVP)); // Bind tempframe to TU 0. renderer::bind(temp_frame.get_frame(), 0); // Bind frames[(current_frame + 1) % 2] to TU 1. renderer::bind(frames[(current_frame + 1) % 2].get_frame(), 1); // Set tex uniforms glUniform1i(motion_blur.get_uniform_location("tex"), 0); glUniform1i(motion_blur.get_uniform_location("previous_frame"), 0); // Set blend factor (0.9f) glUniform1i(motion_blur.get_uniform_location("blend_factor"), 0.9f); // Render screen quad renderer::render(screen_quad); // !!!!!!!!!!!!!!! SCREEN PASS !!!!!!!!!!!!!!!! // Set render target back to the screen renderer::set_render_target(); renderer::clear(); // Set MVP matrix uniform glUniformMatrix4fv(tex_eff.get_uniform_location("MVP"), 1, GL_FALSE, value_ptr(MVP)); // Bind texture from frame buffer renderer::bind(frames[(current_frame)].get_frame(), 0); // Set the uniform glUniform1i(tex_eff.get_uniform_location("tex"), 0); // Render the screen quad renderer::render(screen_quad); // ********************************* return true; }
bool render() { // ********************************* // Set render target to shadow map // Clear depth buffer bit // Set render mode to cull face // ********************************* // Bind shader renderer::bind(shadow_eff); // Render meshes for (auto &e : meshes) { auto m = e.second; // Create MVP matrix auto M = m.get_transform().get_transform_matrix(); // View matrix taken from shadow map // ********************************* auto P = cam.get_projection(); auto MVP = P * V * M; // Set MVP matrix uniform glUniformMatrix4fv(shadow_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 // Render mesh renderer::render(m); } // ********************************* // Set render target back to the screen // Set cull face to back // ********************************* // Bind shader renderer::bind(main_eff); // Render meshes for (auto &e : meshes) { auto m = e.second; // 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(main_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(main_eff.get_uniform_location("M"), 1, GL_FALSE, value_ptr(M)); // Set N matrix uniform glUniformMatrix3fv(main_eff.get_uniform_location("N"), 1, GL_FALSE, value_ptr(m.get_transform().get_normal_matrix())); // ********************************* // Set light transform // Bind material // Bind spot lights // Bind texture // Set tex uniform // Set eye position // Bind shadow map texture - use texture unit 1 // Render mesh // ********************************* } return true; }