This project is a practice project to make a game engine using Entity-Component System, the graphics utilises GLFW library for rendering. The engine is called Fengshui at at the moment. The work is done in the Engine Branch, main will only display the latest stable build.
- 2D Renderer, supporting custom textures and shaders.
- 3D renderer, supporting directional lighting and custom shapes as well as built-in porimitives
- Batch rendering for both 2D and 3D
- Perspective and Orgthographic camera
- Editor where component data can be adjusted
- Event system which would reflectively call functions according to their dynamic type
- Entity-Component System for rendering, transform, position and camera
- Create a simple snake game using pure SFML to learn the basics of input handling and rendering. It was a simple practice with no connection with the rest of the engine. It is implemented in the Snake Branch.
- Remade the snake game with Fengshui using the Fengshui editor interface in NewSnake Branch, all the game code are implemented in the editor layer which only calls functions from the Fengshui engine.
- Get Logging working with spdlog
- Create a entity component system structure, a simple ECS is created in the ECS folder.
- Integrate GLFW into the ECS. The GLFW now works under render component, which stores all the information required for rendering.
- Continue with the Cherno series on Hazel to further develop the renderer. The 2D renderer now supports batch rendering, subtexture
- Added perspective camera and 3d rendering to support the 3d physics system.
- expand the 3d renderer to allow rendering with custom shapes, it now uses the same technique as physical shapes to build convex shape from a set of points
- Added functionality to render a sphere, ready to use it in raytracing.
- Added a preliminary editor, which can display entities in the scene in hierarchy, as well as modifying components
- Improve the panels. The panels now allow add and removal of components at runtime, as well as the ability to modify most value based data, with the exception of hierarchy.
- Integrated the 3D Physics Engine that was previously made in Physics Engine, the engine doesn't play nicely with hierarchy yet.
- Added offset and scale for colliders relative to the object scale. Sphere can only be scaled uniformly in physics to avoid complication
- Implement an audio system which can allow user to use all available audio input and output devices.
- Add support of playing wav files through an audio source.
- Add support for flac, ogg and mp3 files.
- Add support for having multiple buffer for an audio file so it can play larger files seamlessly.
- Add support to pause, stop audio as well as looping.
- Implement the audio player component to the existing ECS system.
- Added editor function to modify some properties.
- adds audio listener
- Add ability to modify audios through pitch shift.
- Text Rendering
- game UI rendering
- 2D animation
- Allow packaging into web game
- Able to open other webpages
- Link to GPT
- Look into more ways of modifying audio.
- Look into raytracing and integrate it into the engine(stretch goal).
- Rendering breaks when 2D is used with spheres
- Physics doesn't work well with hierarchy, I believe due to how transform is calculated
- Batch the audio system similar to how rendering is done. (batching doesn't seem to work as nicely as opengl due to the natural of audio)
- Integrate SFML into the ECS
- Develop several components and entities, simple ones to start with such as simple data such as transform. The system now supports a hierarchy component that stores the position of entity in hierarchy, and transform to represent the location and orientation of the component in the world as the basics, with more to come. The ECS system was not a real ECS system so is now deprecated.
- sfml 2.6.1 (for snake game, deprecated)
- glfw 3
- spdlog
- glad
- imgui
- glm
- stb
- OpenAL-Soft
- MiniAudio
Major thank you to Cherno for the series on Hazel Engine