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 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
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
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
Componente – CoreGerenciamento de Mensagens
Fila de mensagens Mensagens padrão + Mensagens de Usuário
Componente – CoreMecanismo de Log
Suporta logs de informações e erros Dispositivos de logs
Console Arquivo
Componente – CoreGerenciamento de Janela e Eventos
Suporte à criação de janelas Suporte à eventos de mouse e teclado Utiliza a Win32 API
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
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
Componente – CoreStreaming
Suporte a streaming em arquivo (leitura e gravação)
Componente – CoreUtilitários
Biblioteca matemática Contador de FPS Parser de linha de comando Medição de tempo
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
Componente – Áudio
Suporte a sons wave Implementação da camada de áudio em
OpenAL (www.openal.org)
Componente – Script
Suporte a leitura de arquivos de script Implementação da camada de scripts em Lua
(www.lua.org)
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
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
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
Componente – RendererBounding Volumes
Suporte à bounding box É possível adicionar o bounding box na cena
como forma de auxílio no debug
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
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
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
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)
Componente - RendererIluminação
Suporte à luz ambiente Os objetos da cena podem ter materiais
associados, informando como reagem à luz Cálculo das normais
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
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
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
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
Detalhes da Implementação
Design Patterns utilizados (GoF) Behavioral Patterns
Observer Template Method
Creational Patterns Factory Method Prototype
Structural Patterns Adapter Composite
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
Top Related