11.07.2015 Views

OpenGL Avançado

OpenGL Avançado

OpenGL Avançado

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

dados e como eles estão armazenados. De maneira simplificada, um VAO registra os estados (flags)necessárias para a “configuração do VBO”.No Código 6 é exibido o uso de um VAO em conjunto com o exemplo de VBO anterior. Note quetoda a etapa de renderização do VBO (Código 3) é registrada na etapa de configuração do VAO,com exceção da chamada a função de desenho (glDrawElements()). No Código 7 a etapa derenderização é realizada. Compare com a mesma etapa do VBO.// Bind do VAOGLuint id_vao;glGenVertexArrays(1, &id_vao);glBindVertexArray(id_vao); // início do registro dos estados pelo VAO// Bind dos VBOs a serem utilizadosglBindBuffer(GL_ARRAY_BUFFER, id_vbuffer);glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, id_ibuffer);// Ativação e definição dos atributos dos vérticesglEnableVertexAttribArray(0); // TexCoordPointerglVertexAttribPointer(0, 2, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 8,(void*)(sizeof(GLfloat) * 6));glEnableVertexAttribArray(1); // NormalPointerglVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 8,(void*)(sizeof(GLfloat) * 3));glEnableVertexAttribArray(2); // VertexPointerglVertexAttribPointer(2, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat) * 8,(void*)(0));// Chamada da função de desenho NÃO DEVE SER CHAMADAglDrawElements(GL_TRIANGLES, NUM_INDICES, GL_UNSIGNED_INT, (void*)0);glBindVertexArray(0); // fim do registro dos estados pelo VAOCódigo 6. Exemplo VAO. Etapa de configuração.glBindVertexArray(id_vao);glDrawElements(GL_TRIANGLES, NUM_INDICES, GL_UNSIGNED_INT, (void*)0);glBindVertexArray(0);Código 7. Exemplo VAO. Etapa de renderização.Um VAO possui um determinado número de atributos que devem ser associados e habilitados paraque possam ser usados pelo <strong>OpenGL</strong>. Alguns exemplos de atributos são: dados de vértices, índices,vetores normais e cores. A tentativa de renderização de um VAO “vazio” irá resultar em erro.Para consultar os protótipos de função do <strong>OpenGL</strong> veja [6].5. Exibição de FPS – Frames Per SecondPassos: Calcular o FPS Guardar o estado de cada atributos ativo com o comando glPushAttrib(GLbitfieldmask). Este comando aceita diversas constantes como argumentos. Os dois mais genéricos sãoGL_ALL_ATTRIB_BITS e GL_ENABLE_BIT. Este comando tem o mesmo efeito doglPushMatrix(), só que este opera sobre pilha de atributos. Desabilitar todos os atributos com glDisable(), para não interferirem na impressão do valor doFPS, que é tratado como uma string:o Cor material (GL_COLOR_MATERIAL)o Coordenadas de textura (GL_TEXTURE_2D)o Nevoeiro (GL_FOG);1

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!