Особая благодарность создателям языков С, RendcrMan и OpenGL. Возможно, язык шейдеров OpenGL будет следовать традиции успеха и отличного качества.
Мне очень помогли читатели черновиков этой книги. Спасибо Марку Олано, Бобу Куенну, Энди МакГоверну, Джеффри Галиновски, Славеку Килановски, Брэду Риттеру, Берту Фрейденбергу, Стиву Каннингему, Майку Вайблену, Бартольду Лихтенбельту, Джону Кэссеяичу, Терри Моррисону, Дэйву Хьюлтону, На Ли, Фолкеру Шемелю, Терезе Роста и двум неизвестным читателям.
Спасибо моим маленьким дочуркам Рашель и Ханне за то, что они находили время для игр с папой, за улыбки, смех и поцелуи, которые очень помогли мне. Маленький Закари боролся на этапе редактирования книги за мое внимание - и побеждал. И наконец, спасибо Терезе за поддержку в написании этой книги. Это были трудные времена, но ее терпение и сила очень мне помогли. Спасибо за помощь в рождении этой книги.
Обзор OpenGL
Эта глава содержит краткий обзор программного интерфейса OpenGL, который не претендует на полноту, а призван лишь познакомить читателя с фундаментальными понятиями, необходимыми для усвоения материала последующих глав. Читатель, хорошо знакомый с OpenGL, может сразу перейти к следующей главе. Тем же, кто знаком с другими графическими 3D API, эта глава поможет освоить OpenGL до такого уровня, чтобы начать программировать на языке шейдеров1 OpenGL.
Все описания функциональности OpenGL, если не указан другой источник, взяты из спецификации OpenGL 1.5.
1.1. История OpenGL
OpenGL - это промышленный стандарт кроссплатформенного программного интерфейса (API). Его спецификация приняла законченный вид в 1992 г., а первые реализации появились в 2003 г. Интерфейс оказался почти полностью совместимым с уже запатентованным программным интерфейсом графической библиотеки от Silicon Graphics, Inc. - Iris GL API, который разрабатывался и поддерживался этой компанией. Ею же, совместно с другими производителями графического аппаратного обеспечения, был создай общедоступный стандарт, который назвали OpenGL.
У OpenGL много общего с его «родственником», Iris GL. Он должен обеспечивать доступ к возможностям графического аппаратного обеспечения на самом низком уровне, какого только можно достичь, не теряя независимости от платформы. Изначально OpenGL создавался как интерфейс самого низкого уровня доступа к графическому «железу». Реализация OpenGL доступна на многих платформах - Macintosh, PC, Uшх-системах. Она включает поддержку графических аппаратных архитектур, начиная с тех, что предоставляют простой доступ к графическому буферу, и заканчивая такими, в которых нее делается аппаратно.
С момента выхода первой версии OpenGL (1.0) в июне 1992 г. стандарт перерабатывался и дополнялся еще пять раз. Каждая переработка сопровождалась внесением новой функциональности в API. Текущая версия спецификации OpenGL - 1.5.
Первые реализации, соответствующие стандарту OpenGL 1.0, появились в 1993 г. Подготовка версии 1.1 закончена в 1997 г., в нее добавлены две важные функции - обработка массивов вершин (vertex arrays) и обработка текстурных объектов (texture objects).