Ir para conteúdo
Faça parte da equipe! (2024) ×

OpenGL e Delphi


AceStryker
 Compartilhar

Posts Recomendados

Introdução

Eu estava navegando na internet a algumas semanas atraz quando me deparei com um artigo de Alex Semichastny sobre OpenGL e Delphi, então resolvi me familiarizar com o assunto e hoje já estou com a devida experiencia para poder transmitir o básico a vocês do fórum...

 

Oque é OpenGL?

OpenGL é uma biblioteca para low-level graphics criada por Silicon Graphics Inc.Esta pode ser integrada a seu windows como uma DLL(opengl.dll no diretório do windows)

 

Fundamentos Matemáticos

 

o OpenGl é baseado em fundamentos matemáticos para que este só seja limitado pelo seu conhecimento em matemática.Temos aqui um exemplo de um simples plano cartesiano tridimensional como os usados pela maioria dos programadores de 3D

 

xyz.jpg

 

É assim que deve ser posicionado na sua tela, onde o quadrado azul é a tela em si.O ponto a partir do qual os quatro raios estender para criar a tela é o seu "ponto de vista", neste artigo o chamaremos de PV.OpenGL permite que você defina essa situação com duas chamadas de função simples:

 

É necessário se cadastrar para acessar o conteúdo.

 

Neste tipo de função, -0.1, 0.1, -0.1, 0.1, definem o tamanho de esquerda, direita, baixo, cima respectivamente, 0.3 define a distancia da imagem para o PV e o 25.0 define a distância para o plano.

 

Do Primitivo ao Objeto

 

Agora vem a parte difícil:Os objetos.o OpenGL apenas suporta os princípios básicos da geometria:Pontos, Linhas e Polígonos.Nada mais.Mas outros objetos podem ser desenhados a partir de figuras geométricas.

 

Os desenhos dos objetos tem uma estrutura parecida com a do pascal, cada "bloco" deve ter um begin/end.No caso do OpenGL, glBegin() e glEnd(), veja como funciona:

É necessário se cadastrar para acessar o conteúdo.

Bom, para os que não entenderam, desenhamos um simples triangula, a apenas quatro unidades do PV.Segue o print:

 

step1.jpg

 

Mesmo que não seja 3D esta será nossa base para um conhecimento mais avançado no assunto.

Outro desafio é que cada OS tem seus códigos específicos do OpenGL como resultado, por exemplo, se você estiver usando um Win32 você terá que marcar os pixels e criar a renderização no contexto da janela.Se você não é muito bom com o system-level Windows programming segue um exemplo do Alex e adaptado por mim:

 

tri.pas

É necessário se cadastrar para acessar o conteúdo.

 

tri.dfm

É necessário se cadastrar para acessar o conteúdo.

 

Aventurando na tri-dimencional

 

Ok, vamos agora usar 3D de verdade, usando o programa anterior como base adicionaremos algumas linhas no código para criar um flat de sombreado.

Como criaremos isto utilizando alternativas primitivas?

Usaremos 4 triangulos, Um de base e os outros de lado, segue o código que processa isto:

É necessário se cadastrar para acessar o conteúdo.

 

Isto parece complicado no código mas esta figura ilustra o que fizemos:

 

tetra.jpg

 

Definimos o vértice A1 - A4 e desenhamos triangulos deles especificando 3 pontos.Quando for desenhar suas imagens siga a regra:Sempre especifique pontos no sentido anti-horário como se estivesse olhando para cada lado por fora, seguindo esta regra nós especificamos a1-a2-a4, a1-a3-a2(olhando debaixo), a2-a3-a4, e a3-a1-a4.

Apenas troque o TForm1.Draw para esta nova função e não haverá grandes mudanças, isto irá continuar bi-dimensional pois ainda não definimos as luzes.

 

Luzes!Camera!OpenGL!

 

o modelo de luz do OpenGL tem 2 partes:a luz em si(cor, intensidade, etc) e o material do seu corpo.Material seria a inclinação, alguns métodos físicos como a opacidade, e a texture.É um vasto poder...

 

Definir a fonte de luz é bem simples:

É necessário se cadastrar para acessar o conteúdo.

 

Duas constantes foram definidas:a posição da luz(cima, baixo, esquerda, direita) e a luz do ambiente.Isto produz um tipo de luz dispersa que permite que você veja objetos da sombra

Embora você tenha adicionado a luz e sua fonte, o corpo ainda não foi desenhado.Isto acontece pois o OpenGL tem que saber a "norma" de cada polígono que você desenhou para calcular a luz(normalmente um vetor perpendicular).Se você não tiver nenhuma biblioteca de vetor, apenas use este exemplo para calcular a norma tendo 3 pontos.Esta função deve ser especificada com aquela regra básica que aprendemos acima.

 

É necessário se cadastrar para acessar o conteúdo.

 

Usando esta função você pode calcular todos os vetores necessários da luz:

É necessário se cadastrar para acessar o conteúdo.

 

E o resultado estará assim:

 

step2.jpg

 

Agora vamos terminar usando uma ferramente disponibilizada pelo Delphi VCL, especifique angulo como um single e coloque um timer com esse tick:

É necessário se cadastrar para acessar o conteúdo.

 

Agora estamos a apenas 1 linha de usar animações do OpenGL:

É necessário se cadastrar para acessar o conteúdo.

 

Coloque esta linha antes de começar seu triangulo em glBegin() e sua animação estará completa!

 

Se gostou do assunto baixe um programinha para você brincar:http://codecentral.borland.com/codecentral/ccweb.exe/listing?id=15417

Se ainda não tiver acessado, acesse:OpenGL - The Industry Standard for High Performance Graphics

 

Créditos:

AceStryker e Embarcadero

Link para o comentário
Compartilhar em outros sites

Este tópico está impedido de receber novos posts.
 Compartilhar

  • Quem Está Navegando   0 membros estão online

    • Nenhum usuário registrado visualizando esta página.
×
×
  • Criar Novo...

Informação Importante

Nós fazemos uso de cookies no seu dispositivo para ajudar a tornar este site melhor. Você pode ajustar suas configurações de cookies , caso contrário, vamos supor que você está bem para continuar.