ine 5341 

Programa

OpenGL

Links

Bibliografia

Plano de Ensino

Trabalhos de
Alunos de 
Semestres
Passados

Tutorial de OpenGL

  1. Objetivos da parte de OpenGL na disciplina de CG
  2. O que é OpenGL ?
  3. Material das Aulas Básicas
  4. OpenGL para outras Linguagens de Programação e Outras APIs
  5. Material de OpenGL Adicional Opcional
  6. De Onde vem este Tutorial ?


Objetivos da parte de OpenGL na disciplina de CG

O objetivo desta página é prover uma visão geral sobre as possibilidades de desenvolvimento de programas gráficos através da utilização da API OpenGL. A grande maioria deste site é uma adaptação do Tutorial de Jeff Molofee, conforme acreditado no fim desta página.. Ao longo do tempo em que este site se desenvolver, mais e mais fontes e experiências nossas serão adicionadas ao mesmo. Com esta página não queremos que o aluno decore a utilização de todos os recursos de OpenGL, mas sim que tenha um primeiro contato com a API e seus conceitos e seja capaz de utilizá-la mais tarde na programação de aplicações utilizando técnicas de CG que independem da API utilizada, como será feito ao se implementar modelos hierárquicos utilizando OpenGL. 

Os exemplos relacionados abaixo utilizam na sua maioria outra API, denominada GLUT, que facilita a realização de coisas básicas como abrir uma janela por apresentar uma API independente de plataforma. Isto significa que você vai poder compilar os programas que você escrever usando GLUT em Windows, MacOS, Linux ou qualquer Unix comercial sem modificar nada. Ou quase nada: se você trabalha no mundo Windows, que é um produto e não um padrão,  você deve lembrar de utilizar o compilador Microsoft C (Visual C++) para compilar seus programas pois durante o seu desenvolvimento,  GLUT teve de ser direcionado especificamente para um dos compiladores comerciais existente para Windows em função da falta de compatibilidade dos mesmos entre si. Para você poder usar Borland C (C++ Builder), Thiago Stein criou um header em C (veja Aula 0) que satisfaz a maioria dos requisitos para isso, mas dificulta um pouco o seu trabalho de programação. Se você vai trabalhar em Linux/Unix isto não é problema: a padronizaçõ deste ambiente lhe permite utilizar qualquer compilador C em qualquer plataforma e compilar tudo praticamente sem problemas...



O que é OpenGL ?

OpenGL é uma biblioteca de rotinas gráficas de modelagem, manipulação de objetos e exibição tridimensional que permite a criação de aplicações que usam Computação Gráfica. Seus recursos permitem ao usuário criar objetos gráficos com qualidade, de modo rápido, além de incluir recursos avançados de animação, tratamento de imagens e texturas é possível ter visualização em vários ângulos.

A biblioteca OpenGL foi introduzida em 1992 pela Silicon Graphics, no intuito de conceber uma API (Interface de Programação de Aplicação) gráfica independente de dispositivos de exibição. Com isto, seria estabelecida uma ponte entre o processo de modelagem geométrica de objetos, situadas em um nível de abstração mais elevado, e as rotinas de exibição e de processamento de imagens implementadas em dispositivos (hardware) e sistemas operacionais específicos. As função utilizada pelo OpenGL para desenhar um ponto na tela, por exemplo, possui os mesmos nome e parâmetros em todos os sistemas operacionais nos quais OpenGL foi implementada, e produz o mesmo efeito de exibição em cada um destes sistemas. 

Diante das funcionalidades providas pelo OpenGL, tal biblioteca tem se tornado um padrão amplamente utilizado na indústria de desenvolvimento de aplicações. Este fato tem sido adotado também pela facilidade de aprendizado, pela estabilidade das rotinas e pelos resultados visuais consistentes para qualquer sistema de exibição concordante com este padrão. Diversos jogos, aplicações científicas e comerciais tem utilizado OpenGL como ferramenta de apresentação de recursos visuais, principalmente com a adoção deste padrão por parte dos fabricantes de placas de vídeo destinadas aos consumidores domésticos. 
Todas as rotinas do OpenGL são implementadas na linguagem C, tornando fácil sua utilização em qualquer programa escrito em C ou C++.

Entre os recursos gráficos disponíveis pelo OpenGL, podem ser destacados os seguintes:

  • Modos de desenho de pontos;
  • Ajuste de largura de linhas;
  • Aplicação de transparência;
  • Ativação/desativação de serrilhamento (aliasing);
  • Mapeamento de superfícies com textura;
  • Seleção de janela de desenho;
  • Manipulação de fontes/tipos de iluminação e sombreamento;
  • Transformação de sistemas de coordenadas;
  • Transformações em perspectiva;
  • Combinação de imagens (blending);
As implementações do OpenGL geralmente provêem bibliotecas auxiliares, tais como a GLU (OpenGL Utility library), utilizada para realizar tarefas comuns, tais como manipulação de matrizes, geração de superfícies e construção de objetos por composiçã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 teclado, e apresentação de menus ficam a cargo de bibliotecas próprias de cada sistema operacional.



Material das Aulas Básicas
 
 
Aula 0: Instalação de OpenGL em diversas Plataformas
Aula 1: Criando sua Primeira Janela com OpenGL
Lesson 2 Aula2: Seu primeiro Polígono

Utilizando o código fonte que você conheceu no primeiro tutorial, vamos agora adicionar código para criar um Triângulo e um Quadrado na tela. 

Pode parecer simples, mas quase tudo que você for criar em OpenGL, você vai criar a partir de triângulos e quadrados. Portanto, este código é a base para quaisquer projetos futuros que você venha a desenvolver e é muito importante que você tenha compreendido como criar objetos 2D no espaço 3D em OpenGL para podermos ir adiante.

Lesson 3 Aula 3: Teoria das Cores e OpenGL

Nesta aula nós vamos expandir a aplicação da Aula 2, trabalhando com atributos de objetos. Em outras palavras, nós vamos dar cor aos objetos na tela. 

Além de aprender a trabalhar com cores em OpenGL, coisa que nós não havíamos visto nos modelos de arame trabalhados na primeira parte da disciplina ine 5341,  você vai também aprender nesta aula um bocado sobre Teoria das Cores. Cor é uma característica esencial para dar realismo às suas implementações gráficas e OpenGL permite fazer muitas coisas com cores de forma bastante simples.

Nos exemplos que nós vamos implementar, o triângulo utiliza coloração suavizada e o quadrado cores chapadas. Observe como as cores do triângulo se misturam nos seus pontos de encontro. Realizar isto é bastante complexo e é uma característica oferecida automaticamente pela API do OpenGL. 

Lesson 4 Aula 4: Rotação de Objetos

Na aula sobre operações básicas em 3D, nós já vimos a teoria relacionada à movimentação de objetos no espaço. Agora vamos ver como realizamos essas transformações 3D em OpenGL com os objetos que criamos. Para isso vamos usar o código já digitado e vamos incluir duas novas variáveis para armazenar ângulos, que vão permitir rodar o triânguo em torno do eixo Y e o quadrado em torno do eixo X.

É muito fácil, utilizando somente o que vimos até agora, criar uma cena complexa em 3D através da definição de superfícies de objetos tridimensionais através de triânguos e quadrados. Agora sabemos como mover estes objetos e podemos começar a dar vida às cenas que criamos. Mais tarde vamos ver como rotacionar um objeto em torno de um ponto arbitrário e não em torno de um dos eixos de coordenadas..

Lesson 5 5. Conceitos Básicos usando Objetos Sólidos

Now that we have setup, polygons, quads, colors and rotation figured out, it's time to build 3D objects. We'll build the objects using polygons and quads. This time we'll expand on the last tutorial, and turn the triangle into a colorful pyramid, and turn the square into a solid cube. The pyramid will use blended colors, the cube will have a different color for each face.

Building an object in 3D can be very time consuming, but the results are usually worth it. Your imagination is the limit!

6. Modelos de Arame e Facetas em 3D

Este tutorial foi escrito na UFSC mesmo e mostra como expandir de uma forma muito simples o exemplo do triângulo 2D do bloco passado do tutorial e criar complexos objetos a partir de simples dados lidos de um arquivo. Mostra também como pegar um mesmo modelo de objeto e representá-lo tanto como modelo de arame como superfícies lisa, em facetas.

7. Normais e Efeitos de Iluminação

O objetivo desta lição é ensiná-lo a calcular os efeitos de iluminação causados por ângulos entre a luz incidente sobre um objeto e o que você enxerga. Quando aluz incide sobre um objeto, como foi visto na aula sobre cor, há dois tipos de luz refletida: a luz reflexa difusa, que dá a cor do objeto e a luz especular, que é refletida na integridade de seu espectro e que dá o "brilho" de um objeto.



OpenGL para outras Linguagens de Programação e Outras APIs

Esta parte da matéria descreve outras APIs diferentes da API OpenGL tradicional, implementada em "C". Alpresentamos aqui agumas que são simplesmente interfaces para interfacear a API OpenGL tradicional de forma confortável com linguagens de programação bastante diferentes das linguagens tradicionais (lembre-se que vimos nos exemplos do tutorial acima como interfacear OpenGL com Delphi e outras linguagens compiladas "tipo-C"), outras são APIs diferentes e que oferecem uma alternativa ao uso de OpenGL, como SDL.

JavaGL - Uma API em Java que emula OpenGL
Jun - Uma API em Smalltalk que emula OpenGL
SDL - Uma nova API de altíssima perfomance para jogos




Material Adicional de OpenGL 
Módulo 1: Operações em 3D com OpenGL (alguma coisa repetida)
Módulo 2: Trabalhando com Fontes e Texto de Diversos Tipos em OpenGL
Módulo 3: Trabalhando com Texturas, Transparência e Iluminação
Módulo 4: Trabalhando com Técnicas Avançadas de Iluminação
Módulo 5: Superfícies Curvas e Moles
Módulo 6: Trabalhando com Modelos e Conjuntos de Objetos
Módulo 7: Efeitos Especiais de Animação
Módulo 8: Sons, Entrada Especial de Dados e Outros Efeitos Avançadíssimos


De Onde vem este Tutorial ?
 

Lesson 2
Este tutorial é baseado principalmente em uma tradução do OpenGL Tutorial de Jeff Molofee & Neon Helium e está constantemente sendo  extendido com novos exemplos e material teórico que fundamenta as técnicas descritas. Algumas partes ainda não foram completamente traduzidas e pedimos desculpas ao leitor por apresentar texto em inglês.
Na medida do possível todas as técnicas e exemplos descritos aqui foram testados e avaliados. Comentários sobre o tutorial são bem-vindos.

 

Once you have surpassed the code on this site or even before, check out more professional sites, such as Nate's Programming Page or OpenGL.org. Although Nate's site is inactive at the moment, it contains tons of excellent example programs, that are well written, and really show off what OpenGL is capable of. Also be sure to visit the many OpenGL links on my page. Each site I link to is an incredible asset the OpenGL community.