Home arrow Artigos arrow Introdução ao OpenGL
Introdução ao OpenGL
 
Autor: Ricardo Silva
Data: 21/03/2006

A OC-Zone decidiu aprender um pouco de OpenGl e divertir-se as custas desta biblioteca que a maioria das placas gráficas suportam. Contudo criamos este Artigo para que os nossos leitores e principiantes da programação em C++, aprendam a utilizar e a criar pequenos cenários utilizando algumas figuras geométricas.

O Software utilizado para programar C++ foi o Borlan C++ Builder 6, no entanto, também funciona em Visual Studio C++. O processo é o mesmo portanto fica ao inquérito dos nossos leitores.

Introdução ao OpenGL

A OpenGL (Open Graphics Library), é uma biblioteca padrão de funções gráficas para o desenvolvimento de aplicações gráficas interactivas 2D e 3D com qualidade profissional e de alta performance, tendo sido criada em 1992 pela Silicon Graphics (actual SGI – www.sgi.com), na forma de uma API (Application Programming Interface), gráfica, independente dos dispositivos de exibição e dos sistemas operativos.
A OpenGL foi escrita em C e segue a convenção de chamada da linguagem C.

Existem diferentes implementações da OpenGL para diferentes sistemas operativos, por exemplo para Windows e Linux. As várias implementações usam os mesmos tipos de dados e os mesmos nomes de funções. Desse modo um programa escrito para Windows por exemplo, pode também ser compilado para Linux.

A OpenGL não contem funções especificas para interacção com os modernos sistemas de janelas (Windows, X Window etc), pelo que as tarefas comuns de uma aplicação, como criar janelas, gerir eventos provenientes do rato e do teclado, assim como apresentação de menus, ficam a cargo de bibliotecas próprias de cada ambiente de programação. Existe no entanto uma extensão da biblioteca OpenGL conhecida por GLUT (OpenGL ToolKit), que contem funções para a gestão de janelas e eventos e pode ser usada para o desenvolvimento de aplicações gráfica sem OpenGL, independentes do sistema de gestão de janelas dos sistemas operativos.

A OpenGL transformou-se num padrão extensamente utilizado pela indústria. O desenvolvimento desta biblioteca está hoje em dia a cargo de um consórcio formado pelas principais empresas de software e hardware do mundo (www.opengl.org).

A OpenGL promove a inovação e acelera o desenvolvimento de aplicações incorporando um grande conjunto de funções de renderização, de texturas, de efeitos especiais, e de outras poderosas funções de visualização.

1.1 Máquina de estados

A OpenGL é uma máquina de estados porque é possível colocá-la em vários estados (ou modos) que não são alterados, a menos que uma função seja chamada para isso. Por exemplo, a cor de desenho é uma variável de estado que pode ser definida como branca. Todos os objectos são então desenhados com a cor branca, até ao momento em que outra cor de desenho seja especificada. A OpenGL mantém uma série de variáveis de estado, tais como estilo de linhas, posições e características das luzes, propriedades do material dos objectos a desenhar, etc.

Muitas delas referem-se a modos que podem ser activados ou desactivados com os comandos glEnable() e glDisable().

1.2 O Pipeline da OpenGL

Os comandos da biblioteca OpenGL seguem uma série de estágios de processos ao serem executados a que chamamos Pipeline de Renderização da OpenGL. A sequencia dos processos desse pipeline é mostrada no diagrama da figura 1.

Figura 1 – Pipeline de Renderização da OpenGL

1.3 Funções gráficas da OpenGL

As funções gráficas da biblioteca OpenGL podem ser agrupadas de acordo com a função que desempenham. Segue-se a descrição genérica desses grupos de funções.

Buffer de acumulação: Trata-se de um buffer no qual múltiplos frames renderizados podem ser compostos para produzir uma única imagem. Este buffer é usado para efeitos tais como a profundidade de campo, “blur” de movimento, e de anti-aliasing da cena.

Alfa Blending: Proporciona mecanismos para criar objectos transparentes. Usando

a informação alfa, é possível escolher se um objecto é definido como algo totalmente transparente até algo totalmente opaco.

Anti-aliasing: Um método de renderização utilizado para suavizar linhas e curvas.

Esta técnica calcula a média da cor dos pixels junto à linha. Tem o efeito visual de suavizar a transição dos pixels na linha e daqueles junto à linha, gerando assim uma aparência mais suave.
Modo “Color-Index
: Buffer de Cores que armazena índices de cores das componentes vermelhas, verdes, azuis, e alfa das cores (RGBA), de modo a criar uma paleta de cores especifica.

Display Lists: Uma lista nomeada de comandos de OpenGL. As funções inseridas numa Display list podem ser pré-processadas de modo a serem executadas mais eficientemente do que se fossem executadas no modo imediato.

Double buffering: Usado para fornecer uma animação suave dos objectos. Cada cena sucessiva de um objecto em movimento pode ser construída em “background” ou no buffer “invisível” e então apresentada. Isto permite que somente as imagens completas sejam sempre apresentadas no ecrã.

FeedBack: Um modo onde OpenGL retornará a informação geométrica processada (cores, posições do pixel, e assim por diante), à aplicação. Gouraud Shading: Interpolação suave das cores através de um segmento de polígono ou de linha. As cores são atribuídas em vértices e linearmente interpoladas através da primitiva para produzir uma variação relativamente suave na cor.

Modo Imediato: A execução de comandos OpenGL quando eles são chamados, possui resultado melhor do que os “Display Lists”. Iluminação e sombreamento de materiais: A habilidade de computar exactamente a cor de algum ponto da superfície de um objecto dado as propriedades materiais para essa superfície.

Operações de pixel: Armazena, transforma, traça e processa aumento e redução de imagens.

Executores polinomiais: Para suportar as NURBS (non-uniform rational Bsplines). Primitivas: Um ponto, uma linha, um polígono, um bitmap, ou uma imagem. Primitivas da rasterização : bitmaps e retângulos de pixels.

Modo RGBA: Buffers de cores armazenam componentes vermelhos, verdes, azuis, e alfa da cor.

Selecção e colheita: Trata-se de um modo no qual a OpenGL determina se certa primitiva identificada do gráfico é renderizada numa dada região no buffer de frame.

Planos do stencil: Um buffer que é usado para mascarar pixels individuais no buffer de frame de cores.

Mapeamento de Texturas: O processo de aplicar uma imagem a uma primitiva gráfica. Esta técnica é usada para gerar imagens com realismo.

Transformações: A habilidade de mudar a rotação, o tamanho, e a perspectiva de um objecto no espaço 3D.

Z-buffering: O Z-buffer é usado remover as superfícies escondidas.

1.4 Sintaxe de comandos da OpenGL

Os comandos da biblioteca OpenGL obedecem a um padrão bem definido para especificação dos nomes de funções e constantes. A grande maioria dos nomes das funções contêm o prefixo glem letras minúsculas e todos os nomes de constantes começam com as iniciais “GL_”, em letras maiúsculas, e usam um “underscore” para separar as palavras que formam o nome

(Ex. GL_COLOR_BUFFER_BIT ). Existem algumas funções para a plataforma Windows (evidenciados pelo prefixo "wgl") que facilitam a criação de um espaço de renderização numa janela comum Windows.

Os nomes de algumas funções contêm um sufixo formado por um algarismo e uma ou duas letras (Ex. glColor3f e glVertex3fv). O algarismo indica o número de argumentos da função e a letra indica o tipo desses argumentos. Este formato para o nome das funções ajuda a lidar com o grande número de variantes que uma dada função pode ter. A figura 2 ilustra o formato do nome das variantes para a função glVertex…().

Figura 2 - Variantes do nome da função glVertex…().

Para tornar o código “portátil”, foram definidos tipos de dados próprios para OpenGL. Estes tipos de dados são mapeados dos tipos de dados comuns do C, que também podem ser utilizados.

Como os vários compiladores e ambientes possuem regras diferentes para determinar o tamanho das variáveis em C, usando os tipos OpenGL é possível “isolar” o código das aplicações, destas alterações. A tabela 1 apresenta os sufixos das funções e os tipos de dados para os argumentos das funções.

Tab. 1 - Sufixos e tipos de dados para os argumentos das funções da OpenGL.



Actualizado em ( 27-Jul-2011 )
 

AlphaContent © 2005-2012 - visualclinic.fr and modified by OC-Zone

Pesquisa

 

Publicidade