Introdução à Computação Gráfica

                Aula – Viewport

                  Herbet Ferreira
                  herbet@di.ufpb.br


18/05/2010                               1
Definição
• A viewport ou janela de visualização é a área
  retangular da janela gráfica onde é desenhada
  a imagem final produzida.




18/05/2010                                        2
Viewport em OpenGL
• glViewport(x, y, width, height)
   – Define o visor na janela, onde x e y especificam o
     canto inferior esquerdo e width e height as suas
     dimensões;
   – Por padrão, o visor ocupa a área gráfica total da
     janela;
   – Podem existir vários visores dentro da janela;
   – Para utilizar glViewport a função glMatrixMode
     deve ser habilitada com GL_VIEWPORT.

18/05/2010                                            3
Viewport em OpenGL
• Como já foi referido, se glViewport(x, y,
  width, height) NÃO é EXPLICITAMENTE
  usado no programa, o visor por padrão é toda
  a área gráfica da janela;
• Um exemplo de programa que retrata esta
  situação:
      – O visor por padrão tem a área 500x500 e é
        definido por glutInitWindowSize(500,500) no
        programa principal.
18/05/2010                                        4
Exemplo
int main(int argc, char ** argv)
{
     glutInit(&argc, argv);
     glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE);

         glutInitWindowSize( 500,500 );
         glutCreateWindow(“Aula – Viewport”);
         glutDisplayFunc(draw);
         glutKeyboardFunc(keyboard);

         glutMainLoop();
         return 0;
}




18/05/2010                                           5
Viewport em OpenGL
• Um visor é EXPLICITAMENTE definido pela função

             glViewport(x, y, width, height);

• O visor pode ou não ocupar toda a área gráfica da janela de
  interface.

• Podem existir vários visores na janela de interface
  simultaneamente.

• A viewport deve ser definida antes da definição do tipo de projeção,
  sendo esta última podendo ser definida através de:
      – glutOrtho2D, glOrtho, gluPerspective



18/05/2010                                                           6
Exemplo
void draw(){
    glClear ( GL_COLOR_BUFFER_BIT );

       glMatrixMode(GL_VIEWPORT);
       glViewport(0, 0, 250, 250);

       glMatrixMode(GL_PROJECTION);
       glLoadIdentity();
       gluPerspective(300, 1, 0.5, 400);

       glColor3f(0, 0, 1);
       glRectf(0.0, 0.0, 10.0, 30.0);

       glutSwapBuffers();
}


18/05/2010                                 7
Exemplo
void draw(){
    glClear ( GL_COLOR_BUFFER_BIT );

       glViewport(0, 0, 250, 250);
       glMatrixMode(GL_PROJECTION);
       glLoadIdentity();
       gluPerspective(300, 1, 0.5, 400);
       glColor3f(0, 0, 1);
       glRectf(0.0, 0.0, 10.0, 30.0);

       glViewport(250,250,250,250);

       glColor3f( 1, 0, 0 );
       glRectf(0.0,0.0,10.0,30.0);

       glutSwapBuffers();
}

18/05/2010                                 8
Exercício
• Construa um programa em OpenGL que utilize
  duas viewports. Na primeira viewport ative a
  função z-buffer.
      – Utilizar o exercício da aula anterior!




18/05/2010                                       9

Viewport (OpenGL)

  • 1.
    Introdução à ComputaçãoGráfica Aula – Viewport Herbet Ferreira herbet@di.ufpb.br 18/05/2010 1
  • 2.
    Definição • A viewportou janela de visualização é a área retangular da janela gráfica onde é desenhada a imagem final produzida. 18/05/2010 2
  • 3.
    Viewport em OpenGL •glViewport(x, y, width, height) – Define o visor na janela, onde x e y especificam o canto inferior esquerdo e width e height as suas dimensões; – Por padrão, o visor ocupa a área gráfica total da janela; – Podem existir vários visores dentro da janela; – Para utilizar glViewport a função glMatrixMode deve ser habilitada com GL_VIEWPORT. 18/05/2010 3
  • 4.
    Viewport em OpenGL •Como já foi referido, se glViewport(x, y, width, height) NÃO é EXPLICITAMENTE usado no programa, o visor por padrão é toda a área gráfica da janela; • Um exemplo de programa que retrata esta situação: – O visor por padrão tem a área 500x500 e é definido por glutInitWindowSize(500,500) no programa principal. 18/05/2010 4
  • 5.
    Exemplo int main(int argc,char ** argv) { glutInit(&argc, argv); glutInitDisplayMode( GLUT_RGB | GLUT_DOUBLE); glutInitWindowSize( 500,500 ); glutCreateWindow(“Aula – Viewport”); glutDisplayFunc(draw); glutKeyboardFunc(keyboard); glutMainLoop(); return 0; } 18/05/2010 5
  • 6.
    Viewport em OpenGL •Um visor é EXPLICITAMENTE definido pela função glViewport(x, y, width, height); • O visor pode ou não ocupar toda a área gráfica da janela de interface. • Podem existir vários visores na janela de interface simultaneamente. • A viewport deve ser definida antes da definição do tipo de projeção, sendo esta última podendo ser definida através de: – glutOrtho2D, glOrtho, gluPerspective 18/05/2010 6
  • 7.
    Exemplo void draw(){ glClear ( GL_COLOR_BUFFER_BIT ); glMatrixMode(GL_VIEWPORT); glViewport(0, 0, 250, 250); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(300, 1, 0.5, 400); glColor3f(0, 0, 1); glRectf(0.0, 0.0, 10.0, 30.0); glutSwapBuffers(); } 18/05/2010 7
  • 8.
    Exemplo void draw(){ glClear ( GL_COLOR_BUFFER_BIT ); glViewport(0, 0, 250, 250); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(300, 1, 0.5, 400); glColor3f(0, 0, 1); glRectf(0.0, 0.0, 10.0, 30.0); glViewport(250,250,250,250); glColor3f( 1, 0, 0 ); glRectf(0.0,0.0,10.0,30.0); glutSwapBuffers(); } 18/05/2010 8
  • 9.
    Exercício • Construa umprograma em OpenGL que utilize duas viewports. Na primeira viewport ative a função z-buffer. – Utilizar o exercício da aula anterior! 18/05/2010 9