As Frob mentioned, aside from C++ you definitely need strong understanding of some linear algebraic terms. However there are more things to cover as well. otherwise it will be just a rendering engine not a game. A game has to be interactive in order to be called a game. for that reason you need some collision detection engine. if you are brave enough to implement that yourself, then you need to learn math behind collision detection as well.
start with something simple such as AABB vs ray, AABB vs AABB, OBB vs OBB Sphere vs Sphere and so on. You must understand the basics of matrix and vector manipulation before you dive in to collision detection though, otherwise you won't make sense of things.
I would recommend following books.
3D math primer for Game development(by Fletcher Dunn & Ian Perberry)
3D game engine Programming(by Stefan Zerbst & Oliver Duvel)