tundra is a 3D game framework/engine built on top of LWJGL. Our motivation was to take what we built last year as grassland and advance it to make use of OpenGL's programmable pipeline. It didn't make sense to continue working on grassland as the use of fixed pipeline was pervasive in the code base.
Both grassland and tundra were built for use in game jams and therefore aspire to provide a small set of powerful abstractions to make game development as fast as possible. tundra has pushed this a long way with the introduction of callbacks into the engine making scripting timed behaviours trivial.
For example,
after(1000, () -> {
// Execute this after 1000 milliseconds
});
every(1000, () -> {
// Execute this every 1000 milliseconds
});Furthermore, a simple to use LERP utility is also provided,
lerp(1000, f -> {
// `f` will take all values between `start` and `end` over 1000 milliseconds
}, start, end);tundra also includes a small set of bindings into the JBullet physics engine. JBullet is performant and well put together; however, difficult to work with. Further work on tundra would definitely involve expanding these bindings to provide a complete interface.
tundra is yet to support animation; however, it moves far passed grassland in terms of graphics capability. tundra supports the loading and rendering of .obj files along with .mtl files.
Here is an example of a mesh rendered in tundra with several materials and lights (including a shadow mapped global light source),
The model used in this scene is available here, all credit goes to the original creators.
We don't yet support PBR, although it may take another rewrite before this is possible. We do however support normal, specular, diffuse, ambient and highlight mapping (all of which are used in the above).
Issue reports and feedback are welcome. Documentation should appear at some point in the future. Thanks for reading ^-^

