Встроенные функции для доступа к текстурам глубины (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 (значения, передаваемые в нее, будут зависеть от того, как данные изображения сохраняются в памяти).

После того как текстура готова к использованию, можно выполнить следующее:


⇐ вернуться назад | | далее ⇒