I've been through this bump of "why am I making an engine?" and there are so many reasons to do so.
do you want to have credible education to enter game development as an occupation? then you should make an engine. Even people specializing can learn so much.
do you want full control and knowledge of how things work? then you should make an engine. Unity and Unreal naturally don't show you the bones of it all, this was my problem, I don't like using something if I don't fully understand it. Truth be told I've spent a long time learning all bits and bobs and heck, I'm still learning.
do you want to feel the accomplishment of building a game from the ground up? then you should make an engine, its harder work, it can take a lot longer and it may not always seem worth it. But when you do get passed each hurdle, its a magnificent feeling, maybe because your glad to be done with that part or maybe your looking forwards to the next part, either way its a brilliant process. (this is also one of my reasons)
There are far more reasons but I'm not sitting here to list them,
to keep a long story short, as mentioned above, it depends what you want out of it.
without going into the code itself I can say,
the highlights aren't light enough, the shades aren't dark enough.
this is a good case of where gamma or colour correction can be used.
the trees texture is too dark in comparison to the ground (hence a lot of the artificial look)
its very important that the artist keeps highlights, midtones and shadows consistent throughout the textures (which is also why graphical artists for large 3D projects need to be flexible)
Techniques worth looking into for more accurate lighting,
Global illumination / indirect illumination (it has many other names but these are very common)
Ambient Occlusion (this is an approximation of global illumination very commonly used, the best version I've seen so far is Screen Spaced Directional Occlusion)
Gamma Correction / Colour correction (not much experience with this myself, but its fairly common to my understanding)
shadow casting (very important in getting rid of the artificial look on large open-ish landscapes such as this one)
But I'm sticking by the lack of depth in the highlights and shadows and the inconsistency of textures. They seem to be your problems, everything else I listed should be icing on the cake.
I'm only posting out of curiosity but isn't the title of the topic a bit bold? I had no idea forward rendering was even dead, I understand deferred shading can be of great advantage, but even in some of the best deferred systems forward rendering can still be of great use. Hybrids aside forward rendering when mixed with a pre-z-pass (read and to a tiny degree tested) is a viable alternative and offers many great advantages, ranging from memory and bandwidth saving, to diversity of shaders.
the way to do it in XNA is a matrix that scales and offsets points. I'm pretty sure you could do the same with C++ Get a transform matrix for the 2D camera Matrix Transform = Position Translation * //Camera Position Translation Rotation * //Camera Rotation Scale * //Camera Scale / Zoom Screen Translation //Finish by Translating the Transforms back inline with the screen source http://www.david-amador.com/2009/10/xna-camera-2d-with-zoom-and-rotation/
I know that its in XNA, but it will work in anything else, all it does is transform everything drawn by this matrix. As is shown, it supports (as I've explained it) the position of the camera, the rotation of the camera and the zoom of the camera,