I am writing a program that displays a bunch of 3D objects in a room with lighting. I am doing that from scratch, so I have to implement normals calculation myself.
Say I have a set of 3D points representing a 3D object. On one hand, I can calculate the normals for every surface and vertex, and then store them in memory. Then I'll need to place the object somewhere in the room, that is, add the coordinate of the object to every vertex of it, and also do the same with normals. But I've heard that you always have to normalize normals, so on the other hand, I may normalize normals, but then I won't be able to move them as easy as just adding the location of the object to them.
So, how is that implemented in real 3D games?
Are normals calculated once for every object, get saved in memory, and get normalized before calculating the angle of incidence and reflection?
OR
Are normals recalculated and normalized every time an objects changes its position?
OR
Maybe normals are not stored in memory at all, and you calculate and normalize them every time a new frame is rendered?
Or even maybe something else?..