Este repositório contém um laboratório de renderização gráfica desenvolvido em C++ com OpenGL Moderno (Core Profile 3.3). O projeto serve como estudo prático e base arquitetural para o desenvolvimento de uma Game Engine customizada (projeto de TCC).
O código foca na manipulação do pipeline gráfico programável, gerenciamento de memória na GPU (VAO, VBO, EBO), compilação de Shaders (GLSL) e implementação de física básica de movimentação utilizando Delta Time.
O laboratório renderiza 5 formas geométricas independentes, cada uma demonstrando diferentes capacidades da API:
- 🔲 Retângulo Central (Controlável): Possui vértices com cores distintas (Vermelho, Verde, Azul e Amarelo), permitindo que o Fragment Shader crie um gradiente perfeito automaticamente. Responde aos inputs do teclado.
- 🔺 Triângulo (Estático): Renderizado com cor sólida (Vermelha) e posicionado de forma fixa à esquerda da tela.
- 🛑 Hexágono (Animação Vertical): Renderizado em cor Ciano. Possui uma rotina de animação de "ping-pong" no eixo Y, subindo e descendo automaticamente a cada frame.
- ⬟ Pentágono (Estático): Renderizado com uma paleta de cores em tons de roxo e rosa, posicionado fixamente no canto superior direito.
- 🔶 Diamante (Animação Horizontal): Renderizado com um gradiente de cores quentes (Amarelo, Laranja e Vermelho). Possui uma animação de "ping-pong" no eixo X, movendo-se da esquerda para a direita na parte inferior da tela.
O objeto central (Retângulo Colorido) pode ser movido livremente pelo espaço bidimensional da janela usando o teclado:
- Seta para Cima (↑): Move no eixo +Y
- Seta para Baixo (↓): Move no eixo -Y
- Seta para Direita (→): Move no eixo +X
- Seta para Esquerda (←): Move no eixo -X
- Linguagem: C++
- API Gráfica: OpenGL 3.3 (Core Profile)
- GLFW (glfw3): Gerenciamento de janelas, contexto OpenGL e captura de input (teclado).
- GLEW: Carregamento de ponteiros de funções e extensões modernas do OpenGL.
- GLSL: Shaders customizados para cálculos de vértices e fragmentos.
- Delta Time: Implementação de cálculo de
deltaTimeno loop principal para garantir que os objetos animados (Hexágono e Diamante) se movam à mesma velocidade em qualquer computador, independente do framerate. - Uniforms: Uso de variáveis
uniform vec2euniform vec4para enviar atualizações de posição (offset) e cor da CPU para a GPU em tempo de execução, evitando a recriação custosa de buffers. - Element Buffer Objects (EBO): Reutilização inteligente de vértices através de índices para desenhar formas complexas (como o hexágono de 12 índices e o pentágono) economizando memória de vídeo.
Para rodar este projeto na sua máquina, certifique-se de ter um ambiente C++ configurado com as bibliotecas estáticas ou dinâmicas do GLFW e GLEW.
- Clone o repositório:
git clone [https://github.com/SEU_USUARIO/NOME_DO_REPOSITORIO.git](https://github.com/SEU_USUARIO/NOME_DO_REPOSITORIO.git)
