This is simply not true. As an intern, I didn't need to understand hardly any math. From there, I learned what I needed as I went. I have a fairly deep understanding now (four years later), but you definitely don't "need math" in order to get started programming games, or even to get a job working on games.
"This, to me, sounds like a big undertaking, but I think that it is a good goal and hopefully 5 months will be enough to achieve it."
I wouldn't trust anyone who had only spent 5 months learning and applying C++ to work on any game I was a part of. My reputation would be on the line due to their mistakes. 5 months just isn't nearly enough time, even if you spent every day learning and working.
I spent almost every day of every year of my highschool time (Freshman, Sophomore, and Junior year) sleeping through class, then going home and learning how to make games in C++. Only then was I finally able to land an internship and get the heck out of school. And I was still a really bad programmer, even after "three years". It takes time to get good, and there are no shortcuts for experience.
Your demos are critical. Make as many of them as you can, as quickly as you can, and be sure they work with few flaws.
Don't really worry about code quality quite yet. It's exceedingly rare for anyone to actually look at the code you write before hiring/interning you. They will expect you to write code to their coding standards anyway --- they need to know whether you can accomplish things, not whether you can write pretty code.
Most importantly, keep it fun. Don't worry about "choosing to make this your path in life, no matter what". If you approach this like your life is over if you don't get an internship, then you'll fail. Conversely, you're much more likely to succeed if you try to learn the things you find fun. It was fun for me to put together physics demos, and so I learned PhysX. It was fun to get a character walking around, so I learned D3D9 Skinning. Etc. Have fun as much as possible. Lastly, it was important that I didn't delude myself into thinking I was more skilled than I actually was.
I find it a little self-defeating to try to tackle two of the more complex tasks in software development at once. Learn to program (obligatory Learn Python The Hard Way reference), learn to write games, learn C++. Or learn to program, learn C++, learn to write games. It separates the hard bits in such a way that you can approach them, understand them, master them, and then move on.
http://ps3.ign.com/articles/117/1178844p1.html
http://www.tomsguide.com/us/Gameloft-Glenn-Watson-dangerous-...
http://www.reddit.com/r/gamedev/comments/iso44/trouble_at_ga...
That's great for him, but why is this interesting?
Here's a random list of thoughts, speaking as a graphics and game programmer:
First, you hardly ever have to even think about "perspective transformation". Put it out of your mind until you're ready to attempt acquiring advanced knowledge, because it will just confuse and therefore hinder you.
Second, a transformation is typically a 4x4 matrix. It looks like this:
Xx Yx Zx Px
Xy Yy Zy Py
Xz Yz Zz Pz
0 0 0 1
In this case, "P" is the translation ("how much the matrix will move the input").X, Y, and Z are "right", "up", and "forward" directions, respectively.
That is, imagine yourself sitting in your chair. Your comupter table defines absolute right (1,0,0) up (0,1,0) and forward (0,0,1).
Now imagine a blue arrow coming out of your chest towards your monitor. That's your Z axis. Imagine a green arrow coming out of your head, pointed at the ceiling. That's your Y axis. And now stick your right arm straight out and color it red. That's your X axis.
Now rotate to the left 45 degrees. Then scoot two meters backwards ("backwards" as in "opposite the direction you're currently facing", NOT "away from your computer desk"). Imagine the arrows rotating as you do this. Now figure out the exact numbers for those arrows (vectors). Plug those into X, Y, and Z columns of the matrix. Plug (0,0,-2) into the P column of the matrix. Congrats, you've built a transform that "rotates an object to the left 45 degrees, then scoots it back two meters".
Note that the above assumes a left handed coordinate system, with Y axis being 'up'. Which is the most natural IMO.
Lastly, dot product is the most important tool you could possibly want to understand. It's so versatile. You want to figure out the closest point on a line to point P?
dot( (P - line.start), normalize(line.end - line.start) )
... is the distance along the line of the closest point to P.It's a projection. It "projects" a point onto a basis. (I know a lot of mathematicians are probably screaming at their monitors at me right now, but foo on that. This is one of the most useful ways to think about dot products with respect to game/graphics programming, which is what we're talking about.)
Also, if you want to impress any interviewer who asks you about dot product, remember this phrase: "The dot product of two normalized vectors is the cosine of the angle between them." ... But you should really also understand that phrase. =)
I am fully aware of everything that has been said here. I know it's hard work. I've heard about the hours. I know that it would be easier to start with Python.
But you know what? I just don't care. None of that concerns me. This is something that I want to do, and I'm willing to put up with all of this stuff.