go3d! a 3d graphics engine
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/1.jpg)
Go3D!A 3D Graphics Engine
Carlos Tosin
![Page 2: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/2.jpg)
Divisão
Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37 classes)
![Page 3: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/3.jpg)
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
![Page 4: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/4.jpg)
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
![Page 5: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/5.jpg)
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
![Page 6: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/6.jpg)
Componente – CoreGerenciamento de Mensagens
Fila de mensagens Mensagens padrão + Mensagens de Usuário
![Page 7: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/7.jpg)
Componente – CoreMecanismo de Log
Suporta logs de informações e erros Dispositivos de logs
Console Arquivo
![Page 8: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/8.jpg)
Componente – CoreGerenciamento de Janela e Eventos
Suporte à criação de janelas Suporte à eventos de mouse e teclado Utiliza a Win32 API
![Page 9: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/9.jpg)
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
![Page 10: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/10.jpg)
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
![Page 11: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/11.jpg)
Componente – CoreStreaming
Suporte a streaming em arquivo (leitura e gravação)
![Page 12: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/12.jpg)
Componente – CoreUtilitários
Biblioteca matemática Contador de FPS Parser de linha de comando Medição de tempo
![Page 13: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/13.jpg)
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
![Page 14: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/14.jpg)
Componente – Áudio
Suporte a sons wave Implementação da camada de áudio em
OpenAL (www.openal.org)
![Page 15: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/15.jpg)
Componente – Script
Suporte a leitura de arquivos de script Implementação da camada de scripts em Lua
(www.lua.org)
![Page 16: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/16.jpg)
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
![Page 17: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/17.jpg)
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
![Page 18: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/18.jpg)
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
![Page 19: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/19.jpg)
Componente – RendererBounding Volumes
Suporte à bounding box É possível adicionar o bounding box na cena
como forma de auxílio no debug
![Page 20: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/20.jpg)
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
![Page 21: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/21.jpg)
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
![Page 22: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/22.jpg)
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
![Page 23: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/23.jpg)
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)
![Page 24: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/24.jpg)
Componente - RendererIluminação
Suporte à luz ambiente Os objetos da cena podem ter materiais
associados, informando como reagem à luz Cálculo das normais
![Page 25: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/25.jpg)
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
![Page 26: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/26.jpg)
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
![Page 27: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/27.jpg)
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
![Page 28: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/28.jpg)
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
![Page 29: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/29.jpg)
Detalhes da Implementação
Design Patterns utilizados (GoF) Behavioral Patterns
Observer Template Method
Creational Patterns Factory Method Prototype
Structural Patterns Adapter Composite
![Page 30: Go3D! A 3D Graphics Engine](https://reader035.vdocuments.site/reader035/viewer/2022081503/5681309d550346895d968dc9/html5/thumbnails/30.jpg)
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