- GLEW
- SDL2
- glm
For debian based distributions they are:
libglew-dev libsdl2-dev libsdl2-ttf-dev libglm-dev
Make sure you have SDL2 development libraries installed and then run the command bellow.
git clone "https://github.com/gbrls/myncraft/" && cd myncraft && make all
- Cool texures :)
- Infinite world.
- Cool player controls and a debug mode.
- Trees!
- Loading chunks from disk.
- Collision.
- Water and other biomes.
- Clouds.
- the Sun & the Moon.
- Simulated voxel shadows.
- Chunck's meshes are generated from all the visible faces, hidden faces are not in the mesh.
- It was initially a DFS that visited all visible faces, but it led to stack overflows.
- Now, it is a refractored version of the DFS into a BFS.
- Terrain generation is deterministic: With the same seed you'll always get the exact same world.
- This is implemented by using a perlin noise generator for everything, the terrain height and the tree generation.
- The result of Perlin(x,y) is used as a seed to the tree generation algorithm.
- Block's faces have normals.
- The normals are stored in the vertex data (in the mesh) as a sigle float, then it's transformed into a vector by the shader.
Chunck's meshes are calculated in asynchronous calls.Maybe it wasn't a good idea because it affects the main thread, in which the main game loop is running.- They are now calculated in a single thread (different from the main).
- Tree leaves are constrained by it's chunk, you can see that some trees have their leaves sliced.
- The meshing algorithm does not take into account chunk to chunk occlusion, every chunk has it's outter shell meshed.
Camera coords to Chunk coords algorithm is not working properly.A async call to each chunk being genereted leads to a little lag to the main thread when a new chunk is generated.
I usually write my code by expanding upon smaller functional iterations, so it's easy to document.
-
Day 2.
During this day I worked mostly on camera controls and projections, so the graphics didn't really changed. -
Day 3.
I worked on mesh generation with a DFS to mesh only the visible faces. -
Day 4
I changed the project structure a little bit and started messing around with terrain generation.
Efficient mesh generation, but it's worse than greedy meshing. -
Day 5
I implemented a texture array, instead of a single texture.
A simple pause was implemented in order to take screenshots.
A simple tree generation algorithm was implemented, currently the trees cannot occupy multiple chunks, this is a problem.