|
2. OpenGL |
OpenGL (“GL” significa biblioteca gráfica - “Graphics Library”) é uma interface
para o hardware gráfico. Esta interface consiste em centenas de funções e
procedimentos que permitem ao programador especificar objectos e operadores
envolvidos na criação de ambientes gráficos de alta qualidade, em especial
imagens coloridas de objectos tridimensionais, podendo ser facilmente integrado
num sistema de janelas (por ex. o Microsoft Windows®) [4].
O OpenGL coloca primitivas num framebuffer sujeito a vários modos
seleccionáveis. Cada primitiva é um ponto, um segmento de linha, um polígono, um
pixel ou um bitmap. Cada modo pode ser alterado independentemente, não afectando
os restantes. Os modos são conjuntos, primitivas específicas, ou outras
operações descritas através do envio de funções ou chamadas a procedimentos.
As primitivas geométricas (pontos, segmentos de recta e polígono) são definidas
através de um grupo de um ou mais vértices. Um vértice define um ponto, o fim de
uma extremidade ou um canto de um polígono onde duas extremidades se encontram.
Os dados (que consistem em coordenadas posicionais, cores, normais e coordenadas
das texturas) estão associados a um vector que é processado de forma
independente, por ordem e da mesma forma que os outros. A única excepção a esta
regra é quando o grupo de vértices está reunido para que a primitiva indicada se
ajuste a uma dada região. Neste caso, o vector de dados pode ser alterado e
novos vértices criados. A forma como os vértices são agrupados depende da
primitiva representada.
O OpenGL permite o controlo directo sobre operações fundamentais de gráficos 2D
e 3D. Isto inclui a especificação de alguns parâmetros como a transformação de
matrizes, coeficientes de iluminação, métodos de antialiasing e operadores para
actualização de pixels. Não fornece, no entanto, meios para a descrição e
modelação de objectos geométricos complexos. Uma outra alternativa de apresentar
esta situação é dizer que o OpenGL oferece mecanismos para descrever a forma
como objectos geométricos complexos são renderizados em vez de mecanismos para
descrever os próprios objectos.
O modelo de interpretação de comandos do OpenGL é o típico cliente-servidor. Tal
significa que um programa (cliente) envia comandos que são interpretados e
processados pelo OpenGL (servidor), que pode, ou não, operar no mesmo computador
como cliente.
Os efeitos dos comandos de OpenGL no framebuffer (Figura 1) são, em última
instância, controlados pelo sistema de janelas que aloca os recursos do
framebuffer. É o sistema de janelas que determina quais as zonas do framebuffer
às quais, em cada momento, o OpenGL pode aceder e que informa este da forma como
o framebuffer está estruturado. Da mesma forma, a exibição do conteúdo do
framebuffer no monitor (inclusive a transformação individual dos valores do
framebuffer através de técnicas como a gama correction) não é endereçada pelo
OpenGL. A configuração do framebuffer ocorre fora do OpenGL em conjunto com o
sistema de janelas. A inicialização de contexto do OpenGL ocorre quando o
sistema de janelas aloca uma janela para a renderização do OpenGL. De salientar
que o OpenGL não possui, de forma nativa, quaisquer serviços de acesso a
dispositivos de input, sendo estes fornecidos pelo sistema de janelas, o que
torna o OpenGL independente de qualquer sistema de janelas.
Do ponto de vista do implementador de hardware, OpenGL é um conjunto de comandos
que afectam o funcionamento do hardware gráfico. Se o hardware consistir apenas
num framebuffer endereçável, então o OpenGL tem de ser implementado quase por
completo no CPU. Tipicamente, o hardware gráfico poderá compreender vários graus
de aceleração gráfica, desde um subsistema capaz de renderizar linhas
bidimensionais e polígonos até processadores de vírgula flutuante sofisticados
capazes de transformar e computar dados geométricos. A tarefa do implementador
de OpenGL é oferecer uma interface que distribua o trabalho entre o CPU e o
hardware gráfico. Esta distribuição deve ser feita de forma a optimizar a
performance da execução das chamadas de OpenGL.
O OpenGL pode ainda ser visto como uma máquina de estados que controla um
conjunto específico de operações gráficas. Este modelo deve oferecer uma
especificação que satisfaça as necessidades de programadores e implementadores.
No entanto, não oferece necessariamente um modelo para implementação. Esta deve
produzir resultados conformes aos produzidos pelos métodos específicos, podendo
contudo, existir meios para executar uma computação particular de forma mais
eficiente que a especificada.
Figura 1 - Visualização do Pipeline do OpenGL