Листинг 9.28. Вычисление GL_ADD
vec4 texture - texture2D(texO. gl_JexCoord[0].xy); color.rgb +” texture.rgb; color.a *= texture.a: color = cl amp (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 и 3].
1. 3Dlabs. Веб-сайт для разработчиков (http://www.3dLabs.com/support/deveLoper).
2. Akenine-МцИег Т., Haines Е. Real-Time Rendering. 2nd ed. Natick, MS: A К Peters, Ltd., 2002 (http://www.reaLtimerendenng.com).
3. Introduction to Computer Graphics/J, D. Foley, A. van Dam, S. K. Feiner, at al, Reading, MS: Addison-Wesley, 1994.
4. Computer Graphics: Principles and Practice. 2nd ed./J. D. Foley, A. van Dam, S. K. Feiner, J. H. Hughes. Reading, MS: Addison-Wesley, 1996.
5. Neider J., Davis Т., Woo M. OpenGL Programming Guide. 3rd ed. Reading, MS: Addison-Wesley, 1999,
6. OpenGL Reference Manual: The Official Document to OpenGL, Version 1.2.3rd ed. Reading, MS: Addison-Wesley, 1999.
7. 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).
Шейдеры с сохранением данных в текстурах
Работа с текстурами - очень мощный механизм, встроенный в OpenGL. Когда OpenGL только формировался (1992 г.), аппаратное обеспечение для работы с текстурам и начинало появляться в коммерческих продуктах. В настоящее время текстурное отображение доступно во всех графических акселераторах, даже самых простых.
В версии OpenGL 1.0 текстурное отображение было определено с узкими ограничениями. Это просто был способ наложить изображение на поверхность объекта. С тех пор аппаратное обеспечение стало гораздо более совершенным, и было придумано много способов использования текстур. Определение текстуры в OpenGL также было расширено. Текстурные объекты - одно из ключевых дополнений rOpenGL 1.1. Трехмерные текстуры стали частью стандарта в OpenGL 1.2. Возможность аппаратного обеспечения обращаться к двум и более текстурам одновременно проявились в OpenGL 1.3 вместе с кубическими текстурами и возможностью поддержки форматов сжатия текстур. В OpenGL 1.4 была добавлена поддержка текстур глубины и тени, автоматическое множественное отображение текстур и другие возможности (например, зеркальное повторение). Краткий обзор текстур, используемых в OpenGL, читатель может найти в разделе 1.10.