Зачастую шум большей размерности используется для того, чтобы плавно менять во времени значения шума меньшей размерности. Например, одномерный шум можно использовать для внесения неровностей в линию, а двухмерный шум -для анимации (от кадра к кадру расположение неровностей плавно меняется). Точно так же двухмерная функция шума используется для рисования облаков, а трехмерная - для анимации изображения облаков. Используя четырехмерную функцию шума, молено создавать трехмерные объекты (например, планеты), а четвертое измерение применять для равномерного изменения объектов.
12.1.3. Шум в шейдерах OpenGL
Существует три способа использования шума в шейдере OpenGL.
1. Использование встроенной функции noi se языка шейдеров OpenGL.
2. Создание собственной функции шума на языке шейдеров OpenGL.
3. Хранение предварительно вычисленной функции шума в текстурной карте. К сожалению, на время написания этой книги существует только одна доступная реализация языка шейдеров OpenGL, и в ней нет ни встроенной функции noi se, ни возможности реализации определенных разработчиком функций. Но шум является важным аспектом компьютерной графики, так что в приведенных примерах будут использовать третий способ, а именно сохранение функции шума в текстурной карте.
12.2. Текстуры шума Возможности программируемое™ в языке шейдеров OpenGL открывают совершенно новые возможности использования текстурной памяти. Можно заранее
.12.2. Текстуры шума
"Вычислить функцию шума и сохранить ее в одномерной, двухмерной или трехмерной текстурной карте. Эта текстурная карта (или карты) затем читается из шейдера. Так как текстуры могут содержать до 4 компонентов, можно использовать одну текстурную карту для хранения четырех октав шума или четырех совершенно отдельных функций шума.
В листинге 12.1 приведена функция на языке С, которая создает трехмерную текстуру шума. Эта функция создает текстуру RGBA, причем первая октава шума .сохраняется в красном компоненте текстуры, вторая - в зеленом компоненте, третья - в синем компоненте, а четвертая - в компоненте прозрачности. Каждая октава отличается от предыдущей вдвое большей частотой и половинной амплитудой.