[#] Software renderer — 2: растеризация и интерполяция атрибутов
habrabot(difrex,1) — All
2015-07-20 15:00:02


Привет. В [прошлой статье][1] я описал математику, которая необходима для вывода трехмерной сцены на экран в виде сетки — т.е. мы остановились на моменте получения координат вершин в пространстве экрана. Следующий шаг — это «заполнение» полигонов из которых состоит объект, т.е. поиск пикселей, которые входят в изображение объекта на экране. Процесс поиска этих точек называется растеризацией. Мы так же хотим иметь возможность текстурировать и освещать объекты — для этого необходимо уметь интерполировать атрибуты, заданные в вершинах (например, текстурные координаты, нормали, цвет и другие). Наши входные данные — это набор полигонов (мы будем рассматривать только треугольники): координаты их вершин (система координат зависит от алгоритма) и значения атрибутов в каждой из этих вершин, которые в дальнейшем будут интерполироваться вдоль поверхности треугольника. Существует несколько подводных камней, которые я рассмотрю в этой статье:

* Правило заполнения пикселей (filling convention)
* Точность
* Коррекция перспективы при интерполяции аттрибутов (perspective-correct interpolation)

Я рассмотрю три подхода к растеризации:

* «стандартный» алгоритм, использующий наклон граней
* целый ряд алгоритмов, основанных на использовании уравнений граней полигона (traversal-алгоритмы)
* алгоритм растеризации в однородных координатах

Так же в конце будет ссылка на проект, который является примером реализации, оттуда же будут и примеры кода. [Читать дальше →][2]

[1]: http://habrahabr.ru/post/243011/
[2]: http://habrahabr.ru/post/257107/#habracut