Académique Documents
Professionnel Documents
Culture Documents
São Carlos
Julho / 2003
2
Agradecimentos
A Roberto Batista, Marina Batista, Paulo Dias e Olavo D’antonio, pela amizade
existente entre nós e por fazerem minha estada em São Carlos ser mais agradável.
Ao meu professor e orientador, André Luiz Battaiola, atualmente professor no
departamento de Design da Universidade Federal do Paraná, pela confiança
depositada, pela orientação e além de tudo por sua amizade e compreensão.
Aos professores do Departamento de Informática da Universidade Federal de
Uberlândia, pelo incentivo à busca de desafios, pelo conhecimento transmitido e
principalmente pela amizade.
A Mamede Lima Marques, por me incentivar na área de pesquisa, por me fazer
gostar de aprender, por me auxiliar em integrar conhecimentos, pelo auxílio na
decisão em cursar o mestrado e por sua amizade.
A meu amigo Marcus Henrique Lopes Falcão, por me ensinar que na vida
precisamos não apenas ser especialistas, mas também lutar pela aquisição de
conhecimento em outras áreas.
Aos professores do Departamento de Computação da Universidade Federal de
São Carlos, em especial ao professor José Hiroki Saito, por todo auxílio prestado
direta ou indiretamente.
A Rodrigo Assaf e Daniel Gomes de Almeida, pelo auxílio prestado no projeto,
por se interessarem pelo aprendizado e acima de tudo pela amizade e
companheirismo.
A Adriano Cunha, Daniel Caetano, Ricardo Jurckzyk e a todos os outros amigos
ligados ao microcomputador MSX,.pelas horas de diversão, pela troca de idéias e
por ajudarem a manter vivo um sonho.
À Universidade Federal de São Carlos e à CAPes, pelo auxílio financeiro durante
todo o período de curso.
A todos vocês o meu
Muito Obrigado
6
Resumo
O avanço das técnicas algorítmicas de produção de gráficos e de hardware
dedicados a renderização e processamento geométrico proporcionou o
desenvolvimento de técnicas avançadas em animação e a exibição de gráficos cada
vez mais realistas, impulsionando o mercado tanto de visualização científica quanto
o de entretenimento. Porém, apesar dessas técnicas e algoritmos estarem muito
bem definidos, a comunidade de computação gráfica e animação, muitas vezes,
ignora os processos de planejamento e projeto, objetivando acelerar o
desenvolvimento de um projeto específico, obrigando aos desenvolvedores realizar
o mesmo trabalho de codificação de classes, ou rotinas, repetidas vezes em projetos
diferentes, contrariando os princípios de engenharia de software. Nesse contexto
faz-se necessário o projeto de um framework, objetivado tanto à criação de
aplicações gráficas quanto à criação de aplicações de animação. Apesar de
existirem diversos frameworks para gráficos dinâmicos, a grande maioria ou é
voltada à produção de gráficos bidimensionais ou foram propostos para sistemas
computacionais de estações gráficas caras e voltadas unicamente à produção de
trabalhos acadêmicos ou cinematográficos. Nesse contexto este trabalho apresenta
um estudo sobre as técnicas de computação gráfica, aplicadas a renderização em
tempo real e animações através do levantamento de características e requisitos
objetivando aplicações de simulações visuais, jogos por computador e aplicações
multimídia; analisa diversos motores de jogos para justificar alguns desses requisitos
e, dentro desse contexto, apresenta um conjunto de classes de maneira a compor
um framework cuja finalidade é facilitar o desenvolvimento de aplicativos
configuráveis, independentes de plataforma e que necessitem de renderização 3D
ou animação.
7
Abstract
The graphics algorithm techniques and geometrical rendering dedicated hardware
advance leaded the development of advanced animation techniques and photo
realistic graphics, impelling both the scientific visualization and the entertainment
markets. However, even this techniques and algorithms being well defined, the
animation and computer graphics community ignores, the most of time, the planning
and design processes, aiming the earlier release of a project, forcing the developers
to do the same classes or routine coding repeated times in different projects, ignoring
the software engineering principles. In this context the design of a framework, aimed
either to graphical or animation applications, is made necessary. Despite the many
dynamic graphics frameworks existence, many of them is aimed to bi-dimensional
graphics production or were proposed to expensive graphical workstations and
aimed only to scientific or cinematographic production. In this context, this work
presents a study about computer graphics and animation techniques gathered
through the characteristics and features aiming visual simulations, computer games
and multimedia applications; analyses several game engines to justify these features
and, in this context, presents a set of classes to compose a framework to ease the
platform independent configurable applications that needs 3D rendering or animation.
8
Índice
AGRADECIMENTOS............................................................................................................. 5
RESUMO................................................................................................................................. 6
ABSTRACT.............................................................................................................................. 7
ÍNDICE..................................................................................................................................... 8
ÍNDICE DE FIGURAS..........................................................................................................13
ÍNDICE DE TABELAS......................................................................................................... 15
CAPÍTULO 1. - INTRODUÇÃO......................................................................................... 16
1.1. MOTIVAÇÃO E RELEVÂNCIA............................................................................................... 17
1.2. OBJETIVOS...................................................................................................................... 21
1.3. ORGANIZAÇÃO DO TRABALHO............................................................................................ 23
CAPÍTULO 2. - JOGOS ELETRÔNICOS.......................................................................... 25
2.1. CLASSIFICAÇÃO QUANTO AO TIPO...................................................................................... 26
1.1. ESTRATÉGIA..................................................................................................................... 26
1.2. SIMULAÇÃO..................................................................................................................... 26
1.3. AÇÃO............................................................................................................................. 27
1.4. HISTÓRIAS INTERATIVAS (RPG)......................................................................................... 27
1.5. ADVENTURES................................................................................................................... 28
1.6. INFANTIS......................................................................................................................... 28
2.2. CLASSIFICAÇÃO VISUAL....................................................................................................28
1.7. 1ª PESSOA....................................................................................................................... 29
1.8. 3ª PESSOA (GOD VIEW OU GOD’S EYES)............................................................................. 29
2.3. CLASSIFICAÇÃO POR AMBIENTAÇÃO.................................................................................... 31
1.9. AMBIENTES INTERNOS....................................................................................................... 31
1.10. AMBIENTES EXTERNOS.................................................................................................... 32
1.11. ESPAÇO SIDERAL............................................................................................................ 32
1.12. AMBIENTES MISTOS........................................................................................................ 33
2.4. A ESTRUTURA DE UM JOGO................................................................................................ 34
CAPÍTULO 3. - JOGOS COMO APLICAÇÕES MULTIMÍDIA..................................... 35
3.1. VÍDEO.............................................................................................................................36
3.2. ÁUDIO............................................................................................................................ 40
3.3. DISPOSITIVOS DE ENTRADA................................................................................................ 42
1.13. TECLADO.......................................................................................................................43
1.14. JOYSTICK.......................................................................................................................43
1.15. GAME PAD.................................................................................................................... 43
1.16. MANCHE....................................................................................................................... 43
1.17. SISTEMA AUTOMOBILÍSTICO.............................................................................................. 44
1.18. TRACKBALL.................................................................................................................. 44
9
1.19. MOUSE......................................................................................................................... 44
1.20. RECONHECIMENTO DE VOZ...............................................................................................45
CAPÍTULO 4. - GRÁFICOS................................................................................................. 46
4.1. RENDERIZADOR................................................................................................................ 47
1.21. ESTÁGIO DE APLICAÇÃO.................................................................................................. 50
1.22. ESTÁGIO DE GEOMETRIA..................................................................................................51
1.23. ESTÁGIO DE RASTERIZAÇÃO............................................................................................. 54
1.24. PERFORMANCE EM SISTEMAS DE RENDERIZAÇÃO................................................................. 56
CAPÍTULO 5. - PROCESSAMENTO GEOMÉTRICO....................................................58
5.1. OBJETOS GRÁFICOS.......................................................................................................... 59
1.25. ESTRUTURA VETORIAL.................................................................................................... 59
1.26. CONJUNTO DE FACES...................................................................................................... 60
1.27. ORDENAÇÃO DE VÉRTICES............................................................................................... 61
1.28. ESTRUTURA PARAMÉTRICA...............................................................................................62
5.2. PROCESSAMENTO DE VISIBILIDADE...................................................................................... 63
1.29. PARTICIONAMENTO DO ESPAÇO......................................................................................... 64
1.30. OCTREES....................................................................................................................... 64
1.31. PARTIÇÃO BINÁRIA DO ESPAÇO (BSP)..............................................................................66
1.32. CONJUNTO DE VISIBILIDADE POTENCIAL (PVS)..................................................................68
1.33. REDUÇÃO DE COMPLEXIDADE GEOMÉTRICA E VISUAL......................................................... 70
1.34. NÍVEL DE DETALHE (LOD)............................................................................................ 70
1.35. MIPMAPPING.................................................................................................................73
CAPÍTULO 6. - ANIMAÇÕES..............................................................................................75
6.1. TRADICIONAL................................................................................................................... 78
6.2. PROCEDIMENTAL............................................................................................................... 79
6.3. ESTRUTURAL.................................................................................................................... 80
1.36. ANIMAÇÃO DE OBJETOS ARTICULADOS................................................................................ 80
1.37. ANIMAÇÃO DE OBJETOS MALEÁVEIS:................................................................................. 83
6.4. ESTOCÁSTICA................................................................................................................... 84
6.5. COMPORTAMENTAL............................................................................................................ 85
6.6. CONTROLE DE BAIXO NÍVEL.............................................................................................. 85
1.38. SISTEMAS DE SCRIPT....................................................................................................... 85
1.39. QUADROS CHAVE........................................................................................................... 86
1.40. PARAMÉTRICAS...............................................................................................................87
CAPÍTULO 7. - BIBLIOTECAS GRÁFICAS..................................................................... 88
7.1. DIRECTX........................................................................................................................ 88
7.2. OPENGL........................................................................................................................ 90
7.3. OUTRAS.......................................................................................................................... 92
CAPÍTULO 8. - MOTORES DE JOGOS............................................................................. 93
8.1. MOTORES 2D.................................................................................................................. 94
8.2. MOTORES 3D.................................................................................................................. 95
1.41. ANÁLISE DOS MOTORES...................................................................................................95
1.42. GOLGOTHA.................................................................................................................... 96
1.43. CRYSTAL SPACE............................................................................................................. 98
10
Índice de Figuras
Índice de Tabelas
Capítulo 1. - Introdução
jogos eletrônicos ou jogos por computador, cujo início, em 1962 com o jogo
Porém, apesar do grande sucesso comercial, o objetivo desses sistemas era voltado
revolução, a do entretenimento.
1999 atingiu o montante US$ 6.1 bilhões só nos Estados Unidos, o que indica um
1996, jogos em PC's eram mais usados do que processadores de texto [2].
Data. Todos estes dados justificam os investimentos milionários feitos por empresas
desenvolvimento de jogos.
18
jogos. O relatório Wireless Gaming da Datamonitor, [3], indica que 4 entre 5 usuários
jogos em celulares deverão movimentar cerca de US$ 1,6 bilhões de dólares nos
EUA e Europa. Este número deverá saltar para US$ 6,0 bilhões em 2005.
mercado;
obstáculos ao usuário;
Consoles;
19
Consoles;
dos jogadores.
de conhecimento, tais como música, artes, letras, etc., o que caracteriza a presente
Lamothe [4] cita que a comunidade acadêmica pensa em jogos por computador
pesquisa. Segundo ele uma classificação errada, pois ele caracteriza a produção
desse tipo de aplicação como um conduto para uma nova dimensão, sintetizada pela
arte.
1
http://larc.csci.unt.edu
20
acadêmico.
Entertainment 11, de Porto Alegre, RS, por ser a primeira empresa nacional a firmar
2
http://www.iiq.qc.ca
3
http://www.nad.qc.ca
4
http://www.cs.mdx.ac.uk/msc-cg
5
http://www-scm.tees.ac.uk/courses/degree/compgames.html
6
http://bigfoot.eecs.umich.edu/~soar/Classes/494
7
http://www.np.edu.sg
8
www.fullsail.com
9
www.digipen.edu
10
www.continuum.com.br
11
www.southlogic.com.br
21
títulos como a série Alone in the Dark, dentre outros e 3) Jynx Playware12, de Recife,
cenário nacional, diversos projetos estão sendo, ou já foram, criados. Tal é o caso da
13
Banana Games de São Paulo, SP, Joy Studios 14, em Recife, PE, 4X de Maringá,
1.2. Objetivos
sistema inteiro de tal forma que seus componentes relevantes sejam modelados por
dinâmico padrão que seja usualmente apropriado para a maioria dos casos. Apenas
projeto abstrato oferecido por eles é mais importante que o reuso de código.
12
www.jynx.com.br
13
www.bananagames.com.br
14
www.pernambuco.com/tecnologia/empresas.html
22
seja, gráficos 3D, deve-se a essa ser uma área relativamente inexplorada [5].
produção de aplicações, pois muitas foram projetadas para fins específicos, isto é,
funciona para poder realizar a sua tarefa, algo inaceitável devido às complicações e
atrasos no desenvolvimento.
23
referências bibliográficas.
dissertação;
animação em si;
apresentando sua organização e suas classes com base na análise dos requisitos
framework e
aqui apresentados.
Tal tipo de software tem evoluído rapidamente ao longo do tempo, pois em seu
ruído), como os encontrados nos PC’s com a denominação de “PC Speaker”, ou por
microcomputadores de 8 bits.
Atualmente jogos por computador fazem uso de diversas mídias (texto, vídeo,
animações, som, etc), apresentam gráficos 3D com excelente qualidade visual, bem
como contam com sons e músicas primorosas que fazem uso de técnicas
devem propor enredos, objetivos e uma interface para a interação do usuário com o
Embora o tipo de jogo seja de pouca relevância para o presente projeto uma
breve análise dos tipos existentes se faz necessária para que o motor de jogo
1.1. Estratégia
São jogos que exigem raciocínio, podem ser em turnos, tais como os tradicionais
1.2. Simulação
de forma fiel, as leis da física. Dentre estes jogos pode-se citar o Flight Simulator
que apesar de não ser um jogo, é classificado como tal, a série Test Drive e os
guerreiro/soldado).
15
Termo utilizado para indicar o quão atrativo o jogo é em termos de manipulação dos personagens/objetos. Um
jogo de boa jogabilidade geralmente atrairá mais adeptos, como é o caso do clássico Tetris, um jogo de baixa
jogabilidade atrairá menos, tais como os simuladores de vôo.
27
1.3. Ação
definido, uma história simples e a exigência de bons reflexos. Dentre este tipo de
sistema de regras.
Esse tipo de jogo tem por objetivo criar no computador um ambiente capaz de
proporcionar ao jogador o mesmo tipo de jogo que ele jogaria com um grupo de
história bem elaborada. Dentre este tipo encontram-se os títulos Diablo I e II,
1.5. Adventures
Esse tipo de jogo, muito popular entre os micros da geração 8 bits, tinha como
para que as ações pudessem ser interpretadas. Geralmente, o jogo não possuía
composta pelas palavras (ações), que poderiam ser selecionadas com o mouse e
exigência de raciocínio lógico e pode ser classificado, também, como uma história
Degiovanni), Full Throttle da Lucas Arts, as incansáveis séries Space Quest e King’s
1.6. Infantis
representa o meio pelo qual o usuário incorpora o ambiente do jogo e possui grande
interação, apenas dois tipos de visualização podem ser definidos. São eles:
1.7. 1ª Pessoa
[Figura 1].
visualizar a si mesmo, seja ele apenas um personagem do jogo, tal como em Tomb
Raider, ou um exército, tal como em Emperor, Battle for Dune. Esse tipo de
visualização é denominado de “God View” pois o usuário tem uma visão completa do
jogos da série Tomb Raider [Figura 2], da Eidos Interactive, que foram muito
definir uma câmera posicionada para gerá-la. Dentre os jogos nessa categoria
Emperor, Battle for Dune [Figura 3], da Westwood e Star Trek Armada, da
Interplay.
jogo é o seu ambiente, pois ele caracteriza objetos, formas de iluminação, limites de
masmorras, muito popular entre jogos de 1a. pessoa como o Quake [Figura 1] ou o
uma casa.
geralmente, simulam o céu por meio de uma caixa ou domo texturizado denominado
(2.1), principalmente aqueles que operam com aviões ou automóveis, tal como o F1
16
SkyBox: Forma geométrica, geralmente um domo ou uma caixa, com textura de céu que contêm todo o
ambiente do jogo.
33
Ambientes mistos podem ser compostos por dois ou pelos três tipos de
eles:
a) O enredo, responsável pelo tema, trama e objetivos do jogo, fatores que não
ao jogar, e;
como, vídeo, áudio ou animação e as mídias que não são dependentes do tempo,
que, aos poucos, imagens fossem inseridas no contexto do jogo gerando, portanto,
cinco dos componentes de sistemas multimídia citados acima, a saber, vídeo, áudio,
Além disso, uma das características fundamentais dos jogos por computador é a
Conclui-se, portanto, que jogos por computador são sistemas que exploram de
Por ser um sistema que faz uso intensivo das diversas mídias oferecidas pelo
computador, jogos por computador exigem uma série de requisitos para operarem a
contento.
Abaixo se detalha os requisitos que um jogo deve ter, bem como suas
3.1. Vídeo
Observe que quando bem usado, o vídeo pode aumentar o prazer e a compreensão
primeiro a usar vídeo analógico mesclado com objetos de jogo. Sherlock Holmes:
Consulting Detective, liberado em 1992, foi o primeiro a usar vídeo digital. O primeiro
jogo com vídeo de sucesso foi The 7th Guest, da Trilobyte, liberado em 1993. O mais
popular de todos foi Myst, da Cyan, jogo liberado para PC em 1994 e que contribuiu
37
para CD. Myst utilizou adequadamente o vídeo através de pequenas inserções que
Os cuidados que devem ser tomados com a inserção de vídeos em jogos são:
4, ...). As linhas pares são capturadas 1/60 de segundo depois das linhas
30 fps (quadros por segundo) e filmes de 24 fps. Estas taxas têm de ser
conversão.
38
nas bordas de vídeos analógicos que não são vistos em um monitor de TV, mas
- Atores ruins: A escolha dos atores deve ser feita com cuidado, pois há
finalizado do que a encenação. Isto porque sons são uma constante em jogos e
jogo em termos de cores, luzes, materiais, etc, para poder planejar as tomadas e
O cromaqui é uma técnica que consiste em filmar uma cena em que o cenário de
do cromaqui.
uso de vídeos em jogos está fadado a ser extinto em um futuro próximo devido aos
seguintes fatores:
3.2. Áudio
áudio devido à tecnologia de áudio ambiental ou 3D, o que faz com que o jogador
permitindo a geração dos mais variados tipos de efeitos, bem como a utilização
para um arquivo Wav, ele pode requerer uma taxa de transmissão de 40 Mbytes
- MIDI: A interface MIDI (Musical Instrument Digital Interface) [8] define uma
pertinentes, tais como a nota, a sua velocidade, instrumento, etc. O MIDI não é
como um tipo de som pré-definido, sendo eles variados, como guitarra, teclado,
gaita, etc. Isto acentua a flexibilidade deste tipo de som, pois permite que todas
espaço em disco que ele ocupa, por exemplo, um minuto de som com só uma
trilha e sem nenhum evento a ele ligado requer 3Kb, o que, comparado com o
vêm embutidos nas placas de som mais comuns e apresentam uma qualidade
sensitivo entre 2KHz e 4 KHz. Assim, um algoritmo elimina grande parte das
freqüências que um ouvido humano possa não escutar e ainda algumas que
possam ser retiradas sem que haja perda na qualidade sonora. Ressalte-se que
informações que nunca mais poderão ser recuperadas. A maioria dos rippers,
compacta a uma razão de 11:1 enquanto o MP4 a 16:1. O ganho de 30% advém
- RA: O formato Real Audio foi desenvolvido para uso na Internet. Ele
permite que o som possa ser ouvido com boa qualidade, diretamente pela rede,
entrada específicos.
Feedback, que provê ao jogador uma resposta tátil, por exemplo, sendo o dispositivo
de entrada um manche ou joystick (de avião), o avião do jogador, ao ser atingido faz
o manche tremer.
43
Abaixo estão alguns dispositivos cuja entrada pode ser passível de uso em um
motor de jogo:
1.13. Teclado
É o dispositivo mais primordial para um jogo por computador, porém sua grande
1.14. Joystick
Ele consiste de uma haste móvel que indica a direção desejada pelo jogador e um
direcionador onde o jogador, com o seu polegar, indica a direção desejada. O game
pad possui dois ou mais botões e também tem a possibilidade de possuir force
1.16. Manche
dos joysticks e game pads, pois o manche pode ter a possibilidade de permitir mais
44
graus de movimentação que os dois últimos dispositivos citados e, assim como eles,
haste do joystick para frente ou para trás e a direção seria equivalente a mover a
haste para a esquerda ou direita. Assim como os outros dispositivos esse sistema
1.18. TrackBall
Durante muitos anos o campo de realidade virtual utilizou esse dispositivo como
especificamente para a área de realidade virtual, o trackball pode ser utilizado para a
possível utilização seria para jogos de ação em primeira pessoa, como Quake ou
Descent.
1.19. Mouse
ruim se esse dispositivo não for utilizado como dispositivo de entrada. Tal é o caso
45
Capítulo 4. - Gráficos
simulação física simples, porém ficou marcado, não somente por ser considerado o
primeiro jogo, mas também por ser o precursor de gráficos em jogos, porém, por ter
antigos adventures, o mercado consumidor desse tipo de aplicação tem sido cada
Um jogo, quanto aos gráficos, pode ser classificado em três tipos: a) 2D; b) 3D e
c) misto.
Jogos 2D, atualmente, utilizam apenas imagens 2D, desenhadas por um artista e
Jogos mistos apresentam tanto gráficos 3D quanto gráficos 2D, como o caso do
organizadas em camadas.
4.1. Renderizador
Ultimamente esse objetivo tem se mostrado cada vez mais próximo de sua
principalmente por ter que renderizar as cenas muito rapidamente. Esse tipo de
48
mesmas, até pouco tempo atrás, só era viável em estações gráficas dedicadas ou
aplicações eram sistemas dedicados ou, no caso dos motores de jogos, sistemas
essa retro-alimentação afeta o que será gerado em seguida. Este ciclo de reação e
renderização acontece em uma taxa rápida o suficiente que o usuário não percebe
imagens em uma taxa discreta, mas que, ao contrário, ele se torne imerso em um
matemáticas de projeção e iluminação que tem por objetivo gerar uma imagem
refletância da luz provinda das fontes de luz e dos outros objetos. Tal cálculo é
consiste de diversos estágios [12] e definem restrições cujos dados não podem ser
enviados para o estágio seguinte caso o estágio atual não esteja finalizado.
velocidade de renderização [11]. Essa velocidade pode ser expressa em quadros por
pipeline, for conhecido e o tempo que leva para que o dado seja processado por ele
reduza o tempo total do processo. Assuma, por exemplo, que o gargalo leve 20ms
capaz de atualizar a tela nessa velocidade. Caso contrário, a taxa real de saída será
mais baixa.
um sistema gráfico.
O desenvolvedor tem total controle sobre o que acontece nesse estágio, pois ele
Tais dados são fundamentais para o sistema e essa é a tarefa mais importante
de colisão que gera uma resposta ao sistema caso dois objetos colidam e o de
restrição (culling), que identifica quais polígonos ou objetos gráficos estão dentro do
volume de visão determinado por uma câmera de maneira a impedir que os dados
descritivos de geometria dos que não estão visíveis sejam enviados ao estágio
polígonos que não estejam contidos no volume de visão definido pela câmera e
52
Com o intuito de se criar imagens mais realistas dos modelos pode-se adicionar
à cena uma ou mais fontes de luz. Os objetos podem apresentar cores associadas a
cada vértice, ou então podem ter uma textura aplicada a ele. Dessa maneira a
cena sem iluminação, uma textura em um objeto oferece uma idéia de sua
dados referentes à mesma, tais como as normais das faces dos polígonos que
definem os objetos.
Nesse estágio também são considerados os atributos visuais dos objetos, tais
proporcionando o não paralelismo entre retas paralelas, fazendo com que retas
objeto.
x’
x
PF - 1 PF -2
z
dentro do volume de visão. Dados dos objetos que estão totalmente dentro do
estágio de geometria.
objetos que estão dentro ou parcialmente dentro do volume de visão definidos pela
transformação de escala.
rasterização, responsável por atribuir as cores corretas aos pixels para que a
55
de cada pixel está localizada em um buffer de cores (uma matriz linha de cores com
hardware dado a complexidade das operações. Akeley e Jermoluk [14] e Rogers [15]
vídeo referencia essa área de memória trocando, assim, a área de memória a ser
desenhada.
acordo com sua profundidade. Isso significa que quando toda a cena tiver sido
primitivas da cena que são visíveis do ponto de vista da câmera. Isso é realizado
de Z-Buffer (também conhecido como buffer de profundidade) [16]. Caso não haja um
56
adotadas:
objeto sem que o objeto final não sofra uma modificação perceptiva para a
mesmo objeto com menos informação. Isso normalmente é realizado pelo uso
detalhes sobre gráficos e objetos gráficos, bem como métodos sobre processamento
ser aplicadas para todo tipo de coisa, tal como verificação gramatical e ortográfica
sem o efeito de escada (antialiasing), reconhecimento e digitação por voz, etc [11].
quadros por segundo; resoluções mais altas e objetos cada vez mais realísticos na
cena.
suficiente e, talvez, uma resolução de 1600 por 1200 pixels seja suficiente por
incluiria um modelo poligonal com mais de 500.000.000 polígonos [ 19]. Donde pode-
serão necessários.
dados descritivos para representar os objetos que irão compor o sistema [4].
performance no sistema.
Da mesma forma, um objeto representado por uma função pode fazer com que o
definições matemáticas para operações nesse tipo de estrutura estão muito bem
60
A representação por conjunto de faces é a mais fácil de ser criada. Ela descreve
são formados por uma relação entre dois vértices e, através desse conjunto, existe
um conjunto de faces cujos elementos são formados através da relação entre três ou
polígono desejado.
com muitas faces sempre existirão duas faces que compartilham pelo menos um
vértice. Caso o sistema poligonal lide com triângulos, o número máximo de vértices
vértices subtraído de um. Esse compartilhamento indica que um mesmo vértice pode
ser processado mais de uma vez no sistema, o que pode causar um atraso no
stripping.
Esse método descreve que os objetos poligonais são descritos por uma lista
eles se encontram.
irão definir o objeto e ela geralmente define objetos triláteros, quadriláteros ou linhas,
Quadrilátero 0,1,2,3,4,5,6,7
Triângulo 0,1,2,3,4,5
Triângulos 0,1,2,3,4
Centrados
enviados.
uma função f(u,v)., muito útil para terrenos, objetos quádricos ou superfícies não
Por não ter um volume grande de dados essa representação consome pouca
representação ela pode (e deve) ser convertida para uma representação poligonal, o
Atualmente muita atenção tem sido dada a algoritmos que resolvam o problema
se torna ineficiente.
Para isso se faz necessário uma organização espacial das primitivas da cena, a qual
geometria da cena.
seguir.
de visibilidade (PVS).
1.30. Octrees
17
Frustum: Volume de visualização que representa o conjunto do espaço visível ao usuário. Todo e qualquer
objeto que estiver total ou parcialmente dentro do frustum será renderizado.
65
Uma octree é uma estrutura que particiona essa caixa em oito caixas
Cada octante está associado à caixa pela qual ele foi particionado e cada objeto
está organizada.
Figura 11, octantes que não possuem objetos não são subdivididos e são removidos
da árvore.
Raíz
1o Nível
2o Nível
uso posterior, porém, em termos de animação a octree deve ser recalculada para a
Uma alternativa seria utilizar a representação octree para objetos estáticos, como
para cada polígono desse ambiente o teste do frustum culling. Para cada objeto da
visibilidade da octree.
dois grupos: objetos do lado positivo do plano e objetos do lado negativo do plano.
67
polígono intercepte um plano, ele pode ser dividido em dois novos polígonos cujas
partes se situarão uma no lado positivo e outra no lado negativo, ou ele pode ser
adicionado a ambos os lados. Esse processo é repetido até que todos os polígonos
calcular uma árvore BSP calcula-se divisões para cada objeto e não para cada
polígono, de maneira que na estrutura final cada objeto se situe em uma única
masmorras, etc, os quais possuem salas conectadas através de portas (ou portais).
representados por polígonos convexos que informam qual célula pode ser
pode ser vista através de uma série de portais não é considerada para a
sistema nos permite referenciar apenas uma pequena fração do conjunto de dados
total, porque qualquer geometria que se situe no lado oposto de um portal não
visível é ignorada.
visível que pode ser eficientemente computada. Teller e Séquin [22], utilizaram muito
por portais.
célula para célula e célula para objeto visíveis [Fig 13]. Esse é um processo que
Figura 13: Resolução de visibilidade do interior de um prédio por [23]. À esquerda o modelo
Apesar do alto custo computacional requerido no cálculo do PVS, por ele ser
eficientes.
70
está perto do ponto de visão. O tempo que leva para processar esse alto número de
qualidade visual. Contudo, quando o mesmo modelo está distante do ponto de visão
o detalhe provido por milhares de polígonos pode não ser perceptível, pois a
cobertura do espaço de tela do modelo renderizado pode ser apenas uma pequena
quantidade de pixels.
Nessa situação a negociação entre tempo e qualidade visual não é válida, pois
definidos sem perda significativa da representação gráfica final dos mesmos através
do detalhe mais simples pode ser útil para melhorar a taxa de quadros por segundo
do renderizador.
Essa técnica foi introduzida por Clark [24] em 1976 e tem sido utilizada desde
geométrico.
o nível de detalhe. Infelizmente, esses métodos heurísticos, por serem estáticos, não
problemas como: “Qual seleção de nível de detalhe para cada objeto produz a
objeto, a troca imediata de um nível para outro causa efeitos perceptíveis devido,
esse problema seria um curto período de transição entre um nível de detalhe e outro
através de técnicas como, por exemplo, o fading, porém, nesse caso, o sistema
ficaria carregado com duas definições de malha para o mesmo objeto. Outro método
útil seria utilizar a técnica de morphing, que realiza transformações nos vértices da
grade retangular. Tais dados são facilmente obtidos por fontes tais como imagens de
real para diferentes áreas do terreno. Falby [26], cita como o gerenciamento em
1.35. MipMapping
Enquanto que nível de detalhe lida com a complexidade geométrica dos objetos,
aplicada no objeto.
filtro passa baixa e aplicando a média da área de 2x2 pixels ou texels. Dessa forma
Figura 16: Correção de textura por mipmapping, o objeto da esquerda não possui mapeamento
objeto ao ponto de visão, ele é aplicado diretamente nos polígonos dos objetos e,
Capítulo 6. - Animações
Animar significa, literalmente, dar vida a algo, mover algo que não pode mover
por si só. A animação adiciona aos gráficos a dimensão do tempo, o que significa um
Zoetrope [28], que consistia de um cilindro oco, com rotação em seu eixo de simetria
porém,a primeira idéia de se usar uma câmera para fazer com que objetos ou
ser atribuída por John Bray por volta de 1910. Esta técnica foi patenteada em 1915.
história de modo a se criar um story board onde se esboça algumas cenas chaves
animações por sprites, onde um fundo é desenhado na tela e os sprites são, por
ilusão de animação.
da estrutura de sprites e
classificam como:
extremamente realistas.
78
6.1. Tradicional
controle para a exibição de quadros onde, caso haja uma interferência do usuário, a
animação continua até o quadro inicial da mesma e então é alterada para o quadro
inicial da próxima animação, que diz respeito à informação transmitida pelo usuário.
correndo, parado, etc) e caso haja interferência há uma transição de uma máquina
máquinas de estados:
Pular Pulando
Z ms
Pular
Caiu
Parado
X ms Andando
Andar Y ms
Parar
objeto ou de como os vértices (ou alguns dos vértices) dos objetos serão
modificados, através de animação por controle de baixo nível e, portanto, não pode
6.2. Procedimental
como uma função do tempo. Tal definição vaga engloba uma grande faixa de
trabalho [30].
etc.
seção 10.6.3.
80
6.3. Estrutural
Esta categoria estende o campo da animação para além daquele que especifica
como um objeto rígido se move no espaço por permitir que a própria estrutura do
movimento relativo um ao outro está restringido de alguma forma. Esse assunto está
independentemente das forças atuantes que o produz. Nesse campo estão o estudo
direta e a inversa. A cinemática direta diz que o movimento de todas as juntas deve
àquela posição;
demonstra uma estrutura que consiste de duas juntas de revolução e uma junta de
Hierarquia de nós:
Nó Raiz: ;
Terminações: ;
Nós Convencionais: .
cinemático é o método mais direto para animação de objetos articulados. Ele diz
hierarquia entre eles e não diz respeito às forças de atuação ou torque que atuam no
atuando no objeto, a massa do objeto, seu momento de inércia e sua interação com
[30].
84
- Arestas;
- Ossos.
6.4. Estocástica
como quedas d’água [36], fogos de artifício e campos de grama perturbados pelo
6.5. Comportamental
objetos se comportam ou como eles interagem com seu ambiente. O animador faz
um ator independente que navega de acordo com sua percepção local do ambiente
melhores sistemas mais conhecidos e quotados são o ASAS (Actor Script Animation
então, passada para artistas menos habilidosos para criarem os, assim chamados,
intermediários.
que afeta o movimento provendo, portanto, um controle de mais alto nível do que o
processo tradicional.
87
Deve-se tomar muito cuidado com a parametrização dos dados para que a
interpolação dos quadros não seja feita de maneira errônea. A Figura 21 indica como
1.40. Paramétricas
longo de um caminho formado pela spline, assim interpola-se a posição dos pontos
de controle da spline tanto no espaço quanto no tempo onde tais pontos indicam a
calcular a posição do objeto ao longo do tempo fazendo com que ele siga o caminho
Até algum tempo atrás, projetos que envolviam gráficos 3D deviam implementar
todos os processos para a geração dos gráficos, sendo muitas vezes ineficientes ou
Como muito dos procedimentos efetuados por esse processo é corroborado por
para computador são OpenGL [41] e DirectX [42]. A OpenGL apresenta, numa primeira
7.1. DirectX
performance possível.
para suas aplicações sem se preocuparem com qual adaptador de monitor, placa de
tinham que adaptar seus produtos para que eles funcionassem bem em uma enorme
90
uma versão simples do seu produto sem se preocupar com a grande quantidade de
emulation layer”), que fornece drivers de software que agem como hardware. Por
exemplo, um jogo DirectX que utiliza gráficos 3D pode rodar numa máquina que não
possua um acelerador 3D, pois o DirectX simula o serviço de uma placa 3D.
7.2. OpenGL
mais do que computadores com uma proposta geral, eles tinham um hardware
rápida (um pré-requisito para gráficos 3D), suporte de hardware para buffer de
profundidade, além de outros aspectos. Quando a Silicon Graphics tentou portar sua
passos necessários para obter uma determinada aparência ou efeito. Estes passos
funcionalidades. Elas são usadas para desenhar primitivas gráficas como pontos,
usuário ou entrada e saída de arquivo. Cada ambiente (tal como Microsoft Windows)
tem suas próprias funções com essas finalidades e o acesso ao retorno gráfico
7.3. Outras
ou específicas.
novos jogos serem construídos a partir das interfaces e funcionalidades que ele
De acordo com Hodorowicz, L. [44], um motor bem projetado deve apresentar dois
motor para serem utilizadas nos projetos de jogos. Tais módulos podem ser
Abaixo se encontra um estudo sobre motores de jogos 2D e 3D, bem como uma
8.1. Motores 2D
linguagens de mais alto nível, como o “C”, porém a metodologia de produção das
tinha que ser implementado novamente e o pouco que era aproveitado de projetos
“Indiana Jones and the Fate of Atlantis”, “Full Throttle”, dentre outros, da mesma
companhia.
8.2. Motores 3D
Motores de jogos 3D são uma extrapolação dos motores de jogos 2D, pois eles,
modulares.
De acordo com análises realizadas por Madeira, C. [48], foi reportado um conjunto
Abaixo se encontra a análise dos três motores acima citados, uma análise do
motor de jogo Fly3D [49] e do Forge V8 [48], projeto desenvolvido na UFPe por
Charles Madeira, bem como uma análise comparativa do ForgeV8 com o presente
projeto:
1.42. Golgotha
O Golgotha foi projetado para ser um motor comercial, desenvolvido pela Crack
dot Com18 com o intuito de construir um jogo 3D homônimo, mas após dois anos de
mais existir verbas para a continuidade, a Crack dot Com decidiu adotar os
Os seus cenários podem ser constituídos por terrenos em diversos níveis de relevo,
18
http://www.crack.com
97
bastante confusa.
uso de uma biblioteca de renderização portável com suporte a Glide 19, Direct3D,
OpenGL e rasterização por software; suporte a sons 3D; uso de plug-in para
cenários; uso de código portável para rede com suporte aos protocolos UDP e TCP;
interpretador LISP com coletor de lixo threaded; sistema de janelas com interface de
texturas 1024x1024 pelo uso de memória cache; LOD em terrenos; suporte a trilha
K6-3D; e código fonte em C/C++ que pode ser executado em Windows (DirectX,
19
GLIDE: Graphical Library Integrated Design Environment, biblioteca gráfica precursora do DirectX.
98
que seus componentes e bibliotecas são, quando possível, independentes uns dos
poder construir cenários abertos, e então renderizar terrenos externos não limitados.
20
Medidas e Precisões ao nível de coordenadas de tela e coordenadas de textura respectivamente.
99
Windows, OpenGL para Linux, BeOS, MacOS/9 , OS/2 e Windows, e Glide para
Linux e Windows; leitor para modelos do Quake II (MD2) e 3D Studio (3DS); suporte
1.44. Gênesis 3D
também pode ser usado para construir cenários abertos não extensos, mas com
arbitrárias.
1.45. Fly 3D
O motor de jogo Fly3D foi implementado por Fabio Policarpo com a assistência
do pesquisador inglês Allan Watt para promover o livro 3D Games Real Time
Rendering and Software Technologies [50] de autoria dos mesmos. Ele permite a
A versão completa do motor (motor, SDK e código fonte) é obtida apenas através
1.46. Forge V8
Funcionalidade específica de unidades de processamento gráfico de última geração que permite renderização
21
devem incluir desde os componentes que tratam problemas de baixo nível até os
que trabalham em alto nível. Sua estrutura pretende abstrair diversas das
fácil utilização por disponibilizar modelo de acesso de alto nível. Esse modelo de
acesso é composto por classes que podem ser extendidas por aplicações
específicas e por métodos que podem ser utilizados para a execução de tarefas
bem como uma relação de acesso dos módulos de estão definidos pela Figura 22
tais como OpenGL ou DirectX, bem como permite que se especifique outras
processamento de renderização.
bibliotecas.
gráficos.
aplicação.
não terem sido definidas, o projeto foi desenvolvido utilizando-se alguns conceitos
projeto.
caso das definições da ambientação do mundo que, como já citado, pode ser
1.47. Sprites
Sprite é uma estrutura de dados muito utilizada pelos jogos 2D. Consiste em um
animação quadro a quadro (6.1), indexada por uma estrutura de lista circular e um
procedimento para definir qual será a próxima imagem a ser exibida de acordo com
1.48. Objetos 3D
básicas para um motor de jogo. Eles são formados através de uma especificação
simples, com uma malha única e um conjunto de atributos visuais, incluindo texturas,
tipos de representação para malhas poligonais, porém é possível que se utilize uma
primitiva a ser usado, porém, não compartilham como os dados do objeto serão
poligonais através de uma classe abstrata e duas classes herdadas, para que eles
Objetos formados por uma estrutura paramétrica são definidos através de uma
representação de objetos.
elas:
único objeto diversas malhas que possuirão uma regra para a articulação,
II. Deformação por Morphing: formada por mais de uma malha que são
interpolação de posições dos vértices fazendo com que animações desse tipo
110
que estão conectados aos vértices vizinhos utilizando-se de uma regra física
1.51. BillBoards/Impostors
que a face do objeto (o vetor normal do objeto) está na mesma direção da normal da
textura, animada ou não, aos billboards de maneira a tornar uma cena mais realista
sem um alto custo computacional. Os principais usos para essa estrutura são para
objetos naturais, como árvores, pedras ou estandartes ou para objetos que simulem
representarem árvores.
111
1.52. Terrenos
Devido à sua estrutura ser muito ampla, ela deve ser quebrada em diversas sub-
cada uma com suas vantagens e desvantagens, as quais estão analisadas abaixo:
112
I. Voxel
Voxel é o acrônimo para volumetric pixel, uma técnica para representar objetos
3D por uma definição que não seja através das primitivas geométricas, mas sim
através de um número de pontos. Voxel pode ser a largura de um pixel na tela, uma
pipeline de geometria.
mais alto, porém a qualidade gráfica produzida é mais realista, enquanto que o
método que considera o valor do dado como um valor de altura possui custo
113
II. Paramétricos:
geometria pode ser custoso. Exemplos de terrenos por malhas paramétricas são
estrutura de voxel. A vantagem dessa estrutura é que ela pode ser pré-processada e
III. Fractais:
Fractais [57] possuem uma definição matemática precisa e de acordo com Ebert
geralmente estruturas com alto grau de similaridade própria, onde sub pedaços de
um objeto parecem ser o próprio objeto, porém numa escala e orientação diferente.
114
mundo real que exibem essas características, tais como montanhas, ilhas, plantas e
terrenos.
Para terrenos gerados por fractais os únicos dados requeridos são: parâmetros
concreta.
1.53. Texturas
Textura pode ser considerada como um dos objetos primitivos em um jogo 3D.
Por ser uma imagem bidimensional há a possibilidade de que uma textura possa
ser animada, seja por inserção de vídeo ou por meio da estrutura de sprites onde o
dados.
115
1.54. Estáticas
Texturas estáticas são imagens cuja estrutura e conjunto de dados não são
com algumas regras de aplicação, tais como nível de transparência e podem ser
II. Matematicamente Geradas: Como o próprio nome diz são imagens geradas
como texturas. Dois exemplos de métodos para geração desse tipo de textura
são: a) Fractais, muito utilizados para a geração de terrenos, árvores, ilhas, etc.
fumaça, etc.
116
1.55. Animadas
sistema e geradas ou ter sua referência mudada em tempo real, pois elas possuem
I. Vídeo: Vídeos são a aplicação mais simples em textura animada, pois eles
complicação está na obtenção dos quadros, pois para cada tipo de arquivo de
aplicação para esse tipo de textura seria o efeito de fogo ou de plasma, porém
1.56. Dinâmicas
imagem para ser utilizada na cena. Esse buffer renderizado não é exibido ao
Esse tipo de textura deve realizar uma chamada ao renderizador utilizando a sua
câmera do ponto de visão do usuário, porém com sentido inverso de maneira a gerar
normal de renderização.
Para impedir que a renderização normal não se perca, é ideal que todo esse
da cena.
Objetos empíricos não são visíveis ao usuário, mas modificam a cena ou objetos
Esses objetos são os mais difíceis de se definir em uma aplicação, pois apesar
pode não ter certeza das características desejadas, ou pode pensar que o modelo
sua simplicidade, partículas podem ser úteis para uma ampla variedade de
aplicações, como, por exemplo, a construção de malhas não rígidas através de uma
efeito. Tem, portanto, como objetivo representar e simular alguns dos fenômenos
que ocorrem no mundo real tais como a chama de um fogo, o choque de uma bola
No exemplo citado, o objeto que representa uma malha formada por partículas
representações para esses modelos, tais como molas, cordas, tecidos ou objetos
Por não ter uma representação única, sistemas de partículas devem ser
ao simulador de física para definir as leis aplicadas às partículas que ele gerencia.
uma malha que representa um humanóide pode gerar animações de malha maleável
de maneira simples.
renderização.
n n
V ' = ∑ wi M iV , com ∑w i = 1 , onde
i i
1.59. Iluminação
visualizador. Essa cor depende das propriedades das fontes de luz (objetos de
material [61].
121
1.60. Empírica
Iluminação empírica descreve como uma fonte de luz atua no ambiente através
azul (RGB).
e especular do objeto, e, a cada posição do objeto, a cor final do pixel a ser exibido
acordo com a distância, posição (local ou no infinito) e, caso seja uma spotlight
possui também informações sobre direção, área de penumbra e ângulo de corte [62].
que uma textura padrão, para armazenar informação sobre iluminação para uma
superfície.
* =
resultado melhor do que as que utilizam apenas textura, porque essa técnica cria um
123
senso de profundidade devido à utilização de mapas de luz que podem ser usados
1.62. Estática
1.63. Dinâmica
Como mapas de luzes utilizam uma estrutura semelhante às das texturas, pode-
controlada.
Dessa maneira, cada objeto associado por um mapa de luz dinâmico irá
instanciar seu próprio objeto de mapa de luz de forma a permitir que eles possam
textura da superfície a que ele será aplicado em tempo de execução, o que pode
consumir tempo caso o processo de aplicação de mapas de luz não seja suportado
Como podem existir diversos tipos de iluminação dinâmica de mapas de luz além
dos três acima citados, a estrutura de definição de mapas de luz dinâmica não pode
ser previamente definida, devendo ser representada por uma classe abstrata a ser
organizados de maneira a criar uma cena bem sucedida [52]. Isso se torna ainda
desses objetos.
visual.
Sua estrutura define um objeto raiz, denominada cena, que conterá os objetos de
ambiente.
125
Cada objeto gráfico pode, por si só, ser um sub-grafo de cena, representando
transformações realizadas sobre uma câmera que será responsável por selecionar e
parte, devido à sua extensão, definimos, portanto, três tipos de nó para o sistema: a)
1.65. Câmeras
acordo com o contexto do jogo, se o jogo será ou não bem aceito pelos usuários.
1. Estática: Toda e qualquer interação realizada pelo usuário não irá alterar o
câmera caso esta esteja associada a ele, o jogo Tomb Raider, da Eidos
Com esse objetivo o motor de jogo deve ser capaz de criar janelas de
visualização deve ser associada uma câmera de modo a renderizar mais de uma
1.67. Renderizadores
responsável por definir o que vai ser desenhado, e onde vai ser desenhado nas
coordenadas de janela.
toda a aplicação. O renderizador faz uma requisição a cada janela de visão para
relacionados.
projetos.
Unified Modelling Language (UML) está descrita na seção (10.4) deste capítulo,
tenham acesso a essas variáveis. Ainda mais, acoplar dados e seus algoritmos
[65].
1.68. Instanciação
que dois personagens de jogo possuam, cada um, uma arma, cada qual possui um
130
mesmas.
1.69. Encapsulamento
todo [66].
definir um objeto r como uma instanciação da classe peao usando uma das duas
sistemas, são alocados quatro bytes extras para referenciar o endereço de memória
do objeto. Contudo, passar o objeto como referência para uma função simplesmente
Uma razão para o sucesso do paradigma orientado a objetos é que ele utiliza um
maneira que eles possam ser utilizados em diferentes projetos sem a necessidade
independente.
Estas técnicas aplicadas de forma ideal provêem componentes que podem ser
facilmente conectados para construir um novo sistema. Não é nada interessante que
motores de jogos.
1.71. Modularidade
módulos;
outros módulos;
pequeno, de módulos e
ele. Estes critérios apontam para cinco princípios que devem ser seguidos de
por acrescentar estruturas de dados ou funções para manipular esses dados em sua
1.72. Reusabilidade
uma tarefa trivial, essa questão não tem uma resposta simples pois envolve vários
fatores [67].
[43].
ser construído de forma que possa ser liberado de maneira incremental, permitindo o
tipos;
estruturas;
especificar uma operação sem que ele saiba como ela foi implementada ou
códigos similares.
resultado num dos grandes métodos de reuso, tem sido o de reuso de projeto
projeto.
deve ser específico ao seu problema, mas também geral o suficiente para resolver
minimizando-o [68].
mais rapidamente.
problema de uma maneira que se pode utilizar essa solução milhões de vezes sem,
realizada de uma maneira a ser utilizada infinitas vezes sem a necessidade de ser
palavras;
138
estrutura comum de projeto que se torna útil para criar um projeto orientado a objeto
programação, como o “C” o segmento de código que faria isso seria semelhante ao
descrito abaixo:
Realize Adição
139
que iterar sobre uma estrutura mais complexa, como, por exemplo, sobre os nós de
construções que lidam com tais iterações de tal forma que se torna conveniente
definir uma classe extra que torne o código mais legível e reduza as chances de
erros de programação.
O padrão de projeto Iterator [68] é uma construção útil para tais casos. Para
realiza iteração no nó
Unified Modelling Language (UML) [72], a qual está se tornando um padrão de fato.
código entre dois procedimentos. Ele normalmente move a parte comum dos
141
1.75. Herança
no caso, podem ser tanto entre procedimentos ou entre variáveis. Uma linguagem
objetos permitem extrair as similaridades entre duas classes e definir uma terceira,
Figura 28.
substancial [73] [66] de se projetar o sistema antes de que qualquer linha de código
seja escrita.
142
fase de implementação.
para desenvolvê-lo.
1.76. Classificação
processo inerentemente iterativo, pois nem as “bordas” das classes nem os tipos de
projeto.
classificação de espécies [73], as quais possuem gênero, filo, classe, família, etc.
Assim como a lista de especialização que leva a uma espécie provê conhecimento
minimizado. Assim como nos projetos de sistemas, se a classe base da qual uma
hierarquia das classes na medida em que as classes forem identificadas, o que leva
a separar as abstrações comuns a uma classe base e usar a herança para definir
diagrama de heranças.
das instâncias dessa classe. Ela também irá prover um construtor que receberá
métodos, cada um dos três responsáveis por retornar o valor de uma das
Suponha também que ele queira definir uma classe para representar vetores no
pois faz sentido normalizar um vetor, porém, não faz sentido normalizar um ponto.
como classes derivadas da classe base tupla3d, como demonstrado na Figura 28.
Tupla3D
X
Y
Z
Tupla3D(X, Y, Z)
tX() : X
tY() : Y
tZ() : Z
Vetor3D
Ponto3D
prodVetorial(Vetor3D) : Vetor3D
translada(x, y, z)
ProdutoEscalar(Vetor3D) : Inteiro
1.78. Agregação
têm que ser identificados durante o processo de projeto e que é crítico que sua
corrigidos.
sistema de freio, etc. É seguro dizer também que o “The Art of Computer
três ou mais pontos. Na Figura 29, as classes de polígono e de ponto são ligadas
Figura 29: Relacionamento de Agregação: Um polígono é formado por três ou mais pontos
1.79. Associação
Figura 30: Relacionamento de associação: segmento de reta é representado por dois pontos
147
específicos de aplicações.
A melhor definição foi proposta por Johnson e Foote [75]: “um framework é um
gráficos interativos. Para se construir tal objeto são requeridos três componentes
dados global.
círculo por chamar uma das rotinas de desenho de círculo, as quais tem o efeito
único banco de dados e todos os detalhes sobre a aparência do objeto são mantidos
dados.
149
descreve toda uma cena tridimensional e ainda contêm estados visuais nos objetos
pertencentes à cena.
Esse objeto diz respeito a renderização e deve manipular rotinas para converter
dinâmico pode ser implementado em uma única classe como, por exemplo, um
aparência numa nova posição. Porém, em aplicações mais avançadas, como jogos,
no próprio modelo.
classe do modelo, exigindo uma classe separada para realizar uma interpretação
dos atributos geométricos e visuais para poder produzir a imagem final. Exemplos
comportamento interativo, enquanto que a entrada de dados por outras fontes ou por
Uma solução geral para esse problema pode ser encontrada na metáfora
Essa fonte é o objeto que enviou a mensagem e pode ser obtido pelo receptor da
objetos conectados, uma fonte e um alvo, assim como dois chips em um circuito
pelo evento em si é o seu tipo, representado pelo nome do seletor. Qualquer outro
dado pode ser explicitamente obtido da fonte pelo tratador do evento. Esse método
evento.
Esse método é muito importante quando se trata de jogos, pois objetos podem
ter diversos dados associados a eles e criar um método para tratar de todos os
dados possíveis se torna custoso tanto no que diz respeito ao consumo de tempo
152
O jogador, ao ver o inimigo, decide disparar sua arma contra o oponente e pressiona
para atirar. O objeto personagem envia um sinal para a arma que o recebe, pergunta
arma) e envia um sinal ao sistema de partículas contido na arma para criar projéteis.
Supondo que atinja o oponente, o sistema identifica essa ação através do processo
projétil sinaliza o contato e o objeto alvo, o oponente, pergunta qual é o dano que o
Esse método fornece uma base de abstração bastante interessante para modelar
um sistema 3D, porém, ele não provê a questão essencial sobre o controle de
o MacAPP [78], que lida com aspectos de aplicações para Macintosh e o ET++ [79],
que oferece características similares para estações Unix, porém, todos foram
Produzir aplicações que exijam interação com o usuário e que respondam a essa
interação pode ser uma tarefa simples quando o domínio do problema é conhecido.
extrapolar o domínio e implementar algo que vai além do problema, como os atuais
complexa.
sistema.
12.1. Metodologia
iluminação. Porém novos conceitos continuam surgindo, o que foi fundamental para
área de animação se mostrou mais estável no que diz respeito do uso da informação
ferramenta, continuam sendo produzidos com a técnica desenvolvida por John Bray,
6). Animações por computador continuam utilizando técnicas antigas, mas também
que um motor, porém seu projeto foi concebido de uma maneira tão abstrata que
real. Ainda mais, em sua dissertação, o autor do projeto Forge V8 descreve que a
específicos da área de jogos, através das análises realizadas nos motores de jogos,
12.2. Framework
comportamento do framework.
157
visão, o mesmo é válido tanto para objetos de controle quanto para objetos de visão.
Controlador Modelo
Visão
Sistema
seguir.
12.3. Características
estrutural.
acordo com as mensagens enviadas dos objetos pelo controlador através de uma
implementá-las adequadamente.
implementadas utilizando o padrão singleton [68], que permite apenas uma instância
seguintes.
1.85. Repositório
dessa classe torna-se inviável, pois o framework ficaria limitado a uma biblioteca
específica.
repositório;
nome da textura;
argumentos;
identificador do grafo de cena que será atribuído a ela e métodos virtuais, devido
imagens;
estruturas.
conjuntos de dados:
162
aplicação;
- Adicionar Repositório;
A classe de volume de visão é uma das classes que podem ser implementadas
em ponto flutuante;
em ponto flutuante;
em ponto flutuante e
1.90. Projeção
Projeção indica o tipo de projeção a ser utilizada por uma câmera para renderizar
a cena.
seguintes atributos:
argumentos que ele pode receber. Esses argumentos vão desde o tipo de
ser utilizada;
1.91. Câmera
de visão e retorná-los para que o renderizador possa gerar a imagem. Esses objetos
objeto do grafo de cena (ou até mesmo ser um deles) e sofrer transformações.
Devido a isso ela não pode ser implementada como uma classe concreta, pois
espaço;
166
um vetor no espaço;
- Ajustar Posição;
- Ajustar Direção;
- Ajustar UpVector;
- Recuperar Posição;
- Recuperar Direção e
- Recuperar UpVector.
1.92. ViewPort
Ela necessita de poucos atributos e poderia ser projetada como uma classe
concreta, porém, por possuir uma câmera para gerar a imagem, ela necessita ser
em valores inteiros;
em valores inteiros;
inteiros;
- Ativo: Identifica se a cena vista pela câmera deve ou não ser renderizada.
1.93. Renderizador
Como é dependente dos viewports e das bibliotecas gráficas, essa classe deve
renderizador são:
- Adicionar Viewport;
- Remover ViewPort;
22
Buffer de Stencil: área de dados para controle e cálculo de funções de exibição.
169
dependentes do tempo.
inteligência artificial não são objetos de estudo desse trabalho elas estão omitidas.
seguir.
1.95. Sinal
objetos de modelo. Como os objetos de modelo não são definidos pelo framework e
sim indicados pelos desenvolvedores, essa classe deve ser implementada como
comando e
1.96. Temporizador
execução da aplicação. Para isso ele deve ter um ponto de acesso global e ser
singleton.
- Inicializar o relógio;
- Configurar o relógio e
entrada enviados pelo usuário ao sistema através da ativação dos sinais acoplados
a ele.
dispositivo ativará;
poderá acionar.
ativará o sinal;
- Remover Sinais;
- Reconfigurar Dado;
- Processar entrada.
de entrada informando ao sistema quais estão disponíveis ou não. Ele deve possuir
Lei física é uma classe abstrata que representa uma lei da física, aplicável a cada
seus dados;
Uma propriedade física possui as mesmas características que uma lei física. A
Uma maçã caindo continuará caindo aumentando sua velocidade de acordo com
acelerará caso ele receba um sinal para tal. Esse sinal deve ser processado pelo
simulador de física, o qual sinalizará o objeto associado a esse sinal para aumentar
Caso esse sinal pare de enviar dados ao objeto e exista uma lei que faça o carro
diminuir a velocidade de acordo com o tempo, essa lei passará a sinalizar sozinha o
tempo.
Os métodos são idênticos aos da classe de lei física, porém são acionados
simulação física.
Os objetos processados pelo simulador devem ser explicitados para que não
física do objeto.
propriedade física;
não querer usar essa metodologia. Ela não é implementada na classe abstrata
- Resolver colisões e
- Processar temporização.
1.102. Ossos
propriedade de um objeto;
osso.
- Adicionar ossos;
- Remover ossos;
- Identificador de animação;
processamento da animação.
responsabilidade de:
- Atribuir identificador;
- Processar animação e
- Reinicializar animação.
quando requisitadas.
temporizador;
desenhos animados.
dessa forma ele adiciona duas estruturas no repositório de geometria: uma esfera e
Raíz
Humanóide
Grupo
Grupo de Transformação
Esquerda Direita
Rotação Rotação
renderizador.
OssoTransl.addMatriz(Matriz de Translação);
OssoTransl.addTransformacao(robotrans);
OssoRot.addMatriz(Matriz de Rotação);
OssoRot.addTransformacao(roborot);
OssoPernaEsquerda.addTransformacao(peRot);
OssoPernaDireita. AddTransformacao(pdRot);
181
OssoPerna.addOsso(OssoPernaEsquerda);
OssoPerna.addOsso(OssoPernaDireita);
OssoPerna.addMatriz(Identidade);
OssoRobo.Add(ossoTransl);
OssoRobo.Add(ossoRot);
OssoRobo.Add(ossoPerna);
animação é uma matriz indicando, nas linhas, qual osso será transformado e nas
quadros chave.
dosétodos de interpolação.
alterar.
processamento físico.
Como o objeto está sempre em contato com o chão a lei física não é percebida,
14.1. Eficiência
(média)
Qualidade da Boa Razoável Boa
Simulação Física
Tabela 2: Análise de eficiencia de uma aplicação utilizando a arquitetura proposta
física o projeto superou as duas outras bibliotecas, mas vale salientar que por não
projeto pode apresentar resultados piores caso seja implementado de uma maneira
pouco eficiente.
a ser uma estrutura de grafo de cena pronta para uso, porém ela extende sua
apresentados a ela.
187
considerações finais.
15.1. Contribuições
O objetivo direto desse trabalho foi proporcionar aos desenvolvedores desse tipo
estrutura abstrata de jogos, os tipos de dados utilizados e como eles podem ser
metodologias de animação.
188
pesquisa.
referência.
Os trabalhos futuros que podem ser realizados com o projeto proposto são:
- Etc.
Para tal feito necessita-se investigar todas as possíveis variações naquele domínio,
tornar necessárias.
Universidade Federal de São Carlos e está entre os cinco projetos com referência a
Módulo de Modelo
G erenciador de Cena
N um Cenas : Integer
Repositorio N um Repositorios : Integer
nom es : String M atrizN om erepositorios : String[]
qtty : Integer
+ 0..* AddEstrutCena(estrutura s : Representação de Cena)
add(objeto, nom e) G etEstrutCena(nom e) : Representação de Cena
get(nom e) : O bjeto deleteEstrutCena(nom e)
delete(nom e) AddRepositorio(re positorio : Repositorio, nom e)
delete(objeto) DeleteRepositorio(nom e)
getN um Ite m s() : Inte ger getRepositorio(nom e) : Repositorio
getN um Repos itorios()
getN um Cenas()
Módulo de Visão
193
ViewPort
Câm era
posX
pos Y Posicao : ponto3d
largura dir eção : v etor 3d
altura upv ector : v etor3d
at iv a reprCena : Representação de Cena
identificador
s etPos icao(pos )
+1 setDirecao(direcao)
setA tiv a()
s etInat iv a() s etU pV ect or(upv ec tor)
addCam era(cam era : Câm era) get Posic ao() : pont o3d
s etPos X (x ) getD ire cao() : v etor3d
s etPos Y (y ) getU pVector() : v etor3d
s etPos (x , y ) Cull() : O bjetos renderizáv eis
setPos(ponto : ponto2D) s etR eprC ena(repr Cena : Represent ação de C ena)
s etL arg(larg)
s etA lt(alt )
setD im ensao(ponto1 : ponto2D, ponto2 : ponto2D )
R edimens iona(larg, alt )
setID(id)
get ID()
+ 1..*
Lista de Viewports
Renderizador
num ViewPorts
prof_de_c ores
bits_profundidade
bit s_s tenc il
Módulo Controlador
D isp o sitiv o d e E n tr ad a
I d e n tific ad o r
Sin a l
C o n ju n to D e I n fo r m aç õ es
B u ffer D e D ad o s A lv o
N u m S in ais F o n te
M en sag em
A d d S in al( )
A c o p la r ( )
C o n fig u r aD a d o ( )
S in a liza r ( )
I n fo r m aN u m S in ais( )
V e r ific ar R ec e b im e n to ( )
R em o v er S in al( )
P r o c essaE n tr a d a( )
G e r e n c ia d o r d e E n tr a d a
G er e n d ia d o r d e S im u laç ão F ísic a
N u m D isp E n tr ad a
N u m P r o p F isic a
A d d D isp E n tr ad a ( ) N u m L eis
R em o v eD isp E n tr a d a ( )
I n fo r m aQ td D isp E n tr ad a( ) A d ic io n aL ei( )
I n fo r m aD isp E n tr a d a ( ) A d ic io n aP r o p ( )
A d ic io n aO b jeto L ei( )
A d ic io n aS in alP r o c essam en to ( )
R e m o v eL ei( )
R e m o v eP r o p ( )
R e so lv eC o lisão ( )
P r o c essaT e m p o ( )
P r o c essaL ei( )
T em p o r izad o r
T em p o
L e iF ísic a P r o p r ied ad eF ísic a
I n ic ia( )
C o n fig u r a ( )
R ec u p er a ( )
T em p o C o r r en te P o d e se r
I m p lem en ta d a n o s
G e r en c iad o r d e A n im aç ão o b je to s d e M o de lo
N u m E str u tu r asD eA n im aç ã o
A d ic io n aR ep r ese n taç ã o ( )
R e m o v eR ep r ese n taç ão ( ) R e p r e se n ta ç ã o d e A n im a ç ã o
I n ic ializaR ep r ese n taç ão ( )
T em p o T o tal
I n ic ia liza R ep r ese n ta ç õ es( )
T em p o C o r r en te
P r o c essaR e p r e se n taç õ es( )
I d en tific ad o r I m p lem e n ta a R eg r
I n fo r m aQ td R ep r esen taç õ es( )
a d e a n im aç ão , a
C o n fig u r aR eg r a( ) ser esp ec ifi cad a p el
A d ic io n aO sso s( ) o d e sen v o lv e d o r
H ier ar q u ia C o r r en te R em o v eO sso s( )
C o n fig u r a T em p o T o tal( )
+1
A tr ib u iI D ( )
P r oc e ssa( )
O sso s
R ein ic ializa ( )
M a tr iz d e T r an sfo r m a ç ão
A d ic io n aF ilh o ( )
R e m o v eF ilh o ( ) C o n j u n to d e H ier ar q u ia d e O sso s
A ju staT r an sfo r m aç ã o ( )
A p lic a T r an sfo r m aç ã o ( ) F ilh o s
A ju staM atr iz( ) P o ssu i tam b ém a
tr an sfo r m a ç ão
g eo m étr ic a ( o u
c o n ju n to d e) a
a lte r a r
Bibliografia
1
[d] Fonte: http://www.outerspace.com.br/retrospace, 02/04/2003.
2
[l ] Battaiola, A.: Jogos por Computador – Histórico Relevância Tecnológica e
Mercadológica, Tendências e Técnicas de Implementação, Anais da XIX Jornada de
Atualização em Informática (JAI) - Volume 2, pág.83 a 122, SBC 2000.
3
[¤ ] Fonte: http://www.datamonitor.com/, 02/04/2003
4
[¤ ] Lamothe, A.: Black Art of 3D Game Programming, Waite Group Press, 1995.
5
[¤ ] Gobbetti, E., Turner, R.: Object-Oriented Design of Dynamic Graphics
Applications, in New Trends in Animation and Visualization, John Wiley.
6
[l ] Steinmetz, R.: Synchronisation Properties in Multimedia Systems, IEEE Journal
on Selected Areas in Communications, 8(3):401–412, 4 1990.
7
[[] Waggoner, B. & York, H.: Video in Games: The State of Industry, Game
Developer, Março, 1999.
8
[¤ ] Moog, B.: Musical Instrument Digital Interface, Journal of Audio Engeneering
Society, V. 34, No. 5, Maio de 1986.
9
[¤ ] Disponível em: www.blender.org, 07/04/2003.
10
[[] Shirley, P. et al: Global Ilumination via Density Estimation, Rendering
Techniques, p. 219-230, Springer Verlag, Proc. Eurographics ’95.
11
[d Möller, T. & Haines, E.: Real Time Rendering, A K Peters, 1999.
12
[d Hennessy, John L., & David A. Patterson: Computer Architecture – A
quantitative approach, Morgan Kaufman Publishers, Inc, 1990.
13
[d Battaiola, A.: Projeções e o seu Uso em Computação Gráfica, JAI98, XVIII
Congresso Nacional da Sociedade Brasileira de Computação, 1998.
14
[á Akeley, K. & Jermoluk, T.: High Performance Polygon Rendering, Computer
Graphics (SIGGRAPH ’88 Proceedings), vol.22, no. 4, p. 239-246, Agosto 88.
15
[d] Rogers, David F.: Procedural Elements for Computer Graphics, Second Edition,
McGraw-Hill, New York, 1997.
16
[¤ ] Hearn, D. & Baker, M.: Computer Graphics C Version, Prentice Hall, 1997
17
[[] Schmalstieg, D.: A Survey of Advanced Interactive 3D Graphic techniques,
Vienna University of Technology, Austria, 1997.
18
[d Battaiola, A. L.: Otimização do Processo de Geração de Malhas Triangulares a
partir de Polígonos, XXIV Latinamerican Conference of Informatics CLEI Panel 98, pp.
749-759, 19 a 24 de outubro de 1998, Quito, Equador.
19
[¤ ] Cripe, B. & Gaskins, T.: The DirectModel Toolkit: Meeting the 3D Graphics
Needs of Technical Applications, Hewlett-Packard Journal, pp. 19-27, Maio 1998.
20
[¤ ] Naylor, B.F., Fuchs, H. &: Kedem, Z.M.: On Visible Surface Generation by a
Priori Tree Structures, Computer Graphics (Proceedings of SIGGRAPH), 14(3), 1980
21
[[] Airey, J. M., Rohlf, J. H. & Brooks Jr., F: Towards Image Realism with Interactive
Update Rates in Complex Virtual Building Enviroments, Computer Graphics, Vol. 24, No.
2, pp. 41 (1990).
22
[[] Teller, S. & Séquin, C.: Visibility Preprocessing For Interactive Walktroughs,
Computer Graphics (Proceedings SIGGRAPH), Vol. 25, No. 4, pp. 61-69 (1991).
23
[[] Funkhouser, T., Séquin, C. & Teller, S.: Management of Large Amounts of Data
in Interactive Building Walkthroughs, SIGGRAPH Symposium on Interactive 3D
Graphics, pp. 11-20 (1992).
24
[[] Clark, J.: Hierarchical Geometric Models for Visible Surface Algorithms,
Communications of the ACM, Vol. 19, No. 10, pp. 547-554 (1976).
25
[[] Funkhouser, T. & Sequin, C.: Adaptive Display Algorithm for Interactive Frame
Rates During Visualisation of Complex Virtual Environments, Computer Graphics
(Proceedings SIGGRAPH), pp. 247-254 (1993).
26
[[] Falby, J., Zyda, M., Pratt, D. & Mackey, L.: NPSNET: Hierarchical data
structures for realtime 3-dimensional visual simulation. Computers & Graphics, Vol. 17,
No. 1, pp. 65 (1993).
27
[¤ ] Lance, W.: Pyramidal Parametrics, Computer Graphics, vol. 7, no. 3, pp. 1-
11, Julho 1983.
28
[¤ ] Parent, R.: Computer Animation, Algorithms and Techniques, Morgan Kaufman,
2001.
29
[[] Pettigrew, N.: The Stop-Motion Filmography: A Critical Guide to 297 Features
Using Puppet Animation, McFarland & Company Inc.,1999.
30
[d] Watt, A. & Watt, M.: Advanced Animation and Rendering Techniques, theory
and practice, Addison Wesley, 1992.
31
[¤ ] LaMothe, A., Ratcliff, J., Seminatore, M., Tyler, D.: Tricks of the Game
Programming Gurus , Sams Publishing, 1994.
32
[[] R. B. de Araujo e A. L. Battaiola: Jogos 3D Interativos Multiusuários na Internet:
Estado Atual, Perspectivas e Desafios, Relatório Interno do DC/UFSCar, 1998.
33
[[] Chadwick, J.E., Hauemann, D.R. & Parent, R.E.: Layered Construction for
Deformable Animated Characters, Computer Graphics, 23(3), 243-52, (Proc.
SIGGRAPH ’89).
34
[[] Reeves, W.: Simple and Complex Facial Animation, State of the Art in Facial
Animation, SIGGRAPH Course Notes 26, 1990.
35
[[] Lazlo, J.: Controling Bipedal Locomotion for Computer Animation, University of
Toronto, 1996.
36
[[] Sims, K.: Particle Animation and Rendering using Data Parallel Computation,
Computer Graphics, 24(4), 405-13, (Proc. SIGGRAPH ’90).
37
[[] Reev, W.T.: Particle Systems – A Technique for Modelling a Class of Fuzzy
Objects, Computer Graphics, 17(3), 359-76, (Proc. SIGGRAPH ’83).
38
[[] Reynolds, C.W.: Flocks, Herds, and Schools: A Distributed Behavioral Model,
Computer Graphics, 21(4), 25-34, (Proc. SIGGRAPH ’87).
39
[[] Reynolds, C.W.: Computer Animation with Script and Actors, Computer
Graphics, 16(3), 289-96, (Proc. SIGGRAPH ’82).
40
[[] Magnetat-Thalmann, N. & Thalmann, D.: Computer Animation, Theory and
Practice, Springer, Tokyo, 1895.
41
[l ] Disponível em http://www.opengl.org, 02/04/2003.
42
[d Disponível em http://www.microsoft.com/directx, 02/04/2002.
43
[[] Rollings A., Morris D.: Game Architecture and Design, The Coriolis Group LLC,
2000.
44
[[] Hodorowicz, L.: Elements Of A Game Engine. Disponível em
http://www.flipcode.com, 2001.
45
[Ë ] Genesis3D. Disponível em http://www.genesis3d.com, 02/04/2003.
46
[Ë ] Crystal Space. Disponível em http://crystal.sourceforge.net, 02/04/2003.
47
[Ë ] Golgotha. Disponível em http://www.crack.com/golgotha, 02/04/2003.
48
[l ] Madeira, C. & Ramalho, G.: Forge v8 um framework para desenvolvimento de
jogos e aplicações multimídia, Recife, PE, 2001.
49
[¤ ] Fly3D. Disponível em http://www.fly3d.com.br, 02/04/2003.
50
[¤ ] Policarpo, F, Watt, A.: 3D Games: Real-Time Rendering and Software
Technology, Volume 1, Addison-Wesley, 2001.
51
[Ë ] 3D Studio Max, Disponível em www.discreet.com, 02/04/2003.
52
[l ] Cunningham, S.: Computer Graphics: Programming, Problem Solving and
Visual Comunications, 1o. Seminário Latino Americano de Educação em Computação
Gráfica, Escola Politécnica, USP, SP, 2003.
53
[[] Anderson, Eike F.: Real-Time Character Animation for Computer Games,
National Centre for Computer Animation, Bournemouth University, 2001.
54
[¤ ] Meyer, M. et al: Interactive Animation of Cloth-like Objects in Virtual Reality,
Journal of Visualization and Computer Animation, 2000.
55
[¤ ] Voxel, Definido em http://www.gamedev.net/dict, 02/04/2003.
56
[¤ ] Perlin, K. & Ebert, D. S.: Texturing and Modelling – A procedural approach,
AP Professional, 1998.
57
[¤ ] Peitgen, H. et al: Chaos and Fractals: New Frontiers of Science, Springer-
Verlag, New York, 1992.
58
[¤ ] Ebert, D.: Advanced Modelling Techniques for Computer Graphics, ACM
Survey, 1997.
59
[l ] Ferreira, J.M., et al: Sistema Dinâmico de Partículas,
www.lighthouse3d.com/opengl/appstools/dps/, 02/04/2003.
60
[l ] Dominé, S.: Mesh Skinning,
http://developer.nvidia.com/docs/IO/1356/ATT/skinning.pdf, Nvidia Corporation,
02/04/2003
61
[¤ ] Lengyel, E.: Mathematics for 3D Game Programming & Computer Graphics, Charles
River Media, 2002.
62
[¤ ] Woo, M. et al: OpenGL Programming Guide, 3rd. Edition, Addison Wesley,
1999.
63
[¤ ] Miller, L.: Lightmaps (Static Shadowmaps),
www.flipcode.com/tfiles/kurt01.shtml, 02/04/2003.
64
[l ] Vertrix 2, Disponível em http://clusters.cjb.net, 02/04/2003.
65
[¤ ] A. V. Aho, J. E. Hopcroft, and J. D. Ullman.: The Design and Analysis of
Computer Algorithms, Addison-Wesley, 1974.
66
[¤ ] J. Rumbaugh, M. Blaha, W. Premerlani, F. Eddy, and W. Lorensen: Object-
Oriented Modeling and Design, Prentice-Hall Inc., 1991.
67
[Ë Meyer, B., Object-Oriented Software Construction, ISE Inc., California,
USA,1997.
68
[¤ ] Gamma, Erich, et al.: Design Patterns: Elements of Reusable Object-
Oriented Software, Addison-Wesley, 1995
69
[¤ ] Eberly, D. H., 3D Game Engine Design: A Practical Approach to Real-Time
Computer Graphics, Morgan Kaufmann Publishers, 2001.
70
[Ë Alexander, C., Ishikawa, S., Silverstein, M., Jacobson, M., Fiksdahl-King, I. &
Angel, S.: A Pattern Language, Oxford University Press, New York, 1977.
71
[¤ ] Johnson, Ralph E., Frameworks = (Components + Patterns),
Communications of the ACM, Vol.40, N o 10, October, 1997.
72
[¤ ] Eriksson, H.-E. and Penker, M.: UML Toolkit, John Wiley, 1998.
73
[¤ ] Booch, G.: Object-Oriented Analysis and Design with Applications,
Addison-Wesley, Readings, Massachusetts, second edition, 1994.
74
[¤ ] Fowler, M. and Scott, K.: UML Distilled: Applying the Standard Object
Modeling Language, Addison-Wesley, Reading, Mass., 1997.
75
[¤ ] Johnson, R.E., Foote, B.: Designing Reusable Classes, Journal of Object
Oriented Programming, Vol. 1, no. 2, 1988.
76
[¤ ] Krasner, G.E., et al: A Cookbook for using the Model-View-Controller User
Interface Paradigm in Smalltalk-80, Journal of Object Oriented Programming, Vol. I,
No. 3, pp.26-49.
77
[¤ ] Webster, B.F.: The NeXT Book, Addison Wesley, Reading, MA, 1989.
78
[¤ ] Schmucker, K.J.: Object Orientation, MacWorld, Vol. 3, No 11, Novembro,
1986, pp. 119-123.
79
[¤ ] Weinand, A., Gamma, E. e Marty, R.: Design and Implementation of ET++, a
Seamless Object-Oriented Application Framework, Structured Programming, Vol. 10,
No. 2, pp.63-87, 1989.