Um café onde penguins servem comida para outros penguins
Ninguém nunca teve essa ideia antes, confia. Favor não olhar o click jogos. https://www.crazygames.com/game/penguin-diner
- No MÁXIMO 15% de código pronto (exceto desenvolvido em aulas práticas)
- Sempre que utilizar código pronto, comentar com "FONTE" para que possa ser identificado com facilidade
- Proibido uso de funções 'glu' que simplificam a manipulação de vetores e tal
- gluLookAt()
- gluOrtho2D()
- gluPerspective()
- gluPickMatrix()
- gluProject()
- gluUnProject()
- glm::lookAt()
- glm::ortho()
- glm::perspective()
- glm::pickMatrix()
- glm::rotate()
- glm::scale()
- glm::translate()
- dentre outras
Mais detalhes dos requisitos podem ser vistos no Moodle da cadeira
- Interação em Tempo Real
- Objetivo/Lógica não-trivial
- Utiliza as matrizes vista em aula
- Interação com usuário utilizando teclado e mouse
- Malhas poligonais complexas
- Um modelo mais complexo que a vaca
- Transformações geométricas em outros objetos além da câmera
- Controle de câmeras virtuais
- Câmera Look-At
- Câmera Livre
- Diversas instâncias do mesmo objeto, com diferentes matrizes de modelo
- Testes de intersecção entre objetos virtuais
- Três tipos de teste de intersecção
- Teste Cubo-Cubo
- Teste Esfera-Esfera
- Teste Esfera-Cubo
- Arquivo nomeado collisions.cpp
- Três tipos de teste de intersecção
- Modelos de iluminação
- Lambert E Blinn-Phong
- Interpolação de Iluminação
- Gouraud
- Phong
- Mapeamento de Texturas
- Dois objetos
- Curva de Bézier
- Um objeto cujo caminho é definido por curva de Bézier
- Animação de Movimento baseada no tempo
- Todas as movimentações de objetos (incluindo da câmera) devem ser computadas baseado no tempo.
Para compilar o código com biblioteca estática, basta buildar o target PenguinCafe
.
Caso prefira utilizar bibliotecas dinâmicas, disponibilizamos o target PenguinCafeDLL
.
Na pasta lib
estão disponilizadas as bibliotecas. Utilizamos o GLFW do mingw64, porém, caso precise mudar para outro compilador ou plataforma
basta modificar os arquivos que estão na pasta e o resto da compilação deve funcionar corretamente.
- Organizar código atual em diferentes pacotes
- File Handling
- Rendering
- Player Movement
- Apenas código do GLFW na main
- Mapear funcionalidades
- Descobrir como enviar dados de objetos uma vez só para a GPU (Vamos suportar apenas UV mapping)
- Descobrir como ter várias texturas em um shader só
- Utilizar um ID para selecionar qual textura está sendo utilizada
- Utilizar textura definida no material (No Need)
- Implementar primeira pessoa
- Talvez precise de um shader específico
- Suportar especularidade
- Implementar modelos de iluminação
- Definir escopo do jogo
- Implementar lógica de jogo
- Implementar colisão
- Criar cena que será utilizada no jogo
- Definir quais objetos vamos utilizar
- "Limpar" objetos
- Diminuir resolução das imagens
- Linkar referências dos objetos/texturas
- Não esquecer de um modelo altamente complexo
Por enquanto, somente coisas utilizadas durante a cadeira.
- Caixa registradora (parte principal):
- 800 Kb
- 5.500 vértices
- Barril:
- 1 Mb
- 5.600 vértices
- Bolo:
- 1,1 Mb
- 6.800 vértices
- https://polyhaven.com/a/carrot_cake
- https://polyhaven.com/a/jug_01
- https://polyhaven.com/a/food_apple_01
- https://polyhaven.com/a/wooden_table_02
- https://polyhaven.com/a/CashRegister_01
- https://polyhaven.com/a/croissant
- https://polyhaven.com/a/WetFloorSign_01
- https://polyhaven.com/a/Sofa_01
- https://polyhaven.com/a/wine_barrel_01
- https://www.cgtrader.com/free-3d-models/animals/bird/cute-penguin-6e8b4599-73d5-4de6-b7a6-2a7e59339420
- Coisas dos labs
- Tudo original 😎
- Muito Polimorfismo 🪿