Sexta Lista - Rasterização
Aquecimento
- Modifique a largura (através do parâmetro da
função glLineWidth) e a inclinação
(através dos argumentos da macro
drawOneLine) das linhas
definidas pelo programa lines.c da
primeira lista.
Comente como os dois parâmetros afetam o efeito de
serrilha.
- Inclua no Makefile os comandos
necessários para gerar o
executável do programa drawf.c
adaptado do livro OpenGL Programming Guide.
- Identifique as função que estão relacionadas
com a "imageação" (rendering) dos três
caracteres F por modo bitmap.
- Altere a definição da variável
rasters para que o tamanho dos caracteres
se duplique.
- O que acontecerá se forem alterados somente
os dois primeiros argumentos da função
glBitmap?
Observação: GLUT
provê funcionalidades para "imagear" as fontes no modo bitmap
(glutBitmapCharacter) e
no modo stroke (glutStrokeCharacter), como demonstra
o programa
fontdemo.c. Qual é a diferença entre estes dois modos?
- Inclua no Makefile os comandos
necessários para gerar o executáveis do
programa border.c implementado pelo
Marcelo.
- Identifique o trecho de código que carrega
os índices de cor. Qual é a faixa de
cores definida?
- Identifique o trecho de código que atribua
um índice de cor para cada pixel da imagem.
Quantos índices foram utilizados na atribuição?
O que acontecerá
se alterarmos a macro definição de SLOPE?
O que acontecerá se substituirmos a atribuição
RAMPSTART+RAMPSIZE-1 por RAMPSTART+RAMPSIZE-XXX-1,
sendo XXX um valor inteiro entre 0 e 63?
- Identifique o trecho de código que desenha
a imagem criada na tela. O que acontecerá se
alterarmos os valores dos argumentos da função
glPixelZoom?
- Uso apropriado de padrões de preenchimento de área pode "emular"
efeitos de transparência, como demonstra o programa
screendoor.c. Identifique os padrões utilizados para cada nível de
"opacidade".
- Desde a primeira lista temos utilizado
a biblioteca de funções utilitárias,
GLUT, para criar
uma janela (ou seja, tamanho, posição, aparência e o bordo de uma área da tela)
capaz de visualizar as imagens geradas por
OpenGL/ OpenGL para WNT'95 e para interfacear os eventos gerados pelos usuários. Estas funções
foram criadas em cima do sistema X Windows tanto para inicialização
de ambientes de janelas:
- glutInit;
- glutInitWindowPosition, glutInitWindowSize;
- glutInitDisplayMode;
- glutMainLoop;
como para tratamento de eventos:
- glutDisplayFunc;
- glutReshapeFunc;
- glutKeyboardFunc;
- glutSpecialFunc;
- glutMouseFunc;
- glutEntryFunc;
- glutVisibilityFunc;
- glutIdleFunc.
Existem ainda funções para gerenciar menus
e janelas. O
programa sphere.c
demonstra o gerenciamento de multi-janelas e o programa subwin.c
exemplifica a geração de subjanelas na área de desenho. Qual é a
diferença entre multi-janelas e sub-janelas?
- Como vimos, durante o processo de rasterização a
extensão de um objeto é mapeada aos pixels da área da janela de exibição.
OpenGL/
OpenGL para WNT'95 faz uso deste fato para implementar
um mecanismo de seleção, como demonstram os programas adaptados do livro
OpenGL Programming Guide:
pickline.c, picksquare.c e
pickdepth.c. O programa
triselect.c, por sua vez, ilustra uma aplicação deste mecanismo.
- Qual comando especifica o modo de "rasterização com seleção"?
- Como se define a área de seleção de interesse (em geral, a área
"coberta" pelo cursor)?
- Onde são armazenadas as identificações (ou os nomes) dos
objetos selecionadas?
Programação
- Modifique o programa drawf.c, de forma
a armazenar na variável rasters a definição
de uma circunferência de raio igual a 30 pixels.
Os valores de cada pixel (1 ou 0) devem ser gerados pelo
algoritmo de Bresenham.
- Inclua no programa border.c um trecho de
código que utilize a técnica pré-filtragem
para reduzir o efeito de
serrilhado. Se for necessário, utilize todos os tons de
cinza disponíveis.
Dica: Consulte a seção 2-26 do livro
Procedural Elements for Computer Graphics.
- Inclua no programa image.c
implementado pelo
Marcelo
um trecho de
código que utilize o algoritmo de Floyd-Steinberg
para quantizar os tons de cinza da imagem
em dois níveis (preto e branco).
Voltar para a lista anterior.
Avançar para a próxima lista.