OpenGL

Página  2  de  8  

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

1 | 2 | 3 | 4 | 5 | 6 | 7 | 8