Introdução à OpenGL Professora Isabel Harb Manssour |
16. Malha de PolígonosComo a maioria dos objetos em Computação Gráfica é representada através de uma malha de polígonos, logo abaixo é apresentada uma função que exemplifica o uso de uma malha de polígonos para fazer o desenho de um cubo. void Desenha(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glColor3f(0.0f, 0.0f, 1.0f); // Desenha um cubo glBegin(GL_QUADS); // Face posterior glNormal3f(0.0, 0.0, 1.0); // Normal da face glVertex3f(40.0, 40.0, 40.0); glVertex3f(-40.0, 40.0, 40.0); glVertex3f(-40.0, -40.0, 40.0); glVertex3f(40.0, -40.0, 40.0); glEnd(); glBegin(GL_QUADS); // Face frontal glNormal3f(0.0, 0.0, -1.0); // Normal da face glVertex3f(40.0, 40.0, -40.0); glVertex3f(40.0, -40.0, -40.0); glVertex3f(-40.0, -40.0, -40.0); glVertex3f(-40.0, 40.0, -40.0); glEnd(); glBegin(GL_QUADS); // Face lateral esquerda glNormal3f(-1.0, 0.0, 0.0); // Normal da face glVertex3f(-40.0, 40.0, 40.0); glVertex3f(-40.0, 40.0, -40.0); glVertex3f(-40.0, -40.0, -40.0); glVertex3f(-40.0, -40.0, 40.0); glEnd(); glBegin(GL_QUADS); // Face lateral direita glNormal3f(1.0, 0.0, 0.0); // Normal da face glVertex3f(40.0, 40.0, 40.0); glVertex3f(40.0, -40.0, 40.0); glVertex3f(40.0, -40.0, -40.0); glVertex3f(40.0, 40.0, -40.0); glEnd(); glBegin(GL_QUADS); // Face superior glNormal3f(0.0, 1.0, 0.0); // Normal da face glVertex3f(-40.0, 40.0, -40.0); glVertex3f(-40.0, 40.0, 40.0); glVertex3f(40.0, 40.0, 40.0); glVertex3f(40.0, 40.0, -40.0); glEnd(); glBegin(GL_QUADS); // Face inferior glNormal3f(0.0, -1.0, 0.0); // Normal da face glVertex3f(-40.0, -40.0, -40.0); glVertex3f(40.0, -40.0, -40.0); glVertex3f(40.0, -40.0, 40.0); glVertex3f(-40.0, -40.0, 40.0); glEnd(); glutSwapBuffers(); } Como a única alteração em relação ao exemplo do capítulo anterior é o desenho do cubo, só a função Desenha será descrita aqui. Quando se trabalha com uma malha, normalmente são passadas como argumento para a função glBegin() as primitivas GL_QUADS, GL_POLYGON e GL_TRIANGLES (capítulo 9). GL_TRIANGLE_STRIP e GL_QUAD_STRIP também podem ser usadas, desde que se tenha certeza de que os vértices e faces estão ordenados da maneira correta. Conforme se observa no código acima, é necessário informar o vetor normal normal de cada face, pois OpenGL usa esta informação para calcular a cor de cada face de acordo com os parâmetros de iluminação. A função usada para especificar o vetor normal é glNormal3f, e os seus parâmetros são as componentes x, y e z do vetor normal, respectivamente.
Comentários, dúvidas, sugestões, envie um mail para [email protected] |
Última alteração em 27 de março de 2003.