30
Go3D! A 3D Graphics Engine Carlos Tosin

Go3D! A 3D Graphics Engine

Embed Size (px)

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 Presentation

Citation preview

Page 1: Go3D! A 3D Graphics Engine

Go3D!A 3D Graphics Engine

Carlos Tosin

Page 2: Go3D! A 3D Graphics Engine

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

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

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

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

Componente – CoreGerenciamento de Mensagens

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

Page 7: Go3D! A 3D Graphics Engine

Componente – CoreMecanismo de Log

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

Console Arquivo

Page 8: Go3D! A 3D Graphics Engine

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

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

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

Componente – CoreStreaming

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

Page 12: Go3D! A 3D Graphics Engine

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

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

Componente – Áudio

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

OpenAL (www.openal.org)

Page 15: Go3D! A 3D Graphics Engine

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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