Zendite Engine (contributor)
A small scale 3D game engine written in C++ using OpenGL.
Features
- Entity component system (ECS)
- Model loading system
- Lighting system
- Point, spot and directional light components
- Shadow mapping
- UI to let the user manipulate the properties of every entity
- AABB collision detection
Prerequisites
- Use the Windows 10/11 operating system
- Ensure you have CMAKE installed and added to the system path on your computer.
- Ensure you have Visual Studio 2022 installed with the C++ workload.
Build
If the above are all as stated, perform the following steps:
- When you pulled this repo from git, ensure that you used git clone –recurse-submodules
(otherwise, the assimp submodule will not be included) - In the Solution Directory, navigate to dep/assimp
- In the “assimp” directory, open a bash terminal and type “cmake CMakeLists.txt” an push enter.
- Then type “cmake –build .” and push enter again. This will set up the assimp submodule.
- Now double-click the visual studio solution file in the solution directory “zenditeEngineV2.sln” to open it in Visual Studio 2022.
- Press F5 to build and run.
Usage
Controls:
- W, A, S and D => Move flycam around the scene.
- Q and E => Hover Up and Down.
- C => Unlock mouse pointer (Which enables the user to use the mouse on the GUI).
- V => Lock mouse pointer to game window (Nouse will now control camera view direction).
- L and K => Toggle wireframe mode on and off.
Dependencies
The following 3rd Party Libs were used in this project:
- GLFW => For window context creation Link: https://www.glfw.org/
- GLEW => For retrieving OpenGL functions Link: https://glew.sourceforge.net/
- Assimp => for model loading Link: https://github.com/assimp/assimp
- Stb image => for texture image loading Link: https://github.com/nothings/stb
- glm => for maths operations (mainly for matrix and vector calculations) Link: https://github.com/g-truc/glm
- imgui => for the GUI implementation (implemented in menu.h) Link: https://github.com/ocornut/imgui
Other 3rd Party Contributions:
- LearnOpengl.com’s camera class implementation. (Implemented as Camera.h) Links: https://learnopengl.com/Getting-started/Camera and https://learnopengl.com/code_viewer_gh.php?code=includes/learnopengl/camera.h
- The Cherno’s Basic OpenGl error checking macro from his OpenGl error checking YouTube video. (Implemented on lines 21 - 24 of utils.h) Link: https://www.youtube.com/watch?v=FBbPWSOQ0-w
- Austin Morlan’s C++ entity component system blog. I used this design for the overall ECS design. With some modifications, such as having a higher level Coordinator on top of ECSCoordinator.h. (Implemented: All .h files within the src/ECS directory of this repo) Link: https://austinmorlan.com/posts/entity_component_system/
- Learnopengl textures => The following textures in the res/textures dir were taken from learnopengl.com: (awesomeface.png, container2.png, container2_specular.png, wall.png)
- res/textures/lava.jpg texture => taken from Maiomi on Pintrest: https://www.pinterest.com/pin/306737424617953515/
- res/textures/water.jpg texture => taken from pintrest PublicDomainPictures.net: https://www.pinterest.com/pin/306737424617953515/
- res/textures/rockySurface.png texture => taken from pintrest Medialoot: https://www.pinterest.com/pin/22-beautiful-and-seamless-rock-textures-medialoot–570127634082430201/
- Heightmap textures taken from: https://tangrams.github.io/heightmapper/