A high-performance voxel engine implemented in Java, featuring strict Model-View-Controller architecture. This academic project demonstrates advanced 3D graphics techniques, efficient data structures, and clean architectural principles.
- Procedural terrain using multi-octave Perlin noise
- Infinite world generation capabilities
- Dynamic chunk loading/unloading
- Customizable world seeds
- OpenGL 3.3 Core Profile rendering
- Advanced shader pipeline
- Frustum and occlusion culling
- Dynamic lighting system
- Day/night cycle with smooth transitions
- Efficient batch rendering
- Real-time collision detection
- Rigid body physics simulation
- Block manipulation (placement/destruction)
- Ray casting for abstractBlock selection
- Player movement with jumping and gravity
- Optimized chunk mesh generation
- Multi-threaded world generation
- Efficient memory management
- Render distance configuration
- Performance monitoring tools
- Settings management
- Performance metrics display
- Java Development Kit (JDK) 17 or higher
- Git (for version control)
- LWJGL 3.3.2 (OpenGL, GLFW, STB)
- JOML 1.10.5 (Math library)
git clone https://github.com/IngSW-unipv/Progetto-S25.git
W/A/S/D
: Basic movementSpace
: JumpLeft Shift
: SprintMouse
: Look around
Right Click
: Break abstractBlockLeft Click
: Place abstractBlock
F11
: Toggle fullscreenESC
: Menu/Exit
- World state management
- Physics calculations
- Entity management
- Data persistence
- OpenGL rendering
- Window management
- User interface
- Shader system
- Input processing
- Game logic
- Event handling
- State management
SandboxProject/
├── docs/ # Documentation
│ └── uml/
│
├── libraries/ # External libraries (LWJGL, etc.)
│
├── resources/ # Resource files
│ ├── shaders/ # GLSL shader files~~~~
│ │ ├── block_breaking_fragment.glsl
│ │ ├── block_breaking_vertex.glsl
│ │ ├── block_fragment.glsl
│ │ ├── block_highlight_fragment.glsl
│ │ ├── block_highlight_vertex.glsl
│ │ ├── block_vertex.glsl
│ │ ├── hud_fragment.glsl
│ │ └── hud_vertex.glsl
│ └── textures/ # Game textures
│
└── src/ # Source code
├── Main.java # Entry point
│
├── config/ # Configuration
│ ├── ConfigManager.java # Settings manager
│ ├── GameConfig.java # Game constants
│ └── game_config.properties # Configuration file
│
├── controller/ # Controllers (C in MVC)
│ ├── event/ # Event system
│ │ ├── BlockEvent.java
│ │ ├── EventBus.java
│ │ ├── EventListener.java
│ │ ├── EventType.java
│ │ ├── GameEvent.java
│ │ ├── InputAction.java
│ │ ├── InputEvent.java
│ │ ├── MenuAction.java
│ │ ├── MenuEvent.java
│ │ ├── RenderEvent.java
│ │ └── WorldGenerationEvent.java
│ │
│ ├── game/ # Game control
│ │ └── GameController.java
│ │
│ ├── input/ # Input handling
│ │ ├── InputController.java
│ │ └── PlayerController.java
│ │
│ └── menu/ # Menu control
│ └── MenuController.java
│
├── model/ # Game model (M in MVC)
│ ├── block/ # Block system
│ │ ├── AbstractBlock.java
│ │ ├── BlockDirection.java
│ │ ├── BlockFactory.java
│ │ ├── BlockModification.java
│ │ ├── BlockType.java
│ │ ├── TerrainBlock.java
│ │ └── blocks/ # Block implementations
│ │ ├── BedrockBlock.java
│ │ ├── DirtBlock.java
│ │ ├── GrassBlock.java
│ │ └── StoneBlock.java
│ │
│ ├── game/ # Game state
│ │ ├── GameState.java
│ │ └── Model.java
│ │
│ ├── physics/ # Physics engine
│ │ ├── BoundingBox.java
│ │ ├── CollisionSystem.java
│ │ └── PhysicsSystem.java
│ │
│ ├── player/ # Player handling
│ │ ├── Camera.java
│ │ ├── Player.java
│ │ └── RayCaster.java
│ │
│ ├── save/ # Save system
│ │ ├── WorldManager.java
│ │ └── WorldSaveData.java
│ │
│ ├── statistics/ # Game statistics
│ │ ├── DatabaseManager.java
│ │ └── GameStatistics.java
│ │
│ └── world/ # World system
│ ├── Chunk.java
│ ├── ChunkLoader.java
│ ├── ChunkLoadTask.java
│ ├── DayNightCycle.java
│ ├── Frustum.java
│ ├── OcclusionCulling.java
│ ├── PerlinNoiseGenerator.java
│ ├── World.java
│ └── WorldData.java
│
├── util/ # Utilities
│ ├── GameClock.java # Game timing
│ └── PerformanceMetrics.java # Performance tracking
│
└── view/ # View system (V in MVC)
├── View.java # Main view class
│
├── menu/ # Menu UI
│ ├── MainMenuPanel.java
│ ├── MenuView.java
│ ├── NewWorldDialog.java
│ ├── SettingsPanel.java
│ ├── StatisticsDialog.java
│ ├── StatisticsPanel.java
│ ├── WorldListDialog.java
│ └── WorldSelectPanel.java
│
├── renderer/ # Rendering
│ ├── BatchedMesh.java
│ ├── HUDRenderer.java
│ ├── MasterRenderer.java
│ ├── TextureManager.java
│ └── WorldRenderer.java
│
├── shader/ # Shader management
│ ├── ShaderProgram.java
│ └── ShaderUtils.java
│
└── window/ # Window management
└── WindowManager.java
- Vision Document: Project overview and goals
- Requirements: Functional/non-functional requirements
- Use Cases: User interaction flows
- Design Patterns: Architectural patterns
- Technical Glossary: Term definitions