Toon-шейдеры — это, наверное, самые простые не-фотореалистичные шейдеры, которые мы можем написать. Они используют очень малое количество цветов, в основном — оттенки одного цвета. Тона резко изменяются на изгибах модели, что даёт ощущение трехмерности модели.
На этой картинке показано, чего мы пытаемся добится:


Тона приведённой фигуры выбираются на основании угла, точнее на основе косинуса угла между направлением виртуального света и нормалью поверхности.
Таким образом поверхность с нормалью, чье направление ближайшее к направлению луча света, будет наиболее яркой. Соответственно, чем более увеличивается угол между нормалью поверхности и лучом света, тем темнее будет поверхность. Иными словами, косинус угла задаёт интенсивность освещения поверхности.

В этом уроке мы начнем с версии шейдера, рассчитывающей освещение на каждую вершину. Далее мы перенесём эти рассчеты в пикселный шейдер. Также будет показано, как получить доступ к переменной позиции света OpenGL.

Для этих уроков (для создания чайника) нам понадобится библиотека glut.
Скачать её для MS VS++ можно тут.