Programação com OpenGL/Modern OpenGL Tutorial 04: diferenças entre revisões

Saltar para a navegação Saltar para a pesquisa
[edição não verificada][edição não verificada]
 
== Passando para matriz de transformação ==
 
Assim como vimos no tutorial anterior, vamos adicionar um novo uniform, com <code>glUniformMatrix4fv</code>:
<source lang="cpp">
/* Global */
#include <glm/gtc/type_ptr.hpp>
GLint uniform_m_transform;
</source>
<source lang="cpp">
/* init_resources() */
uniform_name = "m_transform";
uniform_m_transform = glGetUniformLocation(program, uniform_name);
if (uniform_m_transform == -1) {
fprintf(stderr, "Could not bind uniform %s\n", uniform_name);
return 0;
}
</source>
<source lang="cpp">
/* onIdle() */
glUniformMatrix4fv(uniform_m_transform, 1, GL_FALSE, glm::value_ptr(m_transform));
</source>
 
Se você não está usando o GLM, é bom passar um ponteiro para uma array GLfloat[16], deste jeito:
 
<source lang="cpp">
GLfloat matrix[16] = {...};
glUniformMatrix4fv(uniform_m_transform, 1, GL_FALSE, matrix);
</source>
 
O vertex shader apenas tem que multiplicar o vertex pela matrix, como mostraremos abaixo:
<source lang="glsl">
uniform mat4 m_transform;
void main(void) {
gl_Position = m_transform * vec4(coord3d, 1.0);
[...]
</source>
 
 
[[File:OpenGL Tutorial Triangle rotating.png|thumb|Nosso triangulo, transformado]]
Nós notaremos que ainda que temos o problema em relação ao aspecto, (caso venhamos a ver em um monitor de 16:9)
Nós corrigiremos isto no próximo tutorial de matrizes de Model-View-Projection(Modelo, visualização e Projeção)
 
== Experimentando ==
332

edições

Menu de navegação