I've always wanted to know what happens under the hood in commercial game engines. This is my attempt to build something of my own and learn the concepts in the process. For demonstration purposes, I've created a Breakout clone. A 2D game. Like in a commercial game engine, I've tried to divide the functionality into their respective modules or classes. For instance, GameController for encapsulating the game logic, and similar headers and classes for handling collisions, shaders, textures, resources, audio, particle system and rendering.
- OpenGl - For rendering.
- GLFW - It provides a simple API for creating windows, contexts and surfaces, receiving input and events.
- GLEW - It provides efficient run-time mechanisms for determining which OpenGL extensions are supported on the target platform.
- SOIL2 - A tiny C library used primarily for uploading textures into OpenGL.
- irrKlang - Sound engine and audio library which plays WAV, MP3, OGG, FLAC, MOD, XM, IT, S3M and more file formats.
- glm - OpenGL Mathematics (GLM) is a header-only C++ mathematics library for graphics software based on the OpenGL Shading Language (GLSL) specifications.
- How does rendering work with OpenGL?
- Shaders and working with textures.
- Orthographic projection and dealing with world space and normalized device coordinates.
- 2D Physics and collision resolution algorithms like AABB - AABB and AABB with a circle.
- Input Processing and events.
- Particle effects.
- Working with sound.
- Game Engine as a state machine.
- UI/UX.
- Press X or Esc anytime to quit.
- ← → Arrow keys to move left and right.
- Space key to shoot the ball from the paddle.
- On the menu screen, press 1,2 or 3 to experience the respective levels.
- Experiment with Text Rendering.
- Trying out other camera perspectives.
- Maybe some networking features.