Cap. 4: Janelas, Visores & Recorte Gráfico

Documentos relacionados
Computação Gráfica. 5385: Licenciatura em Engenharia Informática. Cap. 3 Janelas e Visores. Janelas e Visores

Engenharia Informática Computação Gráfica

Transformações Geométricas

Transformações Geométricas

Cap. 1 Renderização 3D: Transformações Geométricas. Mestrado em Engenharia Informática (6931) 1º ano, 1º semestre

CG com OpenGL. Paulo Gandra de Sousa Sistemas Gráficos e Interactivos Instituto Superior de Engenharia do Porto

LAB. 1. Introdução à OpenGL

OpenGL, GLU e GLUT. GLUT (OpenGL Utility Toolkit) OpenGL. Linguagem. OpenGL. Esqueleto de um programa em PyOpenGL

Desenho de uma matriz de retângulos Serve de base para o exercício das cores

Estrutura de um programa gráfico

OpenGL. Licenciatura em Computação Computação Gráfica - Aula 2 (atualizada em 15/08/2018)

Computação Gráfica - OpenGl 02

Visualização. - Aula 4 -

António Costa. Paulo Roma Cavalcanti

Computação Gráfica. Engenharia de Computação. CEFET/RJ campus Petrópolis. Prof. Luis Retondaro. Aula 6. Projeções

CG 2013/2014 Primeiro Teste LEIC Alameda/Taguspark

INF1339 Computação Gráfica Tridimensional. Waldemar Celes. 2 de Agosto de 2010

OpenGL. Licenciatura em Computação Computação Gráfica - Aula 2 (atualizada em 03 ago. 2017)

Introdução à Computação Gráfica OpenGL Básico. Claudio Esperança Paulo Roma Cavalcanti

Programação Gráfica Cap 2

Uma API para geração de gráficos

n À primeira vista: basta desenhar n Uma subrotina para desenhar cada tipo de objeto n Mas... n Como fazer interação? n Como estruturar a cena?

Prof. Fernando V. Paulovich 3 de maio de SCC Computação Gráca

FCG2006 Prova sobre OpenGL e Rastreamento de Raios

Engenharia Elétrica Computação Gráfica - Aula 2 (atualizada em 22/04/2018)

Introdução a OpenGL. Profª. Alessandra Martins Coelho

CG 2015/2016 Primeiro Teste LEIC Alameda/Taguspark. Primeiro Teste

Introdução Prática à Programação em OpenGL

Introdução a OpenGL. Renato Rodrigues Oliveira da Silva Danilo Medeiros Eler

OpenGL. 35T56 Sala 3E3 Bruno Motta de Carvalho DIMAp Sala 15 Ramal 227 DIM102

Matriz de transformação

Sumário. Introdução Câmera sintética Window-to-Viewport Exercício. 29-May-13 Leandro Tonietto!2

3D no OpenGL. Visualização e Transformações Perspectiva. Transformações do Modelview. Processo

Computação Gráfica OpenGl 01

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Taguspark / Alameda. Primeiro Teste 17 de Março de 2012

Projeções e Visualização

OpenGL 3.* INF Rendering em Tempo Real. Waldemar Celes Departamento de Informática, PUC-Rio

OpenGL. Computação Gráfica ISEL/DEETC/SP Computação Gráfica

Computação Gráfica. Engenharia de Computação. CEFET/RJ campus Petrópolis. Prof. Luis Retondaro. Aula 2. Introdução a OpenGL

Câmara Virtual. Licenciatura em Engenharia Informática e de Computadores Computação Gráfica. Edward Angel, Cap. 5 Apontamentos CG

INF01046 Fundamentos de Processamento de Imagens Semestre Turma A. Prof. Manuel M. Oliveira

Transformações geométricas

CIV2802 Sistemas Gráficos para Engenharia Luiz Fernando Martha André Pereira

CG 2015/2016 Prova de Repescagem LEIC Alameda/Taguspark. 12 de Janeiro de 2016

OpenGL. Conceitos Básicos. Waldemar Celes. Tecgraf/PUC-Rio

OpenGL. Conceitos Básicos. Waldemar Celes. Tecgraf/PUC-Rio. OpenGL: o que é? Interface para programador de aplicação. Aplicação API abstrata

INF01046 Fundamentos de Processamento de Imagens. Prof. Manuel M. Oliveira

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Alameda / Taguspark. Terceiro Teste 19 de Maio de 2012

- INF Remoção de faces ocultas Aula 21

Prof. Fernando V. Paulovich 3 de maio de SCC Computação Gráca

Fundamentos de Computação Gráfica

Aula Teórico-Prática nº 2

FUNDAMENTOS E APLICAÇÕES. Luis Valente

Introdução à Programação em OpenGL. Prof. Márcio Bueno

Computação Gráfica II

Visualização por Computador: Teoria, Prática e Aplicações

André Tavares da Silva

Programação Gráfica 2D com OpenGL (Aulas 22, 24 e 25)

Seleção & feedback. Módulo 12. Sistemas Gráficos e Interação. Filipe Pacheco SGRAI 2017/18 DEI-ISEP 333. Instituto Superior de Engenharia do Porto

modelos rquicos Aula 5 Sistemas Gráficos e Interactivos Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa

Revisões. Módulos Sistemas Gráficos e Interação. Filipe Pacheco SGRAI 2017/18 DEI-ISEP 228. Instituto Superior de Engenharia do Porto

CRAb Grupo de Computação Gráfica Departamento de Computação UFC

Introdução ao OpenGL e à Programação Baseada em Eventos

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Alameda/Taguspark. 1º Exame 29 Junho de 2010

feedback Aula 8 Sistemas Gráficos e Interactivos Instituto Superior de Engenharia do Porto Paulo Gandra de Sousa

Universidade de Aveiro Departamento de Electrónica, Telecomunicações e Informática. Visualização 3D

Computação Gráfica. Introdução. Tomás A. C. Badan

OpenGL. Introdução ao OpenGL. Sistemas de Coordenadas. OpenGL 29/04/2010. Profa. M. Cristina Profa. Rosane. Application Programming Interface (API)

Visualização 3D. Soraia Raupp Musse

Computação Gráfica - 04

Visualização 2D: - Transformação window to viewport - Clipping

Universidade de Aveiro Departamento de Electrónica, Telecomunicações e Informática. Visualização 3D

OpenGL. Professora: Mercedes Gonzales Márquez

Computação Gráfica OpenGL 05 3D

Sistemas de Interfaces com o Usuário e OpenGL (com IUP ou GLUT)

Pipeline de Visualização Câmara Virtual

Projeções e Transformações em 3D

Sist. Coordenadas Câmera (SCC)

Introdução à OpenGL. SCC0250/ Computação Gráfica

OpenGL. Introdução ao OpenGL. OpenGL. OpenGL. OpenGL. OpenGL. Profa. M. Cristina Profa. Rosane

INTRODUÇÃO A OPENGL. Computação Gráfica

OpenGL. Parte I: Geometria. Waldemar Celes Departamento de Informática Tecgraf/PUC-Rio

Pedro Vasconcelos DCC/FCUP. Programação Funcional 11 a Aula Gráficos usando Gloss

OpenGL. O que é OpenGL. O Pipeline do OpenGL. Listas de Exposição

PROGRAMAÇÃO OPENGL LIVRO: TEORIA DA COMPUTAÇÃO GRÁFICA

Introdução a Prática em OpenGL

Conceitos importantes da Computação Gráfica [3]

Professor: Rodrigo Caetano Filgueira

Iluminação. Aula 6. Sistemas Gráficos e Interactivos Instituto Superior de Engenharia do Porto. Paulo Gandra de Sousa

Algoritmos de Recorte em 2D

Transformações 3D. Soraia Raupp Musse

Pipeline de Visualização Câmara Virtual

OpenGL. Alberto B. Raposo

Computação Gráfica - 13

Computação Gráfica. Licenciatura em Engenharia Informática e de Computadores Alameda / Taguspark. 1º Exame 6 de Junho de 2011

Programação 2012/2013 1º Semestre MEEC Laboratório 2 Semana de 22 de Outubro de 2012

Transformações (Cap 4.3, 4.4 e 4.6 a 4.10)

Computação Gráfica e Processamento de Imagens. recorte ( clipping ) de : o segmentos de retas o polígonos o textos. Prof.

Sistemas Gráficos Interativos. Interações

CMP513 Rendering Avançado

Transcrição:

Cap. 4: Janelas, Visores & Recorte Gráfico

Sumário Definições básicas: sistema de coordenadas globais, sistema de coordenadas do ecrã; janela de domínio de cena; janela de interface e visores de saída gráfica. Transformação janela-visor Transformação janela-visor OpenGL Serializador do processo de renderização Serializador do processo de renderização 2D em OpenGL Recorte de segmentos de recta: algoritmo de Cohen-Sutherland Recorte de polígonos Recorte no serializador OpenGL

Definições ecrã janela de dominio da cena HOUSE CLIP janela de interface janela do ecrã visor Sistema de Coordenadas Globais (Espaço do Objecto ou Domínio da Cena) É o referencial do espaço em que se encontram os objectos geométricos. É neste espaço que o modelo de aplicação é definido; por exemplo R 2. É neste espaço que a geometria do objecto é definida. Janela de Domínio da Cena (Subespaço do Domínio de Cena) Rectângulo que define a parte do domínio da cena que pretendemos visualizar. Sistema de Coordenadas do Ecrã (Espaço de Imagem) Espaço no qual a imagem é mostrada; por exemplo 800x600 pixéis. Espaço no qual a imagem rasterizada do objecto é definida. Janela de Interface (Subespaço de Imagem) Representação visual do sistema de coordenadas do ecrã para sistemas de saída baseados em janelas (sistema de coordenadas move-se com a janela de interface)

Definições (cont.) janela do domínio de cena HOUSE CLIP ecrã janela de interface visor Transformações de visualização (viewing Transformations) Processo de mapeamento de uma janela do domínio de cena (world coordinates) para um visor (screen coordinates). Visor (Subespaço de Imagem) Um rectângulo no ecrã rasterizado (ou janela de interface) que define onde a imagem irá aparecer, ou na totalidade do ecrã ou numa janela de interface. Portanto, em princípio, a mesma imagem pode ser replicada em diferentes visores (ou viewports) dentro do ecrã ou duma janela de interface.

Transformação Janela-Visor Dada uma janela e um visor, qual é a matriz de transformação que mapeia um ponto da janela em coordenadas globais num pixel do visor em coordenadas de ecrã? Esta matriz pode ser dada como a composição de 3 transformações,como é sugerido pela seguinte sequência de figuras: v y (x max,y max ) y v (u max,v max ) (u min,v min ) (x min,y min ) x x u u janela em coordenadas globais (ou de domínio de cena) janela transladada para a origem janela com tamanho alterado igual ao tamanho do visor visor transladado por (u min,v min ) para a posição final S( u! u max min, v! v max min ) T (!x min,!y min ) x max! x min y max! y min T (u min,v min )

Transformação Janela-Visor: representação matricial y y v (u max,v max ) (x max,y max ) v (u min,v min ) (x min,y min ) x x u S( u! u max min, v! v max min ) T (!x min,!y min ) x max! x min y max! y min T (u min,v min ) u M wv = T (u min,v min ).S( u max! u min x max! x min, v max! v min y max! y min ).T (!x min,!y min ) " u max! u min % $ 0 0' " 1 0 u min % $ x max! x min ' " 1 0!x $ ' $ v = $ 0 1 v min '. 0 max! v min ' min % $ ' $ 0'. y # $ 0 0 1 & ' $ max! y $ 0 1!y min ' min ' $ 0 0 1' # $ 0 0 1 & ' $ ' # $ &'

Transformação Janela-Visor: como é feita? y (x min,y min ) (x max,y max ) x Mantendo a proporcionalidade no mapeamento de (x,y) para (u,v) translação variação de tamanho v translação (u min,v min ) (u max,v max ) u x min x x max x! x min = u! u min " u = (x! x x max! x min u max! u min ). u max! u min + u min x max! x min min u min u u max y max v max y y! y min y max! y min = v! v min v max! v min " v = (y! y min ). v max! v min y max! y min + v min v y min vmin

Transformação Janela-Visor: exemplo y (u max,v max ) (x max,y max ) v (x min,y min ) x (u min,v min ) u janela(10.0,2.0,40.0,30.0) visor(100,50,250,300) 250!100 u = (x!10.0). 40.0!10.0 +100! x = 250 "100 40.0 "10.0 = 5.0 300! 50 v = (y! 5.0). 30.0! 5.0 + 50! y = 300 " 50 30.0 " 5.0 = 10.0

Transformação Janela-Visor: em OpenGL gluortho2d(left, right, bottom, top) Define uma região de visualização ortogonal 2D ou janela de domínio de cena. É definida por dois planos verticais de recorte left e right e dois planos horizontais de recorte bottom e top. A janela é (-1,1,-1,1) por defeito. Define uma matriz de projecção ortogonal 2-D. Define ainda a transformação janela-visor, o que requer a definição do visor através da seguinte função: glviewport(x, y, width, height) Define o visor na janela de interface, onde x,y especificam o canto inferior esquerdo e width, height as suas dimensões. Por defeito, o visor ocupa a área gráfica total da janela de interface. Podem existir vários visores dentro da janela de interface.

Serializador de Transformações OpenGL coordenadas do olho coordenadas de recorte coordenadas do visor da janela de interface Vertex Modelview Matrix Projection Matrix Viewport GL_MODELVIEW mode gltranslate() glrotate() glscale() glloadmatrix() glmultmatrix() glulookat() GL_PROJECTION mode glortho() gluortho2d() glfrustum() gluperspective() glviewport()

Exemplos em OpenGL Visor por defeito Um único visor Dois visores

Exemplo 1: visor por defeito Como já foi referido, se glviewport(x, y, width, height) NÃO é EXPLICITAMENTE usada no programa, o visor por defeito é toda a área gráfica da janela de interface. Veja-se o exemplo do próximo programa que retrata esta situação. O visor por defeito tem a área 500x500 e é definido por glutinitwindowsize(500,500) no programa principal.

Exemplo 1: visor por defeito /* * WV-defaultViewport.cc - Using the default viewport * Abel Gomes */ #include <OpenGL/gl.h> // Header File For The OpenGL Library #include <OpenGL/glu.h> // Header File For The GLu Library #include <GLUT/glut.h> // Header File For The GLut Library #include <stdlib.h> void draw(){ // Make background colour yellow glclearcolor( 100, 100, 0, 0 ); glclear ( GL_COLOR_BUFFER_BIT ); // Sets up the PROJECTION matrix glmatrixmode(gl_projection); glloadidentity(); gluortho2d(0.0,50.0,-10.0,40.0); // also sets up world window // Draw BLUE rectangle glcolor3f( 0, 0, 1 ); glrectf(0.0,0.0,10.0,30.0); // display rectangles glutswapbuffers(); } // end of draw()

Exemplo 1: visor por defeito (cont.) // Keyboard method to allow ESC key to quit void keyboard(unsigned char key,int x,int y) { if(key==27) exit(0); } int main(int argc, char ** argv) { glutinit(&argc, argv); // Double Buffered RGB display glutinitdisplaymode( GLUT_RGB GLUT_DOUBLE); // Set window size glutinitwindowsize( 500,500 ); glutcreatewindow( Default viewport spans the whole interface window"); // Declare the display and keyboard functions glutdisplayfunc(draw); glutkeyboardfunc(keyboard); // Start the Main Loop glutmainloop(); return 0; }

Exemplo 2: 1 visor 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. Note-se que a janela de interface e os seus visores são definidos antes da janela de domínio de cena, sendo esta últim definida através de gluortho2d(left, right, bottom, top) porque esta função também define a transformação janela-visor.

Exemplo 2: 1 visor /* * WV-singleViewport.cc - Using a single viewport * Abel Gomes */ #include <OpenGL/gl.h> // Header File For The OpenGL Library #include <OpenGL/glu.h> // Header File For The GLu Library #include <GLUT/glut.h> // Header File For The GLut Library #include <stdlib.h> void draw(){ // Make background colour yellow glclearcolor( 100, 100, 0, 0 ); glclear ( GL_COLOR_BUFFER_BIT ); // Sets up viewport spanning the left-bottom quarter of the interface window glviewport(0,0,250,250); // Sets up the PROJECTION matrix glmatrixmode(gl_projection); glloadidentity(); gluortho2d(0.0,50.0,-10.0,40.0); // also sets up world window // Draw BLUE rectangle glcolor3f( 0, 0, 1 ); glrectf(0.0,0.0,10.0,30.0); // display rectangles glutswapbuffers(); } // end of draw()

Exemplo 2: 1 visor (cont.) // Keyboard method to allow ESC key to quit void keyboard(unsigned char key,int x,int y) { if(key==27) exit(0); } int main(int argc, char ** argv) { glutinit(&argc, argv); // Double Buffered RGB display glutinitdisplaymode( GLUT_RGB GLUT_DOUBLE); // Set window size glutinitwindowsize( 500,500 ); glutcreatewindow( Single viewport spans the left-bottom interface window quarter"); // Declare the display and keyboard functions glutdisplayfunc(draw); glutkeyboardfunc(keyboard); // Start the Main Loop glutmainloop(); return 0; }

Exemplo 3: 2 visores /* * WV-twoViewports.cc - Using two viewports * Abel Gomes */ #include <OpenGL/gl.h> // Header File For The OpenGL Library #include <OpenGL/glu.h> // Header File For The GLu Library #include <GLUT/glut.h> // Header File For The GLut Library #include <stdlib.h> void draw(){ // Make background colour yellow glclearcolor( 100, 100, 0, 0 ); glclear ( GL_COLOR_BUFFER_BIT ); // Sets up FIRST viewport spanning the left-bottom quarter of the interface window glviewport(0,0,250,250); // Sets up the PROJECTION matrix glmatrixmode(gl_projection); glloadidentity(); gluortho2d(0.0,50.0,-10.0,40.0); // also sets up world window // Draw BLUE rectangle glcolor3f( 0, 0, 1 ); glrectf(0.0,0.0,10.0,30.0); // continues on next page

Exemplo 3: 2 visores (cont.) /* rest of the function draw() */ // Sets up SECOND viewport spanning the right-top quarter of the interface window glviewport(250,250,250,250); // Sets up the PROJECTION matrix glmatrixmode(gl_projection); glloadidentity(); gluortho2d(0.0,50.0,-10.0,40.0); // also sets up world window // Draw RED rectangle glcolor3f( 1, 0, 0 ); glrectf(0.0,0.0,10.0,30.0); // display rectangles glutswapbuffers(); } // end of draw()

Exemplo 3: 2 visores (cont.) // Keyboard method to allow ESC key to quit void keyboard(unsigned char key,int x,int y) { if(key==27) exit(0); } int main(int argc, char ** argv) { glutinit(&argc, argv); // Double Buffered RGB display glutinitdisplaymode( GLUT_RGB GLUT_DOUBLE); // Set window size glutinitwindowsize( 500,500 ); glutcreatewindow( Two viewports spanning the left-bottom and right-top quarters"); // Declare the display and keyboard functions glutdisplayfunc(draw); glutkeyboardfunc(keyboard); // Start the Main Loop glutmainloop(); return 0; }

Transformação Janela-Visor: nota importante Quando a janela aumenta de tamanho, a imagem no visor dimimui, e vice-versa.

Transformação Janela-Visor: aplicações Panning Mover a janela no domínio de cena Zooming Redução/Aumento do tamanho da janela

Activação automática do visor sem distorção de imagem Qual a maior imagem não-distorcida que ocupa o ecrã? R = Razão de aspecto da janela do domínio de cena Duas situações são possíveis: y world window R>W/H interface window screen y world window R<W/H interface window screen aspect ratio R viewport W/R H aspect ratio R viewport H.R H x W x W A janela é pequena em altura mas ajustada à largura do visor da janela de interface, mas algum espaço sobrará em cima/baixo. Portanto, no máximo, o visor terá largura W e altura W/R. A janela é alta a estreita comparada com a janela de interface. O visor com a mesma razão de aspecto R ocupará toda área gráfica da janela de interface em altura, mas sobrará algum espaço à esquerda/direita. Portanto,no máximo, o visor terá largura H.R e altura H.

Activação automática do visor sem distorção de imagem (cont.) y world window R>W/H interface window screen y world window R<W/H interface window screen aspect ratio R viewport W/R H aspect ratio R viewport H.R H x W x W glviewport(0,0,w,w/r); glviewport(0,0,h*r,h);

Exemplo 4: janela baixa Se a janela tem razão de aspecto R=2.0 e o ecrã da janela de interface tem altura H=200 e largura W=360, então W/H=1.8. Portanto, estamos no primeiro caso, e o visor é activado com 180 pixéis de altura e 360 pixéis de largura. y world window aspect ratio R R>W/H interface window screen viewport H W/R x W glviewport(0,0,w,w/r); glviewport(0,0,360,360/2);

Exemplo 5: janela alta Se a janela tem razão de aspecto R=1.6 e o ecrã da janela de interface tem H=200 e W=360, então W/H=1.8. y world window R<W/H interface window screen Portanto, estamos no segundo caso, e o visor é activado com 200 pixéis de altura e 320 pixéis de largura. aspect ratio R x viewport H.R W H glviewport(0,0,h*r,h); glviewport(0,0,320,200);

Estratégia de manutenção das proporções automaticamente na passagem da janela para o visor O utilizador aumenta ou diminui o tamanho dum visor com w pixéis de largura e h pixéis de altura através do arrastamento para fora ou para dentro do canto inferior direito da janela de interface. Para evitar distorção, há que mudar o tamanho da janela do domínio de cena em conformidade. Para isso, assume-se a priori que a janela da cena é um quadrado cujos lados têm comprimento L. Uma solução possível é mudar a janela da cena sempre que o ecrã da janela de interface for alterada. Assim, a callback Glvoid reshape(glsizei w, GLsizei h) tem de ser alterada por forma a incluir o código seguinte: if (w <= h) gluortho2d(-l, L, -L * h/w, L * h/w); else gluortho2d(-l * w/h, L * w/h, -L, L);

Exemplo 6: activação automática do mapeamento janela-visor sem distorção /* Setting up window-viewport automatically without distortion * Abel Gomes */ #include <OpenGL/gl.h> // Header File For The OpenGL Library #include <OpenGL/glu.h> // Header File For The GLu Library #include <GLUT/glut.h> // Header File For The GLut Library #include <stdlib.h> void draw(){ // Make background colour yellow glclearcolor( 100, 100, 0, 0 ); glclear ( GL_COLOR_BUFFER_BIT ); // Draw house glcolor3f( 0, 0, 1 ); glrectf(0.0,0.0,30.0,30.0); glcolor3f(1,0,0); glbegin(gl_triangles); glvertex3f(0.0,30.0,1.0); glvertex3f(30.0,30.0,1.0); glvertex3f(15.0,40.0,1.0); glend(); // display house glutswapbuffers(); } // end of draw()

Exemplo 6: (cont.) // Keyboard method to allow ESC key to quit GLvoid reshape(glsizei w, GLsizei h) { GLfloat L = 100.0f; if (h == 0) h=1; glviewport(0,0,w,h); // prevent a divide by zero // set viewport to window dimensions glmatrixmode(gl_projection); // reset projection matrix stack glloadidentity();// establish clipping volume (left, right, bottom, top, near, far) if (w <= h) gluortho2d(-l, L, -L * h/w, L * h/w); else gluortho2d(-l * w/h, L * w/h, -L, L); } glmatrixmode(gl_modelview); glloadidentity(); // reset model-view matrix stack

Exemplo 6: (cont.) // Keyboard method to allow ESC key to quit void keyboard(unsigned char key,int x,int y) { if(key==27) exit(0); } int main(int argc, char ** argv) { glutinit(&argc, argv); // Double Buffered RGB display glutinitdisplaymode( GLUT_RGB GLUT_DOUBLE); // Set window size glutinitwindowsize( 500,500 ); glutcreatewindow( Single viewport spans the left-bottom interface window quarter"); // Declare the display, reshape, and keyboard functions glutdisplayfunc(draw); glutreshapefunc(reshape); glutkeyboardfunc(keyboard); // Start the Main Loop glutmainloop(); return 0; }

Recorte Gráfico Algoritmo de Sutherland-Hodgeman. FIM

Exemplo 1: visor por defeito Como já foi referido, se glviewport(x, y, width, height) NÃO é EXPLICITAMENTE usada no programa, o visor por defeito é toda a área gráfica da janela de interface. Veja-se o exemplo do próximo programa que retrata esta situação. O visor por defeito tem a área 500x500 e é definido por glutinitwindowsize(500,500) no programa principal.