float tempreal = real;
real = (tempreal * tempreal) - (imag * imag) + Creal; imag = 2.0 * tempreal * imag + Cimag: r2 = (real * real) + (imag * imag):
}

// Цвет зависит от количества итераций

vec3 color;
if (r2 < 4.0)
color = InnerColor: el se
color = mixCOuterColorl. 0uterColor2. fract(iter * 0.05)): color *= Lightlntensity: gl_FragColor = vec4 (color, 1.0);
}

Очевидно, что этот шейдер можно совершенствовать. Сначала можно усовершенствовать алгоритм выбора цвета, например, используя одномерную текстуру для хранения значений цвета. Количество итераций в этом случае может служить индексом в текстурной таблице.

После выбора приятного набора цветов можно рассмотреть несколько популярных частей множества Мандельброта. Различные книги и веб-сайты публикуют ко15.3. Пример Мандельброта ординаты интересных частей множества, и эти шейдеры исполнены таким образом, чтобы можно было самому ввести координаты и сразу увидеть результаты (рис. 15.8).

Результаты работы шейдера Мандельброта

Рис. 15.8. Результаты работы шейдера Мандельброта

15.3.4. Множества Джулии Множества Джулии немного похожи на множество Мандельброта. Каждая точка в множестве Мандельброта может использоваться для создания множества Джулии, и эти новые множества не менее интересны. Единственное их отличие в том, что константа с в уравнении Z2 + с устанавливается в значение какой-нибудь точки, входящей в множество Мандельброта (кроме той, которую рисуют в данный момент). Чтобы изменить фрагментный шейдер соответствующим образом, нужно поменять две строки кода, инициализирующие значение с"images/tmp16FC-59.png" alt="Множества Джулии, нарисованные шейдером Мандельброта">

Рис. 15.9. Множества Джулии, нарисованные шейдером Мандельброта И Зак. 218

Нефотореалистичные шейдеры

15.4. Итоги Далеко не во всех интерактивных графических программах нужен реализм. Используя современные возможности графического аппаратного обеспечения, легко можно создавать любые нужные эффекты. С помощью высокоуровневого процедурного языка, такого как язык шейдеров OpenGL, художники и создатели графических программ могут программировать алгоритмы для рисования в художественных стилях, имитируя, например, перо, гравюру, живопись. В этой главе был представлен процедурный шейдер штриховки, который иллюстрирует процесс создания таких шейдеров. Различные виды технических иллюстраций можно создавать с помощью шейдера Гуча, описанного в этой главе. Можно также создавать шейдеры для визуализации математических функций, например шейдеры Мандельброта и Джулии.


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