Long time since the last update, the whole project has undergone some major changes. Very little of the code I had written as of the last update remains. I have made the decision to use an game engine, Urho3D. After a lot of thought it’s clear that if this game has any chance of existing complete then I need to do everything I can to speed up development. I considered the various options from complete packages like Unity to graphics engines like Ogre3d. In the end Urho3D seems like the best fit, it is a very well written open source engine. Being open source it allows almost the flexibility that a custom engine would have given.
Surface Mesh Generation
The underlying structure of the world is in voxels, however each voxel does not represent a singular unit, instead I give it a volume. This allows the terrain to be smooth when the adjacent voxels are not of too great a hight or depth. I want to avoid the typical Minecraft style voxel landscape as much as I can, It’s been well overdone at this point and I don’t think it lends itself well to an overhead view. The little red dots you see on the surface are just placeholder flowers.
I jumped into the ambient occlusion not really thinking of the difficulty it would impose. In a Minecraft style world AO is quite trivial because each voxels vertices are clamped to an integer unit. You can bake the ambience value directly into the vertices. In this game it’s not possible because a voxel can have a vertex at an arbitrary location depending on the volume of the voxel. This only matters for AO at the top and the bottom of the sides of a voxel. So far I have baked AO for the surface (Grass) and I’m going to make another post about my alternate solution for the voxel sides (Rock).
Free Floating Camera
I added another camera type for debugging, the free floating camera allows me to see the world from any angle.