Você está na página 1de 11

Preenchimento de Regies com OpenGL

Disciplina: Introduo Computao Grca

Prof. Kelson Rmulo Teixeira Aires


Bacharelado em Cincia da Computao DIE - CCN - UFPI

Kelson Aires (kelson@ufpi.edu.br)

Int. Comp. Grca - Opengl

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.

Kelson Aires (kelson@ufpi.edu.br)

Int. Comp. Grca - Opengl

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

Kelson Aires (kelson@ufpi.edu.br)

Int. Comp. Grca - Opengl

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,

0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};

Kelson Aires (kelson@ufpi.edu.br)

Int. Comp. Grca - Opengl

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;}

Kelson Aires (kelson@ufpi.edu.br)

Int. Comp. Grca - Opengl

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();

glVertex2i(30,113); glVertex2i(113,113); glVertex2i(113,30); glVertex2i(30,30);

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)

Kelson Aires (kelson@ufpi.edu.br)

Int. Comp. Grca - Opengl

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

Kelson Aires (kelson@ufpi.edu.br)

Int. Comp. Grca - Opengl

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; } }

Kelson Aires (kelson@ufpi.edu.br)

Int. Comp. Grca - Opengl

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

Você também pode gostar