/* * \brief Method that draws the polyhedron to the currently bound buffer * \param[in] shader the shader containing the uniforms to be bound in the method */ void Polyhedron::draw(Shader & shader) { glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, m_buffer_id[0]); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_buffer_id[5]); computeModelMatrix(); glm::mat4 MVP = m_projection_matrix * m_view_matrix * m_model_matrix; glm::mat3 M3x3 = glm::mat3(glm::transpose(glm::inverse(m_model_matrix))); glm::mat4 V_inv = glm::inverse(m_view_matrix); glUniformMatrix4fv(shader.getUniform("M"), 1, GL_FALSE, &m_model_matrix[0][0]); glUniformMatrix4fv(shader.getUniform("MVP"), 1, GL_FALSE, &MVP[0][0]); glUniformMatrix4fv(shader.getUniform("V_inv"), 1, GL_FALSE, &V_inv[0][0]); glUniformMatrix3fv(shader.getUniform("M3x3"), 1, GL_FALSE, &M3x3[0][0]); glUniform3fv(shader.getUniform("material_color"), 1, &m_color[0]); glUniform1i(shader.getUniform("normal_computation_mode"), m_normal_computation_mode); //Patches for geometry shader glDrawElements(GL_PATCHES, GLsizei(m_indexes.size()), GL_UNSIGNED_SHORT, 0); glDisableVertexAttribArray(0); }
/* * \brief Method that draws the model to the currently bound buffer * \param[in] shader the shader containing the uniforms to be bound in the method */ void Model::draw(Shader & shader) { //Vertices, uvs, normals, tangents and bitangents buffers glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, m_buffer_id[0]); glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(1); glBindBuffer(GL_ARRAY_BUFFER, m_buffer_id[1]); glVertexAttribPointer(1, 2, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(2); glBindBuffer(GL_ARRAY_BUFFER, m_buffer_id[2]); glVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(3); glBindBuffer(GL_ARRAY_BUFFER, m_buffer_id[3]); glVertexAttribPointer(3, 3, GL_FLOAT, GL_FALSE, 0, 0); glEnableVertexAttribArray(4); glBindBuffer(GL_ARRAY_BUFFER, m_buffer_id[4]); glVertexAttribPointer(4, 3, GL_FLOAT, GL_FALSE, 0, 0); //Diffuse color, normalmap and specular color uniforms glActiveTexture(GL_TEXTURE0); glBindTexture(GL_TEXTURE_2D, m_texture_id[0]); glUniform1i(shader.getUniform("tex"), 0); glActiveTexture(GL_TEXTURE1); glBindTexture(GL_TEXTURE_2D, m_texture_id[1]); glUniform1i(shader.getUniform("normalmap"), 1); glActiveTexture(GL_TEXTURE2); glBindTexture(GL_TEXTURE_2D, m_texture_id[2]); glUniform1i(shader.getUniform("specularmap"), 2); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, m_buffer_id[5]); //Compute the model matrix right before the draw call to get a precise position computeModelMatrix(); glm::mat4 MVP = m_projection_matrix * m_view_matrix * m_model_matrix; glm::mat3 M3x3 = glm::mat3(glm::transpose(glm::inverse(m_model_matrix))); glUniformMatrix4fv(shader.getUniform("MVP"), 1, GL_FALSE, &MVP[0][0]); glUniformMatrix3fv(shader.getUniform("M3x3"), 1, GL_FALSE, &M3x3[0][0]); glUniformMatrix4fv(shader.getUniform("M"), 1, GL_FALSE, &m_model_matrix[0][0]); glm::mat4 V_inv = glm::inverse(m_view_matrix); glUniformMatrix4fv(shader.getUniform("V_inv"), 1, GL_FALSE, &V_inv[0][0]); glDrawElements(GL_TRIANGLES, GLsizei(m_indexes.size()), GL_UNSIGNED_SHORT, 0); glDisableVertexAttribArray(4); glDisableVertexAttribArray(3); glDisableVertexAttribArray(2); glDisableVertexAttribArray(1); glDisableVertexAttribArray(0); }
void Terrain::render(Shader *shader) { computeModelMatrix(); glUniformMatrix4fv(shader->loc_model_matrix, 1, false, glm::value_ptr(Model)); glUniform1ui(shader->loc_displacement_factor, displacement_factor); glBindVertexArray(VAO); glPatchParameteri(GL_PATCH_VERTICES, 3); glDrawElements(GL_PATCHES, n_indices, GL_UNSIGNED_INT, NULL); glBindVertexArray(0); }
/* * \brief Method that draws the curve to the currently bound buffer * \param[in] shader the shader containing the uniforms to be bound in the method */ void Curve::draw(Shader shader) { computeModelMatrix(); glEnableVertexAttribArray(0); glBindBuffer(GL_ARRAY_BUFFER, m_points_id); glVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, 0, 0); glUniformMatrix4fv(shader.getUniform("MVP"), 1, GL_FALSE, &(m_projection_matrix * m_view_matrix * m_model_matrix)[0][0]); glUniform3fv(shader.getUniform("curve_color"), 1, &m_color[0]); glDrawArrays(GL_LINE_STRIP, 0, GLsizei(m_points.size())); glDisableVertexAttribArray(0); }