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

[edição não verificada][edição não verificada]
Conteúdo apagado Conteúdo adicionado
Linha 32:
 
== Usando 3D Points ==
 
Nossa matriz de transformação são para vertices em 3D. Mesmo que nós estejamos em 2D, vamos descrever nosso triângulo com um ponto 3D com Z = 0. de qualquer maneiro vamos mudar nosso objeto para 3D no próximo tutorial :)
 
Vamos definir ele (3 elementos por verticés) para OpenGL no triangle.cpp:
<source lang="cpp">
struct attributes {
GLfloat coord3d[3];
GLfloat v_color[3];
};
</source>
 
Agora, no init_resources()
 
<source lang="cpp">
struct attributes triangle_attributes[] = {
{{ 0.0, 0.8, 0.0}, {1.0, 1.0, 0.0}},
{{-0.8, -0.8, 0.0}, {0.0, 0.0, 1.0}},
{{ 0.8, -0.8, 0.0}, {1.0, 0.0, 0.0}}
};
 
...
 
attribute_name = "coord3d";
attribute_coord3d = glGetAttribLocation(program, attribute_name);
if (attribute_coord3d == -1) {
fprintf(stderr, "Could not bind attribute %s\n", attribute_name);
return 0;
}
</source>
Mudaremos a configuração do array de vértices em onDisplay()
 
<source lang="cpp">
glVertexAttribPointer(
attribute_coord3d, // atributo
3, // numero de elementos por vértice, que é (x,y,z)
GL_FLOAT, // o tipo de elemento
GL_FALSE, // o valor que ele está
sizeof(struct attributes), // o próximo coord3d aparecerá a cada 6 flots.
0 // deslocamento do primeiro elemento.
);
</source>
substitua as outras ocorrências de 'attribute_coord2d' correspondente e chame o shader usando a nova coordenada.
<source lang="glsl">
attribute vec3 coord3d;
[...]
void main(void) {
gl_Position = vec4(coord3d, 1.0);
</source>
 
== Criando uma Matriz de transformação ==