Привет. В прошлой статье я описал математику, которая необходима для вывода трехмерной сцены на экран в виде сетки — т.е. мы остановились на моменте получения координат вершин в пространстве экрана. Следующий шаг — это «заполнение» полигонов из которых состоит объект, т.е. поиск пикселей, которые входят в изображение объекта на экране. Процесс поиска этих точек называется растеризацией. Мы так же хотим иметь возможность текстурировать и освещать объекты — для этого необходимо уметь интерполировать атрибуты, заданные в вершинах (например, текстурные координаты, нормали, цвет и другие).
Наши входные данные — это набор полигонов (мы будем рассматривать только треугольники): координаты их вершин (система координат зависит от алгоритма) и значения атрибутов в каждой из этих вершин, которые в дальнейшем будут интерполироваться вдоль поверхности треугольника. Существует несколько подводных камней, которые я рассмотрю в этой статье:
Я рассмотрю три подхода к растеризации:
Так же в конце будет ссылка на проект, который является примером реализации, оттуда же будут и примеры кода.
Наши входные данные — это набор полигонов (мы будем рассматривать только треугольники): координаты их вершин (система координат зависит от алгоритма) и значения атрибутов в каждой из этих вершин, которые в дальнейшем будут интерполироваться вдоль поверхности треугольника. Существует несколько подводных камней, которые я рассмотрю в этой статье:
- Правило заполнения пикселей (filling convention)
- Точность
- Коррекция перспективы при интерполяции аттрибутов (perspective-correct interpolation)
Я рассмотрю три подхода к растеризации:
- «стандартный» алгоритм, использующий наклон граней
- целый ряд алгоритмов, основанных на использовании уравнений граней полигона (traversal-алгоритмы)
- алгоритм растеризации в однородных координатах
Так же в конце будет ссылка на проект, который является примером реализации, оттуда же будут и примеры кода.