Посмотрим теперь, как при выполнении различного рода закрашиваний используется информация, полученная от нормали в каждой вершине. Главное различие между методами закрашивания заключается в том, что при одном из них (плоское закрашивание - flat shading) отдельные полигоны выделяются, а при другом (плавное закрашивание - smooth shading) происходит плавный переход между гранями и

8.3. Плоское и плавное закрашивание стирание ребер между ними. Мы будем рассматривать два вида плавного закрашивания: закраску Гуро и закраску Фонга.

При обоих видах закраски вершины пропускаются через графический конвейер, выполняются вычисления для привязки цвета к каждой вершине, и, наконец, вершины каждой грани преобразуются в экранные координаты, и грань «раскрашивается» соответствующим цветом - пиксел за пикселом.

Раскраска грани Раскраска грани производится с помощью подпрограммы заполнения полигонов. Закрасить полигон очень просто, хотя точная настройка алгоритма заполнения для достижения наивысшей эффективности может оказаться сложной (см. главу 10). Здесь мы займемся только основами и сфокусируем свое внимание на том, как задается цвет каждого пиксела.

Подпрограмму закраски полигона иногда называют «плиточником» (tiler), поскольку она проходит полигон пиксел за пикселом, раскрашивая каждый пиксел нужным цветом, подобно тому, как выкладывается мозаика паркетного пола. Пикселы полигона посещаются в порядке очереди, обычно по строкам развертки слева направо, снизу вверх по полигону.

Мы предполагаем, что интересующие нас полигоны являются выпуклыми. Плиточник, предназначенный для заполнения только выпуклых полигонов, может быть сделан очень эффективным, поскольку для каждой строки развертки существует только один неразрывный «ряд» пикселов, лежащий внутри данного полигона. В большинстве реализаций OpenGL используется это обстоятельство, и выпуклые полигоны всегда закрашиваются правильно; с другой стороны, корректная закраска невыпуклых полигонов не гарантируется (см. в упражнениях дополнительные соображения о выпуклости).


⇐ Предыдущая| |Следующая ⇒