I was asking myself the same question about a year ago. I have always been interested in game development and graphics.
A couple of years ago i wrote a software renderer in Java. It was pretty straight forward to figure out how to render 3D cubes in perspective and move them arround. I had done some 2D lighting effects earlier and i made a version of that for 3D lighting. The really hard part for me was to put textures on the cubes. That made me really have to read up on the theory behind textures, how to do uv mapping, using linear interpolation, rendering surfaces according to distance from camera etc..
The product of this effort was a really slow software renderer that used my own 3D format. Totally useless for any real applications.. But it was fun to write and i learned a lot by doing it.
This made me want to write my own game engine for my next hobby game project. I have been working at it on and off for over a year and it is fun, i learn a lot in the process. But is it the best or fastest way to produce a game? No definately not! If i had a deadline i would have used an existing engine.
I am building on top of SDL, OpenGL, GLSL, GLM and Assimp. That have felt as a good foundation that still lets you decide a lot for yourself how you are going to create your UI, game loop, systems, shaders etc..
I have thought about using OpenCL and OpenAL as well but i have not got that far yet..
In a year of hobby development i have:
* Menu system that can create and style menues from config.
* Basic graphics settings like resolution, framerate, vsync, fps counter and texture detail.
* Basic keybinding of controls for keyboard, gamepad and mouse.
* A scene object that can manage differen game objects and their components.
* Can render a scene with 3D models using regular or instance rendering.
* My own GLSL shaders that can render meshes with ambient, diffuse, specular and bumpmapping using up to 3 different textures and multiple lightsources.
* Basic collision detection and colission handling system.
* System to handle user input.
It is fun and rewarding but not that fast, so it depends if you want to learn to make an engine or if you want to create a game. If learning about making engines is more important to you write your own! If finishing the game is more important use something like Unity!
GLHF!