/*
* \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);
}
Beispiel #2
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);

}
Beispiel #4
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);
}