* [Статья 1: алгоритм Брезенхэма][1]
* [Статья 2: растеризация треугольника + отсечение задних граней][2]
* [Статья 3: Удаление невидимых поверхностей: z-буфер][3]
* Статья 4: Необходимая геометрия: фестиваль матриц
* [4а: Построение перспективного искажения][4]
* **4б: двигаем камеру и что из этого следует**
* Статья 5: Пишем шейдеры под нашу библиотеку
* Статья 6: Чуть больше, чем просто шейдер: просчёт теней
Сегодня мы заканчиваем с ликбезом по геометрии, в следующий раз будет веселье с шейдерами! Чтобы не было совсем скучно, вот вам тонировка Гуро: ![][5] Я убрал текстуры, чтобы было виднее. [Тонировка Гуро][6] очень проста: добрый дяденька-моделёр дал нам нормальные вектора к каждой вершине объекта, они хранятся в строчках vn x y z файла .obj. Мы считаем интенсивность освещения для каждой вершины треугольника и просто интерполируем интенсивность внутри. Ровно как мы делали для глубины z или для текстурных координат uv! Кстати, если бы дяденька-моделёр был не таким добрым, то мы могли бы посчитать нормали к вершине как среднее нормалей граней, прилегающих к этой вершине. Текущий код, который сгенерировал эту картинку, находится [здесь][7]. [Читать дальше →][8]
[1]:
http://habrahabr.ru/post/248153/
[2]:
http://habrahabr.ru/post/248159/
[3]:
http://habrahabr.ru/post/248179/
[4]:
http://habrahabr.ru/post/248611/
[5]:
http://habrastorage.org/getpro/habr/post_images/bcd/f0b/ba5/bcdf0bba53495b4ebc86ba45f03d255e.png
[6]:
http://en.wikipedia.org/wiki/Gouraud_shading
[7]:
https://github.com/ssloy/tinyrenderer/tree/10723326bb631d081948e5346d2a64a0dd738557
[8]:
http://habrahabr.ru/post/248723/#habracut