Объекты, сделанные из различных материалов Тщательным подбором коэффициентов отражения можно добиться того, чтобы объект выглядел - по меньшей мере приближенно - сделанным из нужного материала, например меди, золота, олова. МакРей-нолдс и Блайт [McReynolds, 139] предложили использовать коэффициенты отражения, приведенные в табл. 8.1. Отметим, что коэффициенты зеркального отражения имеют различные компоненты красного, зеленого и синего цветов, так что цвет зеркального света, вообще говоря, не будет совпадать с цветом падающего света. Однако МакРейнолдс и Блайт предупреждают пользователей, что, поскольку алгоритм закраски OpenGL использует зеркальный компонент Фонга, видимые эффекты не являются полностью реалистичными. Мы вернемся к этому вопросу в главе 14 и опишем там более реалистичный метод закрашивания Кука-Торранса (Cook-Torrance).

Визуализация граней для усиления реалистичности

Таблица 8.1. Параметры для часто используемых материалов

Материал степени 1

Фоновое: р„,рщ,рл

Диффузное: р^р^'Р»

Зеркальное: p„,p4,prt

Показатель

черная пластмасса

0.0 0.0 0.0 0.01 0.01 0.01 0.50 0.50 0.50

Латунь

0.329412 0.223529 0.027451 0.780392 0.568627 0.113725 0.992157 0.941176 0.807843 27.8974

Бронза

0.2125 0.1275 0.054 0.714 0.4284 0.18144 0.393548 0.271906 0.166721 25.6

Хром

0.25 0.25 0.25 0.4 0.4 0.4 0.774597 0.774597 0.774597 76.8

Медь

0.19125 0.0735 0.0225 0.7038 0.27048 0.0828 0.256777 0.137622 0.086014 12.8

Золото

0.24725 0.1995 0.0745 0.75164 0.60648 0.22648 0.6282810.555802 0.366065 51.2

Олово

0.10588 0.058824 0.113725 0.4274510.470588 0.541176 0.3333 0.3333 0.521569 9.84615

Серебро

0.19225 0.19225 0.19225 0.50754 0.50754 0.50754 0.508273 0.508273 0.508273 51.2

Полированное серебро

0.23125 0.23125 0.23125 0.2775 0.2775 0.2775 0.7739110.7739110.773911 89.6

8.2.7. Закраска и графический конвейер

На каком этапе работы графического конвейера выполняется закраска? И как это делается? На рис. 8.17 вновь приводится этот конвейер. Основная идея состоит в том, что вершины сетки посылаются в конвейер вместе со связанными с ними нормалями, и все вычисления по закраске осуществляются именно с вершинами. (Напомним, что подпрограмма draw() класса Mesh с каждой вершиной передает нормаль, как показано в листинге 6.2.)


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