Hello everyone!
In 2016, I wrote this engine designed to display and process cubic worlds (for example, minecraft or minetest).
It consists of two modules SimpleVoxelEngine and IrrSimpleVoxelEngine. The first module is not tied to irrlicht and is an independent engine that processes cubes and their logic, and this happens in one thread. The second module is already a binding to irrlicht and deals with the processing and creation of meshes, as well as the processing of multi-threaded logic. Full documentation (doxygen) and lessons are ready for the first module. There is documentation for the second module, but no lessons, there are only a couple of examples in TestProject. I vouch for the work with the current version only TestProject3. The second module itself is not fully completed, there are a lot of things I want to finish. For example, embed a system for ordering the mesh "from the camera" so that transparent nodes look normal, embed the Greedy Meshing algorithm for greater optimization. Also fix multi-threaded generation and update of chunks, at the moment it is disabled, since the engine periodically crashed during its operation, and then I did not find the reason.
The plans are to add the ability for the cube to be a chunk itself, that is, "in depth" any number of partitions. Initially, this was built into the modules, but at the moment it does not work. And also add multi-threaded logic to the first module.
I'm not sure that I will soon return to this project and finish it, but someday it will definitely happen.
At the moment, all the documentation is in Russian, but you can translate it into English on the go.
Link to github: https://github.com/Harchvertelol/SimpleVoxelEngine
Link to IrrSimpleVoxelEngine example (without many extra code): https://github.com/Harchvertelol/Simple ... n/main.cpp
Link to docs (doxygen): https://github.com/Harchvertelol/Simple ... umentation
I am also attaching some screenshots (below). FPS on screenshots sometimes incorrect due to taking screenshots (the game would lose focus and stop working). On the first screenshot, about 80 FPS, on the second and third 300-400 FPS. On the rest I did it through a print screen, so the FPS is correct.
I decided to show, you never know, someone wants to use it or is interested. The purpose of all this was to give the user the opportunity to have maximum control over the display and manage the picture, without thinking about algorithms for processing cubes. To some extent, this, I hope, worked out (see file main.cpp below).
P. S. Sorry for Google Translate