Escolar Documentos
Profissional Documentos
Cultura Documentos
1 / 11
Preenchimento de Regies
Familiarizao com funes de preenchimento de regies utilizadas no OpenGL; Possiblidade de gerao de padro para preenchimento; Redesenhar cena baseado em informaes que foram alteradas; Utilizao de cores; Interao atravs de mouse e teclado.
2 / 11
Preenchimento de Regies
Exemplo:
preenchimento.c (disponvel em die.ufpi.br/kelson)
Caractersticas:
Desenha 4 quadrilteros Ilustra algumas formas de preenchimento Cena pode ser redesenhada Alterao de cor pela interao com o mouse
Avanado:
Utilizao de buffer duplo de desenho
3 / 11
Padro de Preenchimento
GLubyte tux[] = { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, ... 0x0, 0x8, 0x10, 0x0, 0xc, 0x30, 0x0, 0x6, 0x60, 0x0, 0x3, 0xc0, 0x0, 0x0, 0x0, ... 0x0, 0x0, 0x0,
4 / 11
Funo main()
int main(int argc, char** argv){ glutInit(&argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize (256, 256); glutInitWindowPosition (100, 100); glutCreateWindow ("Preenchendo regies"); init(); glutDisplayFunc(display); glutKeyboardFunc(keyboard); glutMouseFunc(mouse); glutMainLoop(); return 0;}
5 / 11
Funo display()
void display(void){ int i; glClear(GL_COLOR_BUFFER_BIT); glDisable(GL_POLYGON_STIPPLE); . . . glBegin(GL_POLYGON); glColor3f(1.0, 0.0, 0.0); glColor3f(0.0, 1.0, 0.0); glColor3f(0.0, 0.0, 1.0); glColor3f(1.0, 1.0, 0.0); glEnd();
glEnable(GL_POLYGON_STIPPLE); glColor3f(1.0, 0.0, 1.0); glPolygonStipple(tux); glBegin(GL_POLYGON); glVertex2i(143,113); glVertex2i(226,113); glVertex2i(226,30); glVertex2i(143,30); glEnd(); glFlush(); glutSwapBuffers(); }
Kelson Aires (kelson@ufpi.edu.br) Int. Comp. Grca - Opengl 6 / 11
Funo display()
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); GLUT_DOUBLE: Possibilita a utilizao de dois buffers para desenho glDisable(GL_POLYGON_STIPPLE); Desabilita o desenho de polgonos utilizando padres de desenho glPolygonMode(GL_BACK, GL_LINE); A parte de trs do polgono ser desenhada apenas com a linha de contorno externo (sem preenchimento)
7 / 11
Funo display()
glPolygonMode(GL_BACK, GL_FILL); GLUT_FILL: permite que o polgono seja preenchido com a cor especicada glEnable(GL_POLYGON_STIPPLE); glColor3f(1.0, 0.0, 1.0); glPolygonStipple(tux); Habilita utilizao de padro para desenho, cor do desenho e que padro deve ser utilizado (tux) glutSwapBuffers(); Troca os buffers de desenho e auxiliar (dois buffers denidos no incio do programa)
Kelson Aires (kelson@ufpi.edu.br) Int. Comp. Grca - Opengl 8 / 11
Funo glutMouseFunc()
Invocada na funo main()
glutMouseFunc(mouse);
Dene aes executadas a partir do estado do mouse mouse(int button, int state, int x, int y) Exemplo:
button: GLUT_LEFT_BUTTON state: GLUT_DOWN
9 / 11
Funo mouse()
void mouse(int button, int state, int x, int y) { switch (button) { case GLUT_LEFT_BUTTON: if (state == GLUT_DOWN) { r=(GLfloat)rand()/(RAND_MAX+1.0); g=(GLfloat)rand()/(RAND_MAX+1.0) b=(GLfloat)rand()/(RAND_MAX+1.0); glutPostRedisplay(); } break; } }
10 / 11
Funes Auxiliares
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); GLUT_DEPTH: Possibilita tratamento de profundidade glutSolidCube(); Mesmos argumentos de glutWireCube(), possibilitando desenhos de cubos slidos glEnable(GL_DEPTH_TEST); glEnable(GL_CULL_FACE); Tratamento de profundidade glutMainLoop(); // Fim da main() Uma vez chamada, entra em loop innito Executa todas as funes callbacks j registradas
Kelson Aires (kelson@ufpi.edu.br) Int. Comp. Grca - Opengl 11 / 11