В режиме GL_ADD вычисляется сумма цвета входящего фрагмента и значения, прочитанного из текстуры. Значения прозрачности перемножаются. Это единственный традиционный режим, в котором вычисленные значения могут выходить за пределы диапазона [0,1], так что результат нужно привести к этому диапазону (листинг 9.28).
Листинг 9.28. Вычисление GL_ADD
vec4 texture - texture2D(texÛ. gl_JexCoord[0].xy) ; col or.rgb +- texture.rgb; color.a *= texture ..a: color = clarap (color. 0.0. 1.0):
Объединенный режим, добавленный в OpenGL 1.3 и расширенный в OpenGL 1.4, определяет ряд новых простых способов наложения текстуры. Для него существует множество новых формул, исходных значений и операндов. Отображение этих дополнительных режимов в коде шейдера OpenGL в этой книге не приводится: это утомительно и не очень интересно.
9.10. Итоги Формулы для рендеринга, представленные OpenGL, реализованы как стандартная функциональность в аппаратном обеспечении, но не обязательно они будут
Традиционные шейдеры
лучшими для тендеров. Однако все равно было полезно посмотреть, как эти формулы выглядят в шейдерах, написанных на языке шейдеров OpenGL. Примеры шейдеров, представленные в этой главе, отображают стандартную функциональность и формулы, но не следует считать эти способы оптимальными. Разработчикам следует лишь учитывать идеи, приведенные а примерах, и адаптировать их для собственных нужд.
9.11. Ссылки Работающие шейдеры с кодом, описанным в этой главе, можно загрузить с вебсайта этой книги: http://www.3dshaders.com.
Книга [5] содержит более подробные описания формул, приведенных в этой главе. Функциональность определяется спецификацией OpenGL [7]. Основные принципы машинной графики, такие как преобразование координат, вычисление освещения, эффекты дымки и текстурирования, описаны в книгах [2 и 3J.
1. 3Dlabs. Веб-сайт для разработчиков (http://www.3dLabs.com/support/deveLoper).
2. Akenine-МцПег Т., Haines Е. Real-Time Rendering. 2nd ed. Natick, MS: А К Peters, Ltd., 2002 (http://www.reaLtimerendering.com).