Engine 3D
Scaffold de engine 3D em Rust usando SDL3 e OpenGL 3.3+.
- Terreno procedural com Perlin Noise (FBM multi-oitavas)
- Malha contínua triangulada
- Iluminação difusa + especular (Blinn-Phong) + névoa atmosférica
- Mar com ondas de Gerstner, reflexões Fresnel e transparência por profundidade
- Câmera FPS livre com mouse look
- Game loop com update (60Hz) e render desacoplados
Dependências
| Crate | Uso |
|---|---|
sdl3 |
Janela e contexto OpenGL |
glow |
Bindings OpenGL em Rust |
glam |
Álgebra linear 3D (Mat4, Vec3) |
noise |
Perlin Noise / FBM |
bytemuck |
Cast seguro de slices para bytes |
Requer SDL3 instalado no sistema:
# Fedora
sudo dnf install SDL3-devel
# Ubuntu/Debian
sudo apt install libsdl3-dev
Compilar e rodar
cargo run --release
Controles
| Tecla | Ação |
|---|---|
| W / A / S / D | Mover câmera (frente/esq/trás/dir) |
| Space / Shift | Subir / Descer |
| Mouse | Olhar ao redor (FPS look — inicia capturado) |
| Tab | Alternar captura do mouse |
| ESC | Soltar mouse / Fechar |
Estrutura
src/
├── main.rs # Inicialização SDL3 + game loop, 3-pass render
├── camera.rs # Câmera FPS (WASD, mouse look, view/projection)
├── input.rs # Polling eventos SDL3, estado teclas
├── terrain.rs # Heightmap Perlin FBM + geração de malha
├── water.rs # Malha do mar (plano no nível do mar, 256x256)
├── renderer.rs # VAO/VBO/EBO terreno+água, depth FBO, 3-pass pipeline
├── shader.rs # Compilação/link GLSL
└── shaders/
├── terrain.vert # Vertex shader terreno (MVP, normals)
├── terrain.frag # Fragment shader terreno (luz, névoa, gradiente por altura)
├── water.vert # Vertex shader água (5 ondas Gerstner, normal perturbada)
└── water.frag # Fragment shader água (Fresnel, specular, transparência por depth)
Pipeline de renderização
- Terreno — render opaco (escreve cor + depth)
- Blit depth — copia depth buffer → FBO com depth texture
- Água — render com alpha blending, depth-test on, depth-write off. Lê depth texture para calcular coluna d'água (raso = transparente, fundo = opaco)
Description
Languages
Rust
84%
GLSL
16%