Baixe 2878907 - Tutorial - Open GL e outras Notas de estudo em PDF para Informática, somente na Docsity!
(^)
ORIENTAÇÃO DA MONOGRAFIA:
PROF. MARCELO F. PORTO
COORDENAÇÃO DA DISCIPLINA:
PROF.ª MAGALI MARIA DE ARAÚJO
BARROSO
Monografia apresentada como requisito parcial do Trabalho de Conclusão do Curso de Ciência da Computação do Departamento de Ciências Exatas e Tecnologia.
" Não há nada melhor que alcançar uma meta. E não há nada pior que fazer só isso, não prosseguir."
Amyr Klink
Índice
- Índice de tabelas e figuras
- Introdução............................................................................................................................................
- HISTÓRICO.........................................................................................................................................
- Capítulo 1 - O que é OpenGL
- 1.1 - OpenGL como máquina de estados
- 1.2 - O “Pipeline” do OpenGL
- 1.2.1 - Listas de Exposição
- 1.2.2 - Avaliadores....................................................................................................................
- 1.2.3 - Operações por vértices
- 1.2.4 - Montagem de Primitivas
- 1.2.5 - Operações de Pixels
- 1.2.6 - Montagem de Texturas
- 1.2.7 - Rasterização..................................................................................................................
- 1.2.8 - Operações fragmentadas
- 1.3 - Funções gráficas do OPENGL
- Capítulo 2 - Ambiente OpenGL para desenvolvimento
- 2.1 - Instalação do OPENGL
- 2.2 - Instalação do GLUT
- 2.2.1 - Instalando o GLUT no Borland C++ Builder 5 no ambiente Windows
- 2.2.2 - Instalando o GLUT no MS Visual C++
- 2.2.3 - Instalando o GLUT no DEV-C++...................................................................................
- 2.3 - Sintaxe de Comandos do OpenGL.......................................................................................
- 2.4 - Estrutura Básica de Programas OpenGL
- 2.4.1 - Rotinas de Callback
- 2.4.2 - Exemplo de um programa OpenGL
- Capítulo 3 - Criação de Primitivas.....................................................................................................
- 3.1 - Pontos...................................................................................................................................
- 3.2 - Linhas
- 3.3 - Polígonos
- 3.4 - Desenhando Primitivas.........................................................................................................
- 3.5 - Programa exemplo
- Capítulo 4 - Cores
- 4.1 - Percepção de cores pelo olho humano
- 4.2 - Cores no Computador
- 4.3 - Cores no OpenGL.................................................................................................................
- 4.3.1 - Escolhendo entre RGBA e Índice de Cores
- 4.3.2 - Definindo o Modo de cores
- 4.3.3 - Exemplo da utilização de cores.....................................................................................
- Capítulo 5 - Transformações.............................................................................................................
- 5.1 - Transformação de Objetos
- 5.1.1 - Exemplo de Transformação de Objetos........................................................................
- 5.2 - Transformação de Visualização
- 5.2.1 - Exemplo de Transformação de Visualização................................................................
- 5.3 - Transformação de Projeção
- 5.3.1 - Projeção Perspectiva
- 5.3.2 - Projeção Ortográfica......................................................................................................
- 5.4 - Transformação de Viewport..................................................................................................
- Capítulo 6 - Formas 3D
- 6.1 - Exemplo de Forma 3D..........................................................................................................
- 6.2 - Formas 3D pré-definidas no GLUT.......................................................................................
- 6.2.1 - Esfera :
- 6.2.2 - Cubo
- 6.2.3 - Cone
- 6.2.4 - Toroide
- 6.2.5 - Dodecaedro
- 6.2.6 - Octaedro........................................................................................................................
- 6.2.7 - Tetraedro
- 6.2.8 - Icosaedro.......................................................................................................................
- 6.2.9 - Teapot
- 6.3 - Exemplo de Formas 3D, Transformações e Animação no OpenGL
- Capítulo 7 - Modelos de Iluminação..................................................................................................
- 7.1 - Como o OpenGL simula as Luzes........................................................................................
- 7.2 - Cores de Materiais................................................................................................................
- 7.3 - Adicionando luzes a uma cena.............................................................................................
- 7.3.1 - Definição dos vetores normais
- 7.3.2 - Criação, seleção e posicionamento de luzes
- 7.3.3 - Exemplo de criação e posicionamento de luzes
- 7.3.4 - Criação e seleção de modelo de iluminação
- 7.3.5 - Propriedades de materiais
- 7.3.6 - Exemplo de propriedades dos materiais
- Capítulo 8 - Modelagem hierárquica
- 8.1 - Pilhas de Matrizes
- 8.2 - Display Lists (Listas de Exibição)
- 8.3 - Listas de visualização hierárquicas
- 8.4 - Exemplo de Lista de visualização.........................................................................................
- Capítulo 9 - Texturas
- 9.1 - Aplicação de Texturas no OpenGL.......................................................................................
- 9.1.1 - Especificação de textura
- 9.1.2 - Aplicação de Filtros
- 9.1.3 - Objetos de Textura
- 9.1.4 - Funções de Texturas.....................................................................................................
- 9.1.5 - Atribuição de coordenadas às Texturas......................................................................
- 9.1.6 - Geração automática de coordenadas
- 9.2 - Carga de texturas através de arquivos...............................................................................
- 9.2.1 - Exemplo de carga de texturas – Arquivo .RAW.........................................................
- 9.2.2 - Exemplo de carga de texturas – Arquivo .BMP
- 9.2.3 - Exemplo de carga de texturas – Arquivo .JPG
- Capítulo 10 - Sombra Planar........................................................................................................... - 10.1 - Calculando a Sombra de um objeto - 10.2 - Exemplo de Sombra Planar
- Capítulo 11 - Blending..................................................................................................................... - 11.1 - Comandos Opengl........................................................................................................ - 11.2 - Exemplo de Blending
- Conclusão........................................................................................................................................
- Referências bibliográficas
- Figura 1. Processamento de dados pelo OpenGL.................................................................................................................14 Figura 2. Sintaxe de comandos OpenGL .............................................................................................................................. Índice de tabelas e figuras
- Tabela 1. Sufixo de comandos OpenGL................................................................................................................................24 Figura 3. Execução do Exemplo 1.........................................................................................................................................
- Tabela 2. Tipos de primitivas ................................................................................................................................................31 Figura 4. Tipos de primitivas .................................................................................................................................................
- Figura 5. GL_POINTS...........................................................................................................................................................32 Figura 6. GL_LINES..............................................................................................................................................................
- Figura 7. GL_LINE_STRIP....................................................................................................................................................33 Figura 8. GL_LINE_LOOP ....................................................................................................................................................
- Figura 9. GL_TRIANGLES....................................................................................................................................................34 Figura 10. GL_TRIANGLE_STRIP ........................................................................................................................................
- Figura 11. GL_TRIANGLE_FAN ...........................................................................................................................................34 Figura 12. GL_QUADS .........................................................................................................................................................
- Figura 13. GL_QUADS_STRIP .............................................................................................................................................35 Figura 14. GL_POLYGON ....................................................................................................................................................
- Figura 15. Percepção de cores pelo olho humano ................................................................................................................37 Figura 16. Simulação de cores no computador .....................................................................................................................
- Tabela 3. Modos de cores.....................................................................................................................................................41 Tabela 4. Faixa de valores para conversão de cores ............................................................................................................
- Figura 17. Comparação de transformações : máquina..........................................................................................................45 Figura 18. Rotação ...............................................................................................................................................................
- Figura 19. Translação ...........................................................................................................................................................47 Figura 20. Escala..................................................................................................................................................................
- Figura 21. Frustrum ..............................................................................................................................................................53 Figura 22. Projeção perspectiva............................................................................................................................................
- Figura 23. Projeção ortográfica .............................................................................................................................................55 Figura 24. Percepção tri-dimensional pelo olho humano .......................................................................................................
- Figura 25. Esfera wire-frame.................................................................................................................................................60 Figura 26. Cubo – glGlutWireCube .......................................................................................................................................
- Figura 27. Cone - glutWireCone............................................................................................................................................62 Figura 28. Toroide - glutWireTorus........................................................................................................................................
- Figura 29. Dodecaedro – glutWireDecahedron .....................................................................................................................63 Figura 30. Octaedro - glutWireOctahedron............................................................................................................................
- Figura 31. Tetraedro - glutWireTetrahedron ..........................................................................................................................64 Figura 32. Icosaedro - glutWireIcosahedron..........................................................................................................................
- Figura 33. Teapot - glutWireTeapot.......................................................................................................................................66 Figura 34. Imagem gerada pelo Exemplo 6 – Animação e Formas 3D ..................................................................................
- Figura 35. Iluminação ambiente ............................................................................................................................................71 Figura 36. Fonte de luz difusa...............................................................................................................................................
- Figura 37. Luz especular.......................................................................................................................................................72 Tabela 5. Característica da luz para a função glLightfv .........................................................................................................
- Figura 38. Movimentação de luzes........................................................................................................................................77 Tabela 6. Valores para o modelo de iluminação - glLightModel.............................................................................................
- Tabela 7. Propriedades possíveis para os materiais – glMaterial*.........................................................................................79 Figura 39. Exemplo 7 – Propriedades de Materiais ...............................................................................................................
- Figura 40. Exemplo 8 – Listas de visualização......................................................................................................................90 Tabela 8. Modo de armazenamento de pixels no OpenGL - glPixelStorei .............................................................................
- Tabela 9. Filtros de texturas..................................................................................................................................................96 Tabela 10. Fórmulas de aplicação de texturas – glTexEnv* ................................................................................................
- Figura 41. Exemplo de Geração automática de coordenadas de texturas...........................................................................104 Figura 42. Exemplo 9 – Cargas de texturas através de arquivos RAW................................................................................
- Figura 43. Exemplo 10 – Cargas de texturas através de arquivos BMP ..............................................................................118 Figura 44. Exemplo 11 – Cargas de texturas através de arquivos JPG ...............................................................................
- Figura 45. Sombra planar ...................................................................................................................................................125 Figura 46. Exemplo 12 – Sombra planar .............................................................................................................................
- Figura 47. Processamento do “blend” .................................................................................................................................135 Tabela 11. Faixa de valores para a função “Blend” - glBlendFunc.......................................................................................
- Figura 48. Exemplo 13 – Blending ......................................................................................................................................
PARTE I - INTRODUÇÃO
Existe uma breve introdução sobre a evolução da computação gráfica até a criação da API de desenvolvimento : OpenGL. O capítulo 1 faz a conceituação do OpenGL além de apresentar suas principais características teóricas. O capítulo 2 ensina como configurar os diversos ambientes de desenvolvimento para utilização das bibliotecas de desenvolvimento do OpenGL. Na seqüência os demais capítulos irão tratar assuntos de computação gráfica com o auxílio do OpenGL e estão postados de forma a propiciar uma construção de conhecimento gradativa por parte do leitor. Os mesmos seguem a seguinte disposição de assuntos :
- Capítulo 3 - Criação de Primitivas, que descreve como construir as primitivas básicas com a utilização do OpenGL : pontos, polígonos, triângulos etc.;
- Capítulo 4 - Cores : Além de apresentar como a cor é percebida pelo olho humano, também apresenta a formação de cores através do computador e como estas cores são tratadas pelo OpenGL.
- Capítulo 5 - Transformações : Apresenta as transformações necessárias para construção de uma determinada cena, abordando : rotação, translação, escala; além das transformações de perspectiva e transformações ortográficas.
- Capítulo 6 - Formas 3D : Descreve as formas 3D suportadas e definidas no OpenGL.
- Capítulo 7 - Modelos de Iluminação : Apresenta os modelos de iluminação suportados, além de apresentar as propriedades dos materiais no OpenGL.
- Capítulo 8 - Modelagem hierárquica : Descreve as formas de modelagem hierárquicas suportadas pelo OpenGL.
- Capítulo 9 - Texturas : Descreve as várias formas de aplicação de texturas em um determinado objeto, além apresentar uma biblioteca auxiliar para mapeamento de figuras no formato JPEG.
- Capítulo 10 - Sombra Planar : Descreve os passos para criação de sombras planares de objetos, baseados em uma fonte de luz e um plano de referência.
- Capítulo 11 – Blending : Descreve a utilização do efeito “Blending” para criação de efeitos de transparência em objetos.
A terceira parte da desta obra apresenta a conclusão do trabalho.
HISTÓRICO
A Computação Gráfica está presente em todas as áreas, desde os mais inconseqüentes joguinhos eletrônicos até o projeto dos mais modernos equipamentos para viagens espaciais, passando também pela publicidade, com as mais incríveis vinhetas eletrônicas e pela medicina onde a criação de imagens de órgãos internos do corpo humano possibilitam o diagnóstico de males que em outros tempos somente seria possível com intervenções cirúrgicas complicadas e comprometedoras.
Parece existir consenso entre os pesquisadores da história da Computação Gráfica de que o primeiro computador a possuir recursos gráficos de visualização de dados numéricos foi o "Whirlwind I" (furacão) , desenvolvido pelo MIT. Este equipamento foi desenvolvido, em 1950, com finalidades acadêmicas e também possivelmente militares, pois logo em seguida o comando de defesa aérea dos EUA desenvolveu um sistema de monitoramento e controle de vôos (SAGE - Semi-Automatic Ground Enviroment) que convertia as informações capturadas pelo radar em imagem em um tubo de raios catódicos (na época uma invenção recente) no qual o usuário podia apontar com uma caneta ótica. Ocorre que nesta época os computadores eram orientados para fazer cálculos pesados para físicos e projetistas de mísseis não sendo próprios para o desenvolvimento da Computação Gráfica.
Em 1962, surgiu uma das mais importantes publicações de Computação Gráfica de todos os tempos, a tese do Dr. Ivan Sutherland ("Sketchpad - A Man- Machine Graphical Communication System") , propunha uma forma de intenção muito semelhante ao que hoje chamados de interfaces WIMP – Window-Icon- Menu-Pointer.
Esta publicação chamou a atenção das indústrias automobilísticas e aeroespaciais americanas. Os conceitos de estruturação de dados bem como o núcleo da noção de Computação Gráfica interativa levou a General Motors a desenvolver o precursor dos primeiros programas de C.A.D. Logo em seguida
diversas outras grandes corporações americanas seguiram este exemplo sendo que no final da década de 60 praticamente todas as indústrias automobilísticas e aeroespaciais faziam uso de softwares de CAD Dois fatores, entretanto, foram fundamentais para o desenvolvimento da Computação Gráfica tal como a conhecemos hoje: a)O desenvolvimento da tecnologia de circuitos integrados durante a década de 70 que permitiu o barateamento e a conseqüente popularização das máquinas; b)O fim da idéia de que os fabricantes de computadores devem fornecer apenas a máquina e o sistema operacional e que os usuários devem escrever seus próprios aplicativos. A popularização dos aplicativos prontos e integrados (planilhas, editores de texto, editores gráficos, processadores de imagem, bancos de dados, etc) permitiram a popularização da Computação Gráfica na medida em que possibilitaram que o usuário comum sem conhecimento ou tempo para desenvolver aplicativos gráficos (nem sempre tão simples de serem programados) pudesse utilizar as facilidades da mesma.
Com a evolução da computação gráfica fez-se necessária a existência de bibliotecas computacionais que suportassem o desenvolvimento dos aplicativos gráficos tanto os criados pelas indústrias de softwares como os desenvolvidos pelo próprio usuário.
Foi nos anos 70 que ocorreram os primeiros pacotes gráficos e as primeiras conferências do SIGGRAPH (Special Interest Group on Graphics). Foi proposta por um comitê essencialmente Norte Americano do ACM SIGRAPH, em 1977, a primeira padronização gráfica como o “Core Graphics System”, conhecido como CORE. O objetivo era propor, para as aplicações em 2D e 3D, um padrão contendo um conjunto de funções gráficas que, na sua utilização não dependessem dos equipamentos gráficos envolvidos na aplicação. No ponto final da década de 70, foi formulado um outro padrão de gráficos, chamado GKS (Graphic Kernel System), que deveria adaptar-se melhor à grande diversidade dos
conflitos (todos os nomes começam com gl ou GL_). Na mesma época, foi formado o OpenGL Architecture Review Boar d, um consórcio independente que administra o uso da OpenGL, formado por diversas empresas da área. OpenGL é uma interface que disponibiliza um controle simples e direto sobre um conjunto de rotinas, permitindo ao programador especificar os objetos e as operações necessárias para a produção de imagens gráficas de alta qualidade. Para tanto, a OpenGL funciona como uma máquina de estados, onde o controle de vários atributos é realizado através de um conjunto de variáveis de estado que inicialmente possuem valores defaul t, podendo ser alterados caso seja necessário. Por exemplo, todo objeto será traçado com a mesma cor até que seja definido um novo valor para esta variável. Por ser um padrão destinado somente à renderização (Segal, 1997), a OpenGL pode ser utilizada em qualquer sistema de janelas (por exemplo, X Window System ou MS Windows), aproveitando-se dos recursos disponibilizados pelos diversos hardwares gráficos existentes.
Capítulo 1 - O que é OpenGL
OpenGL é uma interface de software para dispositivos de hardware. Esta interface consiste em cerca de 150 comandos distintos usados para especificar os objetos e operações necessárias para produzir aplicativos tridimensionais interativos.
OpenGL foi desenvolvido com funcionalidades independentes de interface de hardware para ser implementado em múltiplas plataformas de hardware.
Diante das funcionalidades providas pelo OpenGL, tal biblioteca tem se tornado um padrão amplamente adotado na indústria de desenvolvimento de aplicações. Este fato tem sido encorajado também pela facilidade de aprendizado, pela estabilidade das rotinas, pela boa documentação disponível [Neider2000] e pelos resultados visuais consistentes para qualquer sistema de exibição concordante com este padrão.
As especificações do OpenGL não descrevem as interações entre OpenGL e o sistema de janelas utilizado (Windows, X Window etc). Assim, tarefas comuns em uma aplicação, tais como criar janelas gráficas, gerenciar eventos provenientes de mouse e teclados, e apresentação de menus ficam a cargo de bibliotecas próprias de cada sistema operacional. Neste trabalho será utilizada a biblioteca GLUT (OpenGL ToolKit) para gerenciamento de janelas.
Desde sua introdução em 1992, OpenGL transformou-se num padrão extensamente utilizado pelas indústrias. OpenGL promove a inovação e acelera o desenvolvimento de aplicações incorporando um grande conjunto de funções de render , de texturas, de efeitos especiais, e de outras poderosas funções de visualização.
Quando uma lista da exposição é executada, os dados retidos são enviados da lista apenas como se fossem enviados pela aplicação no modo imediato.
1.2.2 - Avaliadores
Todas as primitivas geométricas são eventualmente descritas por vértices. As curvas e as superfícies paramétricas podem inicialmente ser descritas pelos pontos de controle e pelas funções polinomiais chamadas funções base. Os avaliadores fornecem um método para derivar os vértices usados para representar a superfície dos pontos de controle. O método é o mapeamento polinomial, que pode produzir a normal de superfície, as coordenadas da textura, as cores, e valores de coordenadas espaciais dos pontos de controle.
1.2.3 - Operações por vértices
Para dados dos vértices, está seguida do "o estágio das operações por vértices", que converte os vértices em primitivas. Alguns dados do vértice (por exemplo, coordenadas espaciais) são transformados em matrizes 4 x 4 de pontos flutuantes. As coordenadas espaciais são projetadas de uma posição no mundo 3D a uma posição na tela. Se as características avançadas estiverem habilitadas permitidas, este estágio é mesmo mais ocupado. Se texturização for usada, as coordenadas da textura podem ser geradas e transformadas aqui. Se as luzes forem habilitadas, os cálculos da luz serão executados usando os vértices transformados, a normal da superfície, a posição da fonte de luz, as propriedades de materiais, e a outras informações de luzes para produzir um valor da cor.
1.2.4 - Montagem de Primitivas
Clipping , uma parte importante da montagem de primitivas, é a eliminação de partes da geometria que saem fora de uma parte do espaço, definido por um plano. O clipping do ponto simplesmente passa ou rejeita vértices; o clipping da linha ou do polígono pode adicionar novos vértices , dependendo de como a linha ou o polígono são interligados. Em alguns casos, isto é seguido pela divisão da perspectiva, a qual faz com que os objetos geométricos distantes pareçam mais
perto. Então as operações do viewport e da profundidade (coordenada de z) são aplicadas.
1.2.5 - Operações de Pixels
Enquanto os dados geométricos pegam um caminho através do pipeline de renderização do OpenGL., dados de pixels tomam uma rota diferente. Os dados de Pixels em uma matriz na memória do sistema são empacotados e em seguida escalados, inclinados e processados por um mapa de pixels. Os resultados são escritos na memória da textura ou emitidos à uma etapa de rasterização. Se os dados do pixel forem lidos do framebuffer, operações de transferência de pixels (escala, polarização, mapeamento, “ clamping ”) são executadas. Então estes resultados são empacotados em um formato apropriado e retornados a uma matriz de memória do sistema.
1.2.6 - Montagem de Texturas
Uma aplicação OpenGL pode aplicar imagens de texturas em objetos geométricos, para tornar estes mais realísticos. Se diversas imagens de textura forem usadas, as mesmas deverão ser colocadas em objetos de modo que se possa facilmente comutar entre elas. Algumas exceções do OpenGL podem ter recursos especiais para acelerar o desempenho das texturas. Se existir memória especial disponível , os objetos de textura podem ter prioridade de controle do recurso limitado de memória.
1.2.7 - Rasterização
Rasterização é a conversão de dados geométricos e do pixel em fragmentos. Cada quadrado do fragmento corresponde a um pixel no framebuffer. Os “ stipples ” da linha e do polígono, largura da linha, tamanho do ponto, modelo de sombra, e os cálculos da cobertura para suportar o antialiasing são feitos considerando a conexão dos vértices em linhas ou os pixels internos. Os valores da cor e da profundidade são atribuídos para cada quadrado do fragmento.