This technical blog will be a special place for me and the work I do. Here, I will publish articles on the progress that I’ve made in my game/graphics engine development, computer 3D graphics and programming in general.
From September 2014 to November 2015 I’ve been working on my own graphics and game engine – it wasn’t easy and I didn’t quite finish it. Actually, I really need to start it from scratch. Fortunately it wasn’t all for nothing as I learned lots of new things – and I’ve also made an enormous amount of mistakes and errors. What’s important to me is that I’ve been doing something what I really enjoy. Coding. I’ve been programming since I’ve turned 13. But just coding isn’t enough – I also needed to code what I want and do it for myself. Besides, I’ve had the idea for a game engine and a name for it back in 2007. Many years had passed before I could finally jump with both feet into it.
Don’t get me wrong – the engine is not finished, many things don’t work, performance is poor and graphics quality is low – it’s all still work in progress. I’ve also decided to shelve most of the code responsible for 3D rendering (OpenGL). Later I will try to play with Ogre3D 2.0/2.1 and I will post my findings. There are many reasons for that and the most obvious is that one should not reinvent the wheel. There are zillion of different 3D graphics engines and frameworks available and adding another one on top of that is just too much. On the other hand, how much one coder can do anyway?
Still it was a lot of fun (and also frustration) to code it. Most of the code will be reusable in one way or another: resource/handle manager, event manager, some parts of scene management, pick selection, 3D objects loading using Assimp, Lua scripts integration using LuaPlus, initial Bullet integration, ragdolling, mesh skinning and so on…
In the next months I will try my best to regularly post articles about my solutions to various game programming problems.
I’ve been coding under Arch Linux using Cmake and Netbeans as IDE for C++. Yeah, it’s not quite popular choice 😛
Things that I’ve implemented so far:
– scene manager,
– scene nodes with traits,
– pick selection based on aabb/sphere (with multiple selection through selection box),
– loose octrees/quadtrees,
– frustum culling (slow),
– meshes aos/soa,
– skinned mesh support,
– resource manager / handle manager,
– shader manager with shader configs and traits,
– automated uniform updater,
– event manager,
– simple gui with different widgets,
– physics integration,
– 3D objects loading using Assimp (loads into custom structure),
– mesh skinning on GPU (using vertex shader)
– ragdolling using Bullet and Assimp,
– full Lua integration using LuaPlus,
– support for dynamic plugins (DLL dynamic load),
– using OpenGL 3.0+ and SDL 2.0.
Probably there should be more things implemented but during development there were at least three major refactorings, also at some point I was using Cyclone Physics and then dropped it. Two months were wasted when I was trying to create my own WYSIWYG editor using wxWidgets. From time perspective I also see that the whole approach was wrong – I focused on creating a complete engine from scratch without much experience. I decided to change tactics and start writing single programs that solve single problem, implement one or more features. Then it will be much easier to connect those programs into one system. I also will focus more on developing useful tools – that was one of the biggest problems in the later stage of my game engine development – there was no tool to use when editing resource configuration files, XMLs, lua scripts and so on, and it really slowed down the whole development process. That plus the fact that working alone on 100+K lines of code in 400+ files written without any plan is just time consuming…
From November 2015 to May 2016 I’ve been helping setting up and working in VR Gaming Cafe in my home town – sadly there were not enough clients and the owner had to close business anyway – which really is a shame because the interior design of the cafe was truly special and unseen in Europe at that time.
From August 2016 to the end of October 2016 I was writing my own Android game in Java using libGDX and Intellij IDEA – which I must say was quite pleasant experience. The idea for this game was from 2014, then in 2015 I started coding it as dynamic library plugin for my game engine and dropped it. I decided to pick it up and port the plugin code to Java and build it on top of libGDX.