Make Games, Not Engines.
You don't want to create an engine. Not yet, at least. Creating a game engine with OpenGL or DirectX--even if it's 2D--is much more complex than it seems at first. If you attempt to create an engine at your skill level you'll end up with an inflexible group of functions that just over-complicate the process of making a game. Instead design a *very* simple framework. It shouldn't handle much more than initializing DX/OpenGL and loading meshes, images, and sounds. Then, once you've created a couple games with this and you understand what's required to make a decent game in C++ using DirectX or OpenGL, you can attempt to make a simple engine, with a scene graph, a material system, etc.
Basically the point I'm trying to get across is that when people first begin with DirectX, they suddenly want to create a simple game engine. But there are several problems with that:
a) They know very little DirectX. They create their engine with only the basics in mind--creating a device and vertex buffer, matrix transformations, etc. However as they increase their knowledge they continue to add and add to it until it grows into an extremely messy pile of unstructured code.
b) They also typically know very little about C++, leading them to code their engine using many bad practices, once again leading to a very poorly designed engine.
c) And they also know very little about game design itself, and the kind of features a game engine needs to be flexible, fast, etc, and so when it comes to designing a game with their new engine they've made, they realize that their engine is totally unsuitable for game dev. This is why it's important that you go straight into game creation first, rather than engine creation. It's hard to code a game engine if you don't know how to code a game.
i like orange