Biblioteca Gráfica OpenGl

Introdução         Luzes         Transformações Geométricas

Introdução

OpenGl é uma biblioteca de rotinas gráficas para trabalhar em duas e três dimensões. Existem implementações de OpenGL para, PC, Mac Unix e PowerPC. Para obter maiores informações sobre estas implementações consulte http://www.opengl.org.

Das implementações para PC as mais conhecidas são as da Silicon Graphics e da Microsoft.

Aqui é importante contextualizar OpenGL com relação às linguagens de programação e aos ambientes operacionais. Independente da plataforma usada, e também da linguagem, as rotinas de exibição de objetos de OpenGL são sempre iguais. O que difere o uso de OpenGl em uma plataforma UNIX ou PC, ou em ferramentas como Delphi, C Builder, Borland C, Visual C ou Visual Basic é a forma de inicializar e integrar a biblioteca OpenGL em cada linguagem e a forma de definir em que janela(ou parte dela) a imagem será exibida.

Como a tarefa de integrar OpenGL a uma linguagem, nem sempre é trivial, existem diversas ferramentas(bibliotecas) para este fim, especialmente para Delphi e Visual Basic. Estas ferramentas são componentes ou OCXs que encapsulam a OpenGL, e tornam mais fácil a integração com estas linguagens. Consulte http://www.opengl.org para obter maiores informações sobre estas ferramentas.

Nos exemplos deste material, você irá encontrar instruções de como utilizar OpenGL em Delphi usando os componentes da SignSoft(http://www.signsoft.com).

Instalando os compomentes da SignSoft

Em primeiro lugar, transfira para o seu computador os componentes da SignSoft. Há uma cópia deste componente em ftp://ftp.inf.pucrs.br/pub/pinho/OpenGL/

Após a transferência, descompacte os arquivos e siga as instruções de instalação fornecidas junto com o componente.

Configurando o ambiente em Delphi

Crie um projeto em Delphi e insera um componente GLView (figura 1)no formulário do programa PASCAL.  

Figura 1 - Componente GLView

 Altere a propriedade Name da GLView para GL1.  

 

Figura 2 - Novos nome para os componentes

Insira um componente GLCamera e troque o seu Name para CAMERA1.

Crie uma associação de GL1 com CAMERA1 definindo a propriedade Camera de GL1 como CAMERA1.


Figura 3 - Componente GLCamera

Inclua no seu código(na declaração USES) a unit OpenGL.

Crie uma rotina para responder ao evento Paint   da GL1. Coloque dentro desta uma chamada à rotina DesenhaTudo. Dentro desta rotina é que deverão ser colocados os comando OpenGL aqui apresentados.

Informe ao Delhi o nome do Diretório onde se encontram os arquivos ".dcu"  da biblioteca da SignSoft. Para tanto vá ao menu PROJECT, escolha a opção Options e preencha o campo Search Path com o nome do diretorio onde estão as DCUs. No exemplo a bilioteca havia sido instalada em c:\Opengl.

 

Figura 4 - Configuração do Search Path

Definindo a posição do Observador da Cena

Para definir de onde o observador está vendo a cena abra a janela das propriedades do objeto CAMERA1. Redefina os valores das propriedades conforme a figura a seguir.

Figura 5 - Configuração da Câmera

Exibindo uma linha

Para fazer a exibição de qualquer entidade geométrica a OpenGL possui os comandos glBegin e glEnd. Estes comandos definem blocos de programa(como sub-rotinas) dentro dos quais se pode colocar comandos de desenho. Por exemplo, imagine a seguinte rotina:

glBegin(GL_LINES);
   glVertex2f(0,0);// primeiro vértice
   glVertex2f(5,0);// segundo vértice
glEnd; // final do desenho

end;

Para exibir uma linha tridimensional use o comando glVertex3f(x,y,z);

Para desenhar outros objetos tente: GL_POINTS, GL_LINE_STRIP e GL_LINE_LOOP.

GL_LINE_LOOP exibe uma seqüência de linhas conectando os pontos definidos por glVertex e ao final liga o pimeiro com o último ponto.

glBegin(GL_LINE_LOOP);
   glVertex3f(0,0,-5); // primeiro vértice
   glVertex3f(5,0,-5); // segundo vértice
   glVertex3f(5,5,-5); // terceiro vértice
   glVertex3f(0,5,-5); // quarto vértice
glEnd; // final do desenho

Exibindo polígonos

Para exibir polígonos preenchidos use GL_TRIANGLES ou GL_QUADS.

glBegin(GL_TRIANGLES);
   glColor3f(1,0,-5); // Vermelho
   glVertex3f(0,0,-5); // primeiro vértice
   glVertex3f(5,0,-5); // segundo vértice
   glVertex3f(5,5,-5); // terceiro vértice
glEnd; // final do desenho

// Podem ser colocados mais de um bloco de desenho "glBegin-glEnd" em seqüencia.

glBegin(GL_QUADS);
   glVertex3f(0,0,-10); // primeiro vértice
   glVertex3f(5,0,-10); // segundo vértice
   glVertex3f(5,5,-10); // terceiro vértice
   glVertex
glEnd; // final do desenho

Exemplo simples (dois triangulos) em OpenGL

Uso de Luzes em OpenGL

Transformações Geométricas em OpenGL