Давайте рассмотрим несколько примеров полностью процедурных шейдеров.

11.1. Повторяющиеся шаблоны

11.1. Повторяющиеся шаблоны

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

Объект, изображенный на цветном рис. 13, представляет собой неполный тор, рендеринг которого выполнен тендером полосок. Этот шейдер и приложение, использующее этот шейдер, разработаны в 2002 г. компанией Light Work Design, которая разрабатывает программное обеспечение для наложения фотореалистичных эффектов1 на объекты, созданные коммерческими автоматизированными пакетами (CAD/САМ). Приложения, разработанные LightWork Design, имеют графический интерфейс, который позволяет пользователю менять параметры шейдера. Имена доступных шейдеров перечислены в правом верхнем углу экрана, а параметры выделенного шейдера, которые можно изменять, - в правом нижнем. В нашем случае параметры для шейдера полосок - это цвет полоски (синий), цвет фона (оранжевый), масштаб (количество полосок) и ширина полоски (соотношение ширины полоски к ширине фонового просвета; если это значение, например, 0,5, синие и оранжевые полоски будут одинаковой ширины). На цветном рис. 12 показан снимок экрана с большим количеством объектов, рендеринг которых выполнен процедурными шейдерами OpenGL.

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


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