glNormal multiple times between
glBegin/End allows you to set a normal per vertex instead of per primitive.
For a more complex mesh consisting of multiple triangles you would want the normal at one vertex depend on the other triangles of the surrounding geometry and not just the normal of the triangle it belongs to.
Here is an example of the same geometry with:
- on the left per-vertex normals - so each vertex of a face has a different normal (for this sphere it means all normals point outward from its center), and
- on the right per-face normals - each vertex gets the same normal value (since you specify it only once, or because it uses the default normal value of
The default shade model (
GL_SMOOTH) causes the normals of the face's vertices to be interpolated across the face. For the per-vertex normals this results in a smooth shaded sphere, but for the per-face normals you end up with the characteristic faceted look.