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

[edição não verificada][edição verificada]
Conteúdo apagado Conteúdo adicionado
Linha 282:
</source>
 
== Passaremos as verticesvértices do tringulotriângulo para o Vertex Shader ==
 
Nos mencionamos que passaríamos cada vértice do triângulo para o vertex shader, usando o atributo <code>coord2d</code>.
Aqui é como declaremos ele em nosso código C.
 
Primeiro vamos criar uma segunda variável global:
 
 
<source lang="c">
GLint attribute_coord2d;
</source>
 
terminaremos nosso <code>init_resources</code> com:
 
<source lang="c">
const char* attribute_name = "coord2d";
attribute_coord2d = glGetAttribLocation(program, attribute_name);
if (attribute_coord2d == -1) {
fprintf(stderr, "Could not bind attribute %s\n", attribute_name);
return 0;
}
 
return 1;
}
</source>
 
Agora nós passaremos nossas vértices do triângulo para o vertex shader.
Vamos escrever em nossa função <code>onDisplay</code>. cada seção é explicado nos comentários:
 
<source lang="c">
void onDisplay()
{
/* Plano de fundo branco */
glClearColor(1.0, 1.0, 1.0, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
 
glUseProgram(program);
glEnableVertexAttribArray(attribute_coord2d);
GLfloat triangle_vertices[] = {
0.0, 0.8,
-0.8, -0.8,
0.8, -0.8,
};
/* Descreveremos nossa array de vértices para o OpenGL (ele não pode descobrir o formato automaticamente)*/
glVertexAttribPointer(
attribute_coord2d, // atributo
2, // numero de elementos por vértice, que é (x,y)
GL_FLOAT, // o tipo de cada elemento
GL_FALSE, // Como os nossos valores são falsos.
0, // sem informação extra em cada posição.
triangle_vertices // pontos para a array do C.
);
/* Puxando cada elemento do nosso buffer_vertices para o vertex shader */
glDrawArrays(GL_TRIANGLES, 0, 3);
glDisableVertexAttribArray(attribute_coord2d);
 
/* Mostrando os resultados. */
glutSwapBuffers();
}
</source>
O <code>glVertexAttribPointer</code> chamará o OpenGL para recuperar cada vertices que foi criada no buffer de dados do <code>init_resources</code> e passará para o vertex shader. Estes vertices definirão a posição de cada ponto na tela, formando um triângulo, cujo os pixel são coloridos pelo fragment shader.
 
Nota: em nosso próximo tutorial será o introduzido o conceito de Vertex Buffers Objects, que é levemente mais complexo e uma novidade para guarda os vértices na placa gráfica.
 
Agora só sobrou a parte do <code>free_resources</code>, que limpará tudo quando sairmos do programa.
Não necessário neste caso especifico, mas é bom ter esta estrutura em seus aplicativos:
 
<source lang="c">
void free_resources()
{
glDeleteProgram(program);
}
</source>
 
Nosso primeiro tutorial de OpenGL 2.0 está completo!
 
== Referencias ==