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 por 10 graus; 'y', ele gira 10 graus em torno do eixo ; 'z', ele gira 10 graus em torno do eixo ; 'r', reseta-se o posicionamento do cubo. Pode-se alternar entre cubo cisalhado e cubo sem cisalhamento por meio da tecla 'c', e entre cubo de tamanhos diferentes por meio da tecla 's'. O processo é interrompido ao acionar a tecla "ESC".

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 por 10 graus; 'y', ele gira 10 graus em torno do eixo ; 'z', ele gira 10 graus em torno do eixo ; 'r', reseta-se o posicionamento do boneco.
Se quiser rotacionar a cabeça do boneco, aperte a tecla 'c'; o ante-braço esquerdo, a tecla 'a'; e o braço superior, a tecla 'b'.
O processo é interrompido ao acionar a tecla "ESC".

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".

Código-fonte: spin.c. e Spin.java.


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.
Duas fontes luminosas, 0 (vermelha) e 1 (azul), são indicadas na imagem por dois pontos azul e vermelho, respectivamente.
Dois objetos geométricos, de distintos "materiais", são iluminados por estas duas fontes: tetraedro e cubo.
Possíveis interações: x,X: +/- 5.0; y,Y: +/- 5.0; z,Z: +/- 5.0; d : toggle difuso; e : toggle especular; a : toggle ambiente; f : toggle fontes móveis; 0 : toggle light 0 (vermelha); 1 : toggle light 1 (azul); r : reset
O processo é interrompido ao acionar a tecla "ESC".

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.
São permitidas as seguintes interações: 's' : mudança de escala; 'r' : rotação; 'h' : cisalhamento; 't' : deslocamento; 'g' : máscara gaussiana; 'e' : máscara de tenda; 'b' : máscara box; 'i' : inverte; 'o' : OR; 'n' : NOR; 'a' : AND; 'd' : NAND; 'x' : XOR; '+' : soma; '-' : subtração; '*' : multiplicação; '/' : divisao.
O processo é interrompido ao acionar a tecla "ESC".

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.
São permitidas as seguintes interações: '+': soma; '-': subtração; '*': multiplicação; 'a': AND; 'o': OR; 'x': XOR; 'i': NOT (da Imagem 1); 'w': warping (da Imagem 1, baseado no código disponível; 'z': zooming (3x da Imagem 1); 'c': convolução; 's': filtragem e zooming (3x da Imagem 1) 'h': histograma (da Imagem 1) aqui)
O processo é interrompido ao acionar a tecla "ESC".
As rotinas de leitura de imagens do formato bmp, em C, foram obtidas aqui.
Images de teste: fonte.

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.
São carregadas duas texturas. Pode-se chavear as texturas pela tecla 't'.
O processo é interrompido ao acionar a tecla "ESC".
As rotinas de leitura de imagens do formato bmp, em C, foram obtidas aqui.

Images de teste: fonte.

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.
São permitidas as seguintes interações com teclado: 'c': Compressão da escala dinâmica; 'n': Negativo; 'a': Alargamento de Contraste; 'e': Equalização; 's': Filro de suavização; 'r': Filtro de aguçamento; 'f': filtro de aguçamento 2x; 'b': filtro de Sobel; 'x': filtro de Sobel na direção x; 'l': filtro laplaciano; 'd': filtro de desagucamento.
O processo é interrompido ao acionar a tecla "ESC".

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
São permitidas as seguintes interações com teclado: 'c':Alterna compressão da escala dinâmica 'a':Filtro Passa-Altas de Butterworth; 'b':Filtro Passa-Baixas de Butterworth; 'r':Reseta; '+':Incrementa raio do filtro; '-':Decrementa raio do filtro; 'i':Incrementa a ordem do filtro; 'd':Decrementa a ordem do filtro.
O processo é interrompido ao acionar a tecla "ESC".

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.
O processo é interrompido ao acionar a tecla "ESC".

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.
O processo é interrompido ao acionar a tecla "ESC".

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).
O processo é interrompido ao acionar a tecla "ESC".

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.
Através das teclas pode-se alterar os parâmetros extrínsecos da câmera: 'x': decrementa 5.0 o ângulos de rotação em torno de 'x'; 'X': incrementa 5.0 o ângulos de rotação em torno de 'x'; 'y': decrementa 5.0 o ângulos de rotação em torno de 'y'; 'Y': incrementa 5.0 o ângulos de rotação em torno de 'y'; 'z': decrementa 5.0 o ângulos de rotação em torno de 'z'; 'Z': incrementa 5.0 o ângulos de rotação em torno de 'z'; 'r': reseta os ângulos de rotação para (35,35,0); 'R': reseta as marcas segmentadas manualmente.
O processo é interrompido ao acionar a tecla "ESC".

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."