Códigos-fonte em C e em Java dos exemplos em OpenGL
Esta página contém uma série de exemplos que ilustram os conceitos dados em sala de aula. Ela inclui os códigos de cada exemplo em Java/JOGL desenvolvidos no ambiente Eclipse.
![]() | Este programa mostra o desenho de uma esfera com uso da biblioteca glut. O processo é interrompido ao acionar a tecla "ESC". Código-fonte: sphere.c e Sphere.java. |
![]() | Este programa mostra diferentes resultados do teste de profundidade. Três retángulos ciano (z=-2.0), amarelo (z=0) e magenta (z=-1) são desenhados nesta ordem. No entanto, podemos obter efeitos distintos alterando o tipo de teste de profundidade. O processo é interrompido ao acionar a tecla "ESC". Código-fonte: depth.c. |
![]() | Este programa ilustra o uso das funções de glut para construir alguns elementos de interação. Ao apertar o botão direito e o botão do meio do mouse sobre a janela de desenho, aparecerão menus. Código-fonte: demo_glut.c. |
![]() |
Este programa mostra a construção de um cubo e a configuração do modo de desenho. O processo é interrompido ao acionar a tecla "ESC". Código-fonte: demo_cube.c. e Demo_cube.java. |
![]() | Este programa mostra a renderização de uma curve NURBS. Os pontos e o polígono de controle podem ser ativados/desativados pela tecla "C". O processo é interrompido ao acionar a tecla "ESC". Código-fonte: curve.c. |
![]() |
Este programa mostra o uso de matrizes 4x4 para transformações geométricas
sobre o cubo. Ao acionar a tecla 'x', o cubo gira em torno do eixo Código-fonte: transf_cube.c. e Transf_cube.java. |
![]() | Este programa mostra o resultado de uma operação CSG emulada com uso da função DEPTH. O processo é interrompido ao acionar a tecla "ESC". Código-fonte: csg.c. |
![]() | Este programa implementa a rasterização de segmentos e polígonos por, respectivamente, algoritmo de Bresenham (tecla b) e de scanline (tecla s). Além disso, ilustra a transformada discreta de Fourier da imagem rasterizada e sua inversa. O programa é iniciado com uma imagem rasterizada de um segmento horizontal e é interrompido ao acionar a tecla "ESC". Código-fonte: raster_fourier.c. |
![]() | Este programa ilustra o uso da funcao glHistogram de OpenGL para obter a distribuição de frequência das intensidades de uma imagem de luminância. São implementadas ainda diferentes técnicas de quantização, que são chamadas acionando diferentes teclas (subdivisão uniforme (u), algoritmo de populosidade (p), algoritmo dde corte mediano (m), dithering bayer (b), dithering floyd-steinberg (f)). O programa é iniciado com uma imagem quantizada pela subdivisão uniforme de uma imagem contendo 2 barras e é interrompido ao acionar a tecla "ESC". Código-fonte: quantiza.c. |
![]() |
Este programa mostra o uso de Display List para organizar hierarquicamente
os elementos de uma cena.
Ao acionar a tecla 'x', o boneco gira em torno do eixo Código-fonte: boneco.c. e Boneco.java. |
![]() |
Este programa mostra como se faz a animação de dois retângulos. O processo é interrompido ao acionar a tecla "ESC". |
![]() |
Este programa mostra como se traça um conjunto de pontos, uma sequência de segmentos e uma curva de Bézier, em distintos padrões de linhas. Outros exemplos de definição de modelos geométricos: primitiva da biblioteca GLUT, curva de Bézier, superfície de Bézier, malha de Bézier, linhas Código-fonte: curves.c e Curves.java. |
![]() |
Este programa mostra como se desenha uma superfície NURBS em forma de coração com uso do método gluNurbasCallback. Outros exemplos: NURBS em forma de uma montanha sem buraco e com buraco. Código-fonte: nurbs.c. O pacote javax.media.opengl.glu não dispõe o método glu.gluNurbsCallback(). |
![]() |
Este programa mostra como se utiliza a pilha de MODELVIEW em OpenGL. Outros exemplos: rotação e translação de um planeta; com buraco. Código-fonte: origami.c e Origami.java. |
![]() |
Este programa mostra como se implementa os passos de uma transformação projetiva com uso de OpenGL Código-fonte: projecao.c |
![]() |
Este programa demonstra as funcionalidades
de iluminacao e de modelagem de material suportadas pelo OpenGL. Código-fonte: light.c. e Light.java. |
![]() |
Este programa ilustra as operações
lógico-aritméticas suportadas por OpenGL em imagens
binárias.
Código-fonte: op_images_b.c |
![]() |
Este programa ilustra a aplicação das funções de textura para amenizar problemas de sub- e super-amostragem em transformações geométricas. São permitidas as seguintes interações: 's' : mudança de escala; 'r' : rotação; 'h' : cisalhamento; 't' : deslocamento. O processo é interrompido ao acionar a tecla "ESC". Código-fonte: tg_image_textura.c |
![]() |
Este programa ilustra as operações
lógico-aritméticas suportadas por OpenGL e uma
implementação de warping com uso das funções de
textura de OpenGL.
Código-fonte: op_images.c (é necessário readBMP.h). e Op_images.java (com uma única janela). |
![]() |
Este programa demonstra o uso da função esférica
para criar efeitos de reflexões sobre o boneco.
Código-fonte: tex_boneco.c (é necessário readBMP.h). e Tex_boneco.java. |
![]() |
Este programa ilustra as operações de processamento
ponto a ponto e filtros espaciais
para destacar características específicas de uma imagem.
Utiliza várias funções de processamento de imagens providas
pela OpenGL.
Código-fonte: realce.c e child_profile.h |
![]() |
Este programa ilustra as operações de processamento
espectral para realcar uma imagem com dimensões em potência de 2.
Utiliza a transformada de Fourier rápida para
converter os dados entre domínio espacial e
domínio da frequência
Código-fonte: realce_espectro.c e child_profile_256.h |
![]() |
Este programa ilustra a segmentação orientada a histograma.
Ele segmenta uma imagem de níveis de cinza em 2 regiões. O limiar
(representado pelo ponto vermelho) deve ser definido pelo usuário clicando o mouse sobre
o valor desejado no histograma.
Código-fonte: seg_histograma.c e child_profile.h |
![]() |
Este programa ilustra a segmentação de uma imagem em duas regiões,
a partir de uma semente e o valor de diferença
admissível. O algoritmo flood fill é utilizado.
A semente deve ser definida pelo
usuário através de um click sobre um pixel da imagem.
A diferença inicial é 0.05 (5%) e pode ser modificada
através da tecla: '+': incremento de 0.01; '-':
decremento de 0.01.
Código-fonte: seg_regiao.c e child_profile.h |
![]() |
Este programa ilustra a transformada de Hough das
amostras (janela 2)
e a sua aplicação em ligar tais amostras por um número
mínimo de segmentos, em vermelho (janela 3).
Código-fonte: hough.c |
![]() |
Calibração de câmera é demonstrada neste programa.
A segmentação é feita manualmente através
do click sobre as marcas do padrão de calibração na
janela esquerda.
10 (dez) correspondências são necessárias.
A marca "segmentada" é highlighted com a cor vermelha.
Com base nestas 10 correspondências é estimada a matriz
de projeção e os parâmetros intrínsecos e extrínsecos da
câmera. Para validar a matriz de projecção obtida, são
reprojetados os vértices da cena sintética (um cubo azul e
um cubo rosa) e as marcas do padrão de calibração na janela
direita. Código-fonte: calibracao.c |
Wu Shin - Ting
Last modified: Tue Nov 4 18:56:33 2008
"Esta página, assim como todas as páginas sob esta
mesma árvore, não é uma publicação oficial da UNICAMP, seu conteúdo
não foi examinado e/ou editado por esta instituição. A
responsabilidade por seu conteúdo é exclusivamente do
autor."
"This page, as well as all pages under this same tree, is not an official publication from UNICAMP; its content has not been verified and/or edited by this institution. The author is solely responsible by its contents."