Whats your programming background?
Are you wanting to actually design an engine and stuff from scratch using a low-level API like Direct3D or OpenGL?
Or are you wanting to do level/character/internals design?
There's a big difference between #2 and #3. #2 requires you to be very proficient in math. Exposure to 3+ dimensional calculus, 3D Vector properties, and calculations by matrices are a must. #3 isn't all that hard for someone that has some time to kill and is artistic or creative and able to understand the basics of how an engine works.
There's several good books out there. I hear the Torque engine is a great tool for #3. But for #2, you need a book for 3D game programming using DirectX 9. Skip all the old crap that doesnt matter anymore. Designing games for DirectX puts you more on the cutting edge than learning about design of 2D sprite-based shooters or something. While they share some commonalities; those things can be learned either way. DirectX programming and general COM programming are a COMPLETELY different animal.
Good luck on the engineering degree. My best advice is to try hard early for two reasons: 1) A solid GPA going into junior level classes (where it gets very hard) is a nice safety net if you don't do so well later. 2) Multidimensional Calculus, differential equations, basic and advanced linear circuits, and digital logic become VERY important bases for later. Try hard to understand and do well in them all so you've got a better fighting chance for later (when most people switch majors to something easy like a Business degree)