Introdução Luzes Transformações Geométricas
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:
Procedure TForm1.DesenhaTudo;
// Define a cor da linha
glColor3f(1.0,0.1,0.7);
// Define o inicio de uma entidade geométrica do tipo
// GL_LINES
glBegin(GL_LINES);
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.
glBegin(GL_LINE_STRIP); // Seqüência de linhas
glVertex3f(0,0,0); // primeiro vértice
glVertex3f(5,0,0); // segundo vértice
glVertex3f(5,5,0); // terceiro vértice
glVertex3f(0,5,0); // quarto vértice
glEnd; // final do desenho
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);
Exibindo polígonos
Para exibir polígonos preenchidos use GL_TRIANGLES ou GL_QUADS.
glBegin(GL_TRIANGLES);
// Podem ser colocados mais de um bloco de desenho "glBegin-glEnd" em seqüencia.
glBegin(GL_QUADS);
Exemplo simples (dois triangulos) em OpenGL
Transformações Geométricas em OpenGL