Livro de receitas de física de jogos
Este livro é um guia completo para os jogos de álgebra linear e detecção de colisões comumente usados, mas apenas aborda brevemente o tópico de resolução de colisões (Física). O livro está estruturado da seguinte forma:
- Os Capítulos 1, 2 e 3 cobrem o básico da Álgebra Linear.
- Os Capítulos 4, 5 e 6 cobrem primitivas bidimensionais e como detectar interseções entre elas.
- Os Capítulos 7, 8, 9 e 10 cobrem primitivas tridimensionais e a maneira mais eficiente de determinar interseções entre elas.
- Os Capítulos 11, 12 e 13 cobrem malhas, cenas e organização de cenas.
- Os capítulos 14, 15 e 16 cobrem a física. Ao longo destes três capítulos construímos um mecanismo de física de corpo rígido muito básico.
Todos os tópicos abordados neste livro são usados para construir progressivamente um motor de física de corpo rígido. Os três capítulos finais (14, 15 e 16) implementam física de partículas, física de corpo rígido e física de corpo mole (tecido). É fornecido um apêndice que cobre brevemente tópicos avançados, recursos para explorar esses tópicos, bem como recursos adicionais para explorar a física do jogo.
Figuras
Algumas das figuras criadas para o livro não foram bem traduzidas para impressão. Para resolver isso, incluí todas as figuras do livro neste repositório e publiquei as figuras online em: https://github.com/gamephysicscookbook/Figures
Matemática
Os três primeiros capítulos do livro são dedicados ao ensino da álgebra linear básica necessária para o desenvolvimento de jogos. Cada conceito é explicado em um contexto matemático, o código-fonte é fornecido para cada conceito e também são fornecidas imagens quando algo pode ser explorado visualmente. Ao longo dos três primeiros capítulos são criadas as seguintes estruturas de dados:
- Vetor bidimensional (
vec2
) - Vetor tridimensional (
vec3
) - Matriz 2x2 (
mat2
) - Matriz 3x3 (
mat3
) - Matriz 4x4 (
mat4
)
Quando possível, as operações matriciais são implementadas de forma genérica. Por exemplo, é fornecido código para multiplicar duas matrizes de tamanhos arbitrários.
Detecção de colisão
As seguintes interseções são abordadas no livro:
| Apontar | Linha | Raio | Esfera | AABB | OBB | Avião | Triângulo | Tronco |
---|
Apontar | | | | | | | | | |
Linha | | | | | | | | | |
Raio | | | | | | | | | |
Esfera | | | | | | | | | |
AABB | | | | | | | | | |
OBB | | | | | | | | | |
Avião | | | | | | | | | |
Triângulo | | | | | | | | | |
Tronco | | | | | | | | | |
Física
O Capítulo 14 cobre a física de partículas ingênua. Este capítulo pretende ser uma introdução à configuração de um loop de física e à consideração do formato geral de um loop de física. O Capítulo 15 é o capítulo mais interessante, pois implementa um mecanismo básico de física de corpo rígido. O mecanismo básico possui suporte para caixas e esferas orientadas, o empilhamento pode funcionar, mas não é suportado diretamente. O Capítulo 16 aborda molas e como elas podem ser usadas para implementar a física de corpos moles. A demonstração final do livro é uma demonstração de física de tecido e corpo mole.
Aprendizados
Sendo este meu primeiro livro, aprendi muito sobre o processo de escrita; talvez ainda mais sobre planejamento. A seguir está uma lista de coisas que descobri enquanto escrevia este livro e que não planejei adequadamente:
Quatérnios : Ter um quatérnio é obrigatório! Planejei escrever o livro usando rotações de Euler e matrizes de rotação. Embora isso funcionasse, ter acesso aos quatérnios teria tornado a vida muito mais fácil.
Planos : As interseções de planos não devem retornar um valor booleano, devem classificar a interseção como: atrás, cruzando, na frente. De preferência, se o cruzamento estiver na frente ou atrás, você deseja retornar alguma indicação de distância. Isso se torna muito útil ao selecionar Frustum. Eu não sabia o quão aprofundado iria escrever sobre frustums, então decidi fazer interseções booleanas simples.
Raycasting : eu deveria ter escrito raycasts para retornar um resultado de raycast desde o início. Mais tarde, ter que voltar e reescrever a API de raycasting acabou sendo mais complicado de expressar em texto do que eu esperava. A ideia por trás disso foi manter as coisas simples no início e complicar apenas quando necessário.
Problemas
Existem vários problemas na implementação física do código-fonte. Essas questões decorrem do fato de que a parte física deste livro teve que ser condensada em três capítulos. Simplesmente não houve tempo suficiente para cobrir tudo o que era necessário para criar um sistema robusto de física de corpo rígido. O maior problema do motor é o fato de não haver Árbitro .
Sem um árbitro, não podemos construir um solucionador de impulso sequencial. Isso nos deixa com um solucionador de impulsos bastante ingênuo. O problema é que os impulsos são resolvidos por contato por quadro. Isso causa deslizamento excessivo. Compensei a falta de impulso sequencial com projeção linear e polarização agressiva de friciton. Os mecanismos de física mais antigos fazem algo semelhante, contando com um sono forte para mascarar o problema. Escusado será dizer que dormir não foi implementado.
Futuro
Se eu tiver a oportunidade de escrever uma segunda edição deste livro, removerei os capítulos sobre colisões bidimensionais (capítulos 4, 5 e 6) e reduzirei a contagem de páginas dos capítulos sobre gerenciamento de cena. Pretendo usar as páginas extras para cobrir os seguintes tópicos:
- Discussão aprofundada e implementação do GJK
- Um sistema de árbitro adequado e um modelo de resolução de colisão mais estável.
- Cápsula primitiva
- Geração de casco convexo e testes de colisão
Informações do livro
- ISBN-13: 9781787123663
- Ver em Packt
- Ver na Amazon
- Todas as minhas publicações
Índice
- Vetores
- Introdução
- Definição vetorial
- Operações inteligentes de componentes
- Produto escalar
- Magnitude
- Normalizando
- Produto cruzado
- Ângulos
- Projeção
- Reflexão
- Matrizes
- Introdução
- Definição de matriz
- Transpor
- Multiplicação
- Matriz de identidade
- Determinante de uma matriz 2x2
- Matriz de menores
- Cofator
- Determinante de uma matriz 3x3
- Operações em uma matriz 4x4
- Matriz Adjugada
- Matriz inversa
- Transformadas de Matriz
- Introdução
- Graduações matriciais
- Tradução
- Dimensionamento
- Como funcionam as rotações
- Matrizes de rotação
- Rotação do ângulo do eixo
- Multiplicação de matrizes vetoriais
- Matriz de transformação
- Matriz de projeção
- Formas Primitivas 2D
- Introdução
- Pontos 2D
- Linhas 2D
- Círculo
- Retângulo
- Retângulo orientado
- Contenção de ponto
- Interseção de linha
- Colisões 2D
- Introdução
- Círculo a círculo
- Círculo para retângulo
- Círculo para retângulo orientado
- Retângulo para retângulo
- Teorema do Eixo Separador
- Retângulo para retângulo orientado
- Retângulo orientado para retângulo orientado
- Otimizações 2D
- Introdução
- Círculo contendo
- Contendo retângulo
- Formas simples e complexas
- Árvore quádrupla
- Colisões de fase ampla
- Formas Primitivas 3D
- Introdução
- Apontar
- Segmento de linha
- Raio
- Esfera
- Caixa delimitadora alinhada ao eixo
- Caixa de buonding orientada
- Avião
- Triângulo
- Testes de pontos 3D
- Introdução
- Ponto e esfera
- Caixa delimitadora alinhada por ponto e eixo
- Caixa delimitadora pontual e orientada
- Ponto e plano
- Ponto e linha
- Ponto e raio
- Intersecções de formas 3D
- Introdução
- Esfera para esfera
- Caixa delimitadora alinhada esfera a eixo
- Esfera para caixa delimitadora orientada
- Esfera para plano
- Caixa delimitadora alinhada ao eixo para caixa delimitadora alinhada ao eixo
- Caixa delimitadora alinhada ao eixo para caixa delimitadora orientada
- Caixa delimitadora alinhada ao eixo ao plano
- Caixa delimitadora orientada para caixa delimitadora orientada
- Caixa delimitadora orientada para o plano
- Avião para avião
- Intersecções de linhas 3D
- Introdução
- Esfera Raycast
- Caixa delimitadora alinhada ao eixo Raycast
- Caixa delimitadora orientada para Raycast
- Avião Raycast
- Esfera de teste de linha
- Caixa delimitadora alinhada ao eixo de teste de linha
- Caixa delimitadora orientada para Linetest
- Avião de teste de linha
- Triângulos e malhas
- Introdução
- Ponto no triângulo
- Triângulo de ponto mais próximo
- Triângulo para esfera
- Caixa delimitadora alinhada de triângulo a eixo
- Triângulo para caixa orientada
- Triângulo para plano
- Triângulo em triângulo
- robustez do teorema do eixo de separação
- Triângulo Raycast
- Triângulo de teste de linha
- Objeto de malha
- Otimização de malha
- Operações de malha
- Modelos e Cenas
- Introdução
- O objeto modelo
- Operações em modelos
- O objeto da cena
- Operações no local
- O objeto octree
- Operações na octree
- Octree e integração de cena
- Câmera e Frustum
- Introdução
- Objeto de câmera
- Controles da câmera
- Objeto Frustum
- Frusum da matriz
- Esfera em tronco
- Caixa delimitadora em tronco
- Abate de Octree
- Escolhendo
- Resolução de restrições
- Introdução
- Introdução à estrutura
- Esfera Raycast
- Caixa delimitadora Raycast
- Plano e triângulo Raycast
- Sistema de física
- Integrando partículas
- Resolvendo restrições
- Integração Verlet
- Variedades e Impulsos
- Introdução
- Coletor para esferas
- Coletor para caixas
- Modificações corporais rígidas
- Velocidade linear
- Impulso linear
- Atualização do sistema de física
- Velocidade angular
- Impulso angular
- Sprints e articulações
- Apresentações
- Modificações de partículas
- Molas
- Pano
- Modificação do sistema de física
- Articulações
- Apêndice: Tópicos Avançados
- Introdução
- Colisões genéricas
- Melhorias de estabilidade
- Corridas
- Mecanismos de física de código aberto
- Livros
- Recursos on-line
- Resumo
Cobrir