30
Go3D! A 3D Graphics Engine Carlos Tosin

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

Embed Size (px)

Citation preview

Page 1: 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

Go3D!A 3D Graphics Engine

Carlos Tosin

Page 2: 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

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

Componente – CoreGerenciamento de Mensagens

Fila de mensagens Mensagens padrão + Mensagens de Usuário

Page 7: 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

Componente – CoreMecanismo de Log

Suporta logs de informações e erros Dispositivos de logs

Console Arquivo

Page 8: 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

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

Componente – CoreStreaming

Suporte a streaming em arquivo (leitura e gravação)

Page 12: 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

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

Componente – Áudio

Suporte a sons wave Implementação da camada de áudio em

OpenAL (www.openal.org)

Page 15: 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

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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 Carlos Tosin. Divisão Estrutura dividida em 4 componentes Core (46 classes) Áudio (4 classes) Script (4 classes) Renderer (37

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