1 / 30

Go3D! A 3D Graphics Engine

Go3D! A 3D Graphics Engine. Carlos Tosin. Divisão. Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37 classes). Componente - Core. Implementação de serviços básicos da engine Engine Environment Gerenciamento de memória

Download Presentation

Go3D! A 3D Graphics Engine

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Go3D!A 3D Graphics Engine Carlos Tosin

  2. Divisão • Estrutura dividida em 4 componentes • Core (46 classes) • Áudio (4 classes) • Script (4 classes) • Renderer (37 classes)

  3. Componente - Core • Implementação de serviços básicos da engine • Engine Environment • Gerenciamento de memória • Gerenciamento de mensagens • Mecanismo de log • Gerenciamento de janela e eventos • RTTI – Runtime Type Information • Serialização de objetos • Streaming • Utilitários • Estruturas de Dados

  4. Componente – CoreEngine Environment • Ambiente de execução da engine • Ponto de entrada para a engine • Fornece acesso aos componentes da engine • É único durante toda a execução • Suporte à arquivo de configuração

  5. Componente – CoreGerenciamento de Memória • Smart Pointers • Ponteiros Inteligentes • Previnem memory leaks • Controlam as referências a determinado objeto e fazem sua destruição de forma automática • Macros para substituir operadores “new” e “delete” • As macros gravam a linha e o arquivo onde a memória foi alocada: NEW() e DESTROY() • Exibição de informações sobre memória alocada

  6. Componente – CoreGerenciamento de Mensagens • Fila de mensagens • Mensagens padrão + Mensagens de Usuário

  7. Componente – CoreMecanismo de Log • Suporta logs de informações e erros • Dispositivos de logs • Console • Arquivo

  8. Componente – CoreGerenciamento de Janela e Eventos • Suporte à criação de janelas • Suporte à eventos de mouse e teclado • Utiliza a Win32 API

  9. Componente – CoreRTTI – Runtime Type Information • Informações sobre tipos de objetos em tempo de execução • Criação de objetos através de strings representando o seu nome

  10. Componente – CoreSerialização de Objetos • Suporte à serialização de objetos em arquivo • Os objetos podem ser salvos em disco e recuperados posteriormente em memória, da maneira como estavam dispostos na época da gravação

  11. Componente – CoreStreaming • Suporte a streaming em arquivo (leitura e gravação)

  12. Componente – CoreUtilitários • Biblioteca matemática • Contador de FPS • Parser de linha de comando • Medição de tempo

  13. Componente – CoreEstruturas de dados • Array (dinâmico) • Implementação própria • Lista • Lista encadeada, implementação própria • Map (chave, valor) • Adapter para o Map do STL • Fila • Utiliza a lista • Pilha • Utiliza a lista • String • Adapter para a String do STL

  14. Componente – Áudio • Suporte a sons wave • Implementação da camada de áudio em OpenAL (www.openal.org)

  15. Componente – Script • Suporte a leitura de arquivos de script • Implementação da camada de scripts em Lua (www.lua.org)

  16. Componente – Renderer • Implementação da camada gráfica da engine, feita em OpenGL (www.opengl.org) • Modelos 3D • Texturas • Bounding Volumes • Texto • Viewport, Projeção e Câmera • Primitivas gráficas básicas • Iluminação • Conceitos específicos da Go3D! Engine • Global States • Hierarquia de representação de cena

  17. Componente – RendererModelos 3D • Suporte ao carregamento de modelos MD2 com textura • O programador não precisa conhecer a estrutura do formato MD2 • A malha de triângulos é convertida para as estruturas da engine

  18. Componente – RendererTexturas • Suporte a texturas em formato BMP • O carregamento de imagens é feito através da biblioteca utilitária do OpenGL para plataforma Win32 • Atribuição de diversos parâmetros para texturas

  19. Componente – RendererBounding Volumes • Suporte à bounding box • É possível adicionar o bounding box na cena como forma de auxílio no debug

  20. Componente – RendererTexto • Escrita de textos 2D na tela • Suporta fontes instaladas no Windows • Parâmetros: cor, posição, negrito, itálico, sublinhado, riscado • Implementação utilizando Win32 API + OpenGL

  21. Componente – RendererViewport, Projeção e Câmera • Viewport • Criação de uma viewport na janela da aplicação • Projeção • Ortogonal • Perspectiva • Câmera • Representação de câmera em mundo 3D

  22. Componente - RendererPrimitivas Gráficas Básicas • Tipos de primitivas • Pontos • Tamanho • Suavização • Linhas • Aberta / Fechada • Contínua / Descontínua • Espessura • Padrão da linha

  23. Componente - RendererPrimitivas Gráficas Básicas • Malha de triângulos • Para desenho de objetos mais complexos • Os vértices possuem cor, posição, normal e coordenadas de textura • Utilitário para geração de objetos básicos (um box, por exemplo)

  24. Componente - RendererIluminação • Suporte à luz ambiente • Os objetos da cena podem ter materiais associados, informando como reagem à luz • Cálculo das normais

  25. Componente - RendererGlobal States • Informações que alteram a renderização final, mas que são independentes dos vértices que formam os objetos • 4 tipos • Shading • Material • Wireframe • Culling

  26. Componente - RendererHierarquia de Representação de Cena • Uma cena é representada através de uma árvore • As geometrias são nós-folha das árvores • Os outros nós podem conter geometrias ou outros nós • A varredura na árvore ocorre de cima para baixo (atualizando as transformações) e de baixo para cima (atualizando os bounding volumes) • Global states podem ser associados aos nós • A geometria possui toda a informação final de renderização

  27. Detalhes da Implementação • Foi desenvolvido um SDK da engine • Arquivo LIB para ser linkado com o projeto que vai fazer uso da engine • Arquivos de cabeçalho (.h) necessários • DLLs necessárias para a execução • Exemplos de utilização das funcionalidades da engine • Documentação (toda a API da engine está documentada) • Códigos-fonte

  28. Detalhes da Implementação • Aplicações que usam a engine • Instalação do SDK • Go3D.h • Go3D.lib • DLLs (Go3D.dll + …) • Em nenhum momento o programador utiliza chamadas específicas de OpenGL, Win32 API, Lua, OpenAL ou STL • O programador pode extender qualquer funcionalidade da engine • Funciona para aplicações Win32 ou Console

  29. Detalhes da Implementação • Design Patterns utilizados (GoF) • Behavioral Patterns • Observer • Template Method • Creational Patterns • Factory Method • Prototype • Structural Patterns • Adapter • Composite

  30. Considerações Finais • Altamente desafiador • Evoluí em programação C++ • Conheci APIs, ferramentas e técnicas novas • Uma engine completa tem muito mais recursos, mas acredito que consegui cumprir o objetivo que eu tinha com esse trabalho

More Related