Встроенные функции для доступа к текстурам глубины (shadowlD, shadow2D и др.) тйже работают так, как это определено для стандартной функциональности. Формат текстуры, к которой обращаются, должен быть GL_DEPTH_COMPONENT. Возвращаемое значение зависит от режима сравнения текстуры, функции сравнения и режима глубины. Каждое из этих значений можно задать с помощью функции glTexParameter.
Встроенные функции доступа к текстуре работают в соответствии с текущим состоянием заданного текстурного модуля и с параметрами текстурного объекта, присоединенного к этому текстурному модулю. Другими словами, при определении возвращаемого значения встроенной функции учитываются состояния текстурного модуля и текстурного объекта, в том числе режим переноса, уменьшение и увеличение, цвет рамки, минимальный/максимальный уровень детализации, режим сравнения текстур и т. д.
0.2. Простой пример текстурирования
Используя встроенные функции для доступа к текстурам, легко написать простой шейдер, который будет выполнять наложение текстуры.
Чтобы достичь результатов, начнем с очень хороших текстур. На цветном рис. 2 показан пример двухмерной текстурной карты - цилиндрическая проекция поверхности земного шара с облаками. Это изображение, как и другие, о которых говорится в этом разделе, взято с веб-сайта NASA1 и создано Рето Стёкли из центра космических летательных ал паратов (NASA/Goddard Space Flight Center). Эти изображения Земли - часть постепенно обрабатываемой последовательности данных (суша, морской лед и облака) от спутника-наблюдателя NASA, спектрорадиометра со средней разрешающей способностью. Данные от этого спутника совмещаются с другими изображениями (топографические карты, земной покров и огни городов), все с разрешением до 1 км. Результат - изображение исключительно высокого разрешения (43 200 х 21 600 пикселов). Для наших целей хватит и менее подробной текстуры, так что мы будем использовать версии изображения с уменьшенным разрешением: 2048 х 1024.
10.2.1. Настройка приложения
Предположим, что изображение уже занесено в наше приложение и его ширина, высота, указатель на изображение и имя текстуры можно передать в функцию инициализации текстуры:
init2DTexture( GLint texName, GLint texWidth.
GLint texHeight. GLubyte *texPtr)
{
glB1ndTexture(GL_TEXTURE_2D. texName);
glTexParameteri(GL_TEXTURE_2D. GL_TEXTURE_WRAP_S. GL_REPEAT): glTexParameteri (GL_TEXTllRE_2D. GL JHTUREJJRAPJ. GL_REPEAT): glTexParameteri(GL_TEXTURE_2D. GL_TEXTURE_MAG_FILIER, GL_LINEAR): glTexParameteri (GLJEXTUREJD. GL_TEXTURE_MIN_FILTER. GL LINEAR): glTexImage2D(GL_TEXTUREJ2D. 0. GL_RGB. texWidth, texHeight, 0,
GL_RGB. GL_UNSIGNED_BYTE. texPtr);
}
Этим создается текстурный объект с именем texName. Вызов функции glTex Parameter устанавливает режимы фильтрации и наложения. Выбираем повторение и линейную фильтрацию. Данные для текстуры задаются функцией glTexIfrage2D (значения, передаваемые в нее, будут зависеть от того, как данные изображения сохраняются в памяти).
После того как текстура готова к использованию, можно выполнить следующее: