This project purposefully uses OpenGL 4.1 and OpenAL 1.1, which are the latest supported OpenGL and OpenAL versions on macOS. It ensures compatibility and performance on Apple silicon hardware.
-
Language: C++
-
Dependencies:
Install Apple's Command Line Tools for
gmake2
xcode-select --install
- Premake5 for building the project
- GLFW for windowing and input handling.
- GLM for mathematics
- spdlog for fast C++ logging
- mpg123 fast console MPEG Audio Player and decoder library
brew install premake brew install glfw brew install glm brew install spdlog brew install mpg123
premake5 gmake2
premake5 xcode4
premake5 vs2022
premake5 gmake2
cd build
make
cd ..
./bin/{build-config}/macos-opengl
Alternatively, you can run the shell script to build and execute the project in one go
./generate.sh
- ImGui v1.91.7 WIP
- Integrate SpdLog for Debugging
- BufferLayout class for VAO, VBO, EBO
- Sound and Audio Integration
-
Imgui Overlay for Object Creation and Manipulation
- Develop a GUI overlay for creating and modifying objects like planets, stars, and comets.
- Provide options to:
- Add new objects with attributes (e.g., type, size, texture).
- Modify existing objects interactively.
- Delete unwanted objects.
-
Save/Load Object Definitions
- Serialize object data (e.g., JSON, XML) to a file (
editing_objects.json
). - Load saved objects into the editing layer for progressive work.
- Implement versioning in saved data to future-proof compatibility.
- Serialize object data (e.g., JSON, XML) to a file (
-
Real-Time Feedback
- Display live previews of object changes in the world.
- Ensure seamless interactivity between the GUI and the rendering engine.
-
Switch to Universe Layer
- Add a toggle button in the GUI to switch from the Editing Layer to the Universe Layer.
-
Spatial Organization and Object Placement
- Implement a spatial data structure (e.g., quadtree, octree) for managing large-scale object placements.
- Add drag-and-drop functionality for positioning objects in world space.
-
Object Relationships
- Define parent-child relationships (e.g., moons orbiting planets).
- Save these relationships in a separate file or section (
universe_layout.json
).
-
Save/Load Universe Layouts
- Serialize spatial arrangements and relationships for persistence.
- Load saved universe configurations for further editing or simulation.
-
GUI for Universe Logic
- Provide controls for fine-tuning object placements and relationships.
- Include real-time validation to avoid conflicts (e.g., overlapping objects).
-
Switch to Simulation Mode
- Add a toggle to transition from Universe Layer to Rendering Layer (Simulation Mode).
-
Simulation Initialization
- Load object definitions and universe layouts.
- Initialize rendering pipeline with proper shaders, textures, and object attributes.
-
Physics Simulation
- Integrate a physics engine (e.g., Bullet Physics) to simulate gravitational interactions, collisions, and orbital dynamics.
-
Camera and Controls
- Implement free-camera movement for roaming the universe.
- Add a first-person or ship-like mode for immersive exploration.
-
Transition Back to Editing or Universe Layers
- Allow seamless transitions back to editing or universe layers for iterative adjustments.
-
Procedural Planet and Terrain Generation
- Use noise algorithms (e.g., Perlin noise) to generate planetary surfaces.
- Add features like water bodies, vegetation, and atmospheric effects.
-
Dynamic Transition System
- Implement seamless transitions between the universe and planetary surfaces.
- Ensure minimal performance impact during transitions.
-
Post-Processing Effects
- Enhance rendering quality with effects like bloom, HDR, and motion blur for realism.
- Cross-Platform Compatibility
- Ensure compatibility on macOS, Windows, and Linux.