□ функции везде С-непрерывны вместе со своей первой производной.
5.10. Итоги Язык шейдеров OpenGL содержит богатый набор встроенных функций. Некоторые из них похожи на аналогичные в С и С++, другие похожи на функции из RenderMan. Эти функции предназначены для расширения аппаратной функциональности (например, доступа к текстурам) или для поддержки стандартных операций (например, вычисления квадратного корня, приведения значения к заданному диапазону и т. д.), либо они представляют операции, которые будут ускорены агшаратно в будущих версиях графических ускорителей (тригонометрические функции, шум).
Здесь в большом объеме используется перегрузка функций, так как многие из них должны выполнять операции как над векторами, так и над скалярными числами. Производители, поддерживающие язык шейдеров OpenGL, ожидают, что
Встроенные функции
реализация этих функций будет оптимальной, так как рекомендуется, чтобы разработчики использовали эти функции, а не делали вычисления самостоятельно.
Встроенные математические функции можно использовать несколько неожиданным способом, например, для создания текстур, что можно будет увидеть в примерах шейдеров, приводимых в следующих главах этой книги. При этом визуализация функции может быть жизненно необходима в процессе разработки, так как она позволяет оценить полезность функции для реализации какого-либо эффекта и сделать правильный выбор.
5.11. Ссылки Чтобы рассмотреть примеры применения встроенных функций, описанных в этой главе, просто продолжайте читать книгу. Некоторые дополнительные подробности можно найти в книге [2].
Различные встроенные функции языка шейдеров OpenGL, включая функции производных и ширины фильтра, были заимствованы из языка RenderMan, смысл применения этих функций обсуждается в книгах [7 и 1]. За подробным описанием функций шума обращайтесь к заметкам Перлина [3 и 4], а также к дополнительным ссылкам из главы 12.
1. Apodaca A. A., Gritz L. Advanced RenderMan: Creating CGI for Motion Pictures. San Francisco: Morgan Kaufmann Publishers, 1999 (http://www.bmrt.org/arman/ materials.html).