3. Perlin K. An Image Synthesizer//Computer Graphics (Proc. SIGGRAPH-85). 1985. July. P. 287-296.
4. Perlin K. Improving Noise// Computer Graphics (Proc. SIGGRAPH-2002). 2002. July. P. 681-682 (http://mrLnyu.edu/perLin/paper445.pdf).
5. Pixar, The RenderMan Interface Specification, Version 3.2 / Pixar. 2000 (http:// renderman.pixar.com/products/rispec/index.htm).
6. Segal М., Akeley K. The OpenGL Graphics System: A Specification (Version 1,5)/ Ed.: Ch. Frazier (v. 1.1), J. Leech (v. 1.2-1.5). 2003 (http://opengl.org).
7. Upstill S. The RenderMan Companion: A Programmer’s Guide to Realistic Computer Graphics, Reading, MS: Addison-Wesley, 1990.
8. Zwillinger D. CRC Standard Mathematical Tables and Formulas. 30th ed. CRC Press, 1995 (http://geom.math.uiuc.edu/docs/reference/CRC-formulas),
Пример простого шейдера
Рассмотрим простой пример. Предположим, необходимо наложить на объект изображение кирпичной стены. Этот шаблон будет вычисляться фрагментный шейдером. Если вы хотите побыстрее перейти к обсуждению API для определения шейдеров и управления ими, то эту главу можно пропустить.
Пример, как и большинство примеров, приводимых в этой книге, состоит из трех основных компонентов: исходного кода вершинного шейдера, исходного кода фрагментного шейдера и кода приложения, которое инициализирует и использует эти шейдеры. В данной главе основное внимание уделяется именно шейдерам, а код приложения можно найти в разделе 7.11, после обсуждения API языка шей-дерйв OpenGL.
В первом примере будут подробно рассмотрены все детали - это поможет лучше усвоить информацию; в последующих примерах подробно будут рассматриваться только новые возможности, которых не было в предыдущих примерах.
.1. Обзор шейдера кирпичной стены
Один из приемов написания шейдеров состоит в том, чтобы сначала описать желаемый эффект, а потом определить, какие части функциональности должны быть реализованы в вершинном шейдере, а какие - во фрагментном, и как связать эти части через приложение.
В данном примере будет показан шейдер, который применяет шаблон кирпичной стены ко всем объектам, рисуемым на экране. Здесь не делается попытка создать что-либо, выглядящее как настоящая кирпичная стена, а реализуется простой шейдер для иллюстрирования принципов, описанных в предыдущих главах, так что поверхность будет нарисована алгоритмически, а не взята из текстуры. Если усложнить алгоритм рисования шаблона некоторыми изменяемыми параметрами, можно добиться интересных эффектов и некоторой гибкости.
Итак, вот описание результата, который нужно получить.
□ Простой источник света.
□ Характеристики рассеянного и отраженного света.
□ Шаблон кирпичной стены, основывающийся на пространственных координатах объекта, где координатах обозначает измерение кирпичей по горизонтали, а координата у - измерение по вертикали.
□ Каждый следующий ряд кирпичей сдвинут относительно предыдущего на половину ширины кирпича.